Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246

TDD: разумно ли ставить ID тесту и помечать им тестируемый участок кода?

29.05.2016, 22:46. Показов 916. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Оторвался от учебника по TDD и начал ходить на костылях. Как ни странно, но получается. Хотя, и очень медленно.

В связи с этим такая шальная мысль мелькнула в голове:
1. Берем генератор случайных чисел и генерируем строку, скажем, из 5 символов. Это будет ID.
2. К тесту в комментарии пишем этот ID.
3. И когда будем писать код непосредственно самого проекта, тоже помечаем участок этим ID.

Вообще-то говоря, так люди не пишут. Т.е. все проекты, которые я видел, написаны не так.
И в учебниках нам говорят - ты пиши код читабельным, и будет тебе хорошо.

Но, с другой стороны, я не видел ни одного проекта, сделанного по TDD.
Мне кажется, засмеют.

Но, опять же, если в будущем поддерживать код, так на крайний случай можно глобальным поиском весь проект прошерстить на предмет этого ID. Ну, мало ли, тест падает, а тупишь - не можешь найти место. Время можно сэкономить.

Вообще, я подозреваю, что это идея не очень хорошая. Просто потому, что люди так не пишут.
Но - в любом случае - был бы признателен за критику.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2016, 22:46
Ответы с готовыми решениями:

Участок B кода выполняется позже, чем участок A кода, но почему-то B влияет на работоспособность A! Почему?
Друзья! То есть суть такая, создаю объект и в конструктор передаю имя процесса и хэндл снимка системы. А в конструкторе начинается...

Объясните участок кода
Такой вопрос, ребят, что означает данная часть кода for(start_v=1;start_v<=n;start_v++) { rez=new int ; for...

Расшифровать участок кода
вы видите участок кода и видите переменную $log? Что она делает? Код взят из шаблонного сайта в открытом доступе. function...

10
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,099
30.05.2016, 14:57
Цитата Сообщение от Kifsif Посмотреть сообщение
Вообще, я подозреваю, что это идея не очень хорошая.
Согласен, идея бредовая.

Название теста должно отображать что он тестирует и как. Ещё желательно, чтобы иерархия исходных кодов тестов повторяла иерархию исходников тестируемого приложения. Тогда не возникнет вопросов, где искать тестируемый код. Да и без этого все современные IDE умеют выполнять поиск по названию класса/метода/переменной.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
30.05.2016, 15:19  [ТС]
Не знаю, не знаю. Я не считаю эту идею бредовой. Уж чем-чем, а бредом ее назвать не могу. Почему же она бредовая?
Повышает читаемость кода? Да, повышает.
Быстро реализуема? Да, быстрее, чем развернутый комментарий к тесту.
Удобно? Возможно, никто просто не пробовал.

Вот возьмем, например, в веб-разработке подключение готового модуля. Ну, например, авторизации и регистрации пользователя.
Чтобы интегрировать этот модуль, надо эту интеграцию покрыть тестами.

Ну, самое простое - а вернет ли http-код 200 при запросе страницы регистрации.

Пишем тест с именем test_account_register_status_200.

Он, конечно, упадет в ошибку. А вот чтобы тест прошел, надо уже в нескольких местах подшурупить. Во-первых, модуль зарегистрировать, во-вторых, шаблон создать, в третьих указать путь до папки с шаблонами.

Вот три места.

Когда с нуля пишешь, можно по чуть-чуть идти. А когда тебе бульдозер подвез гору готового кода, тут, знаете ли, можно подумать уже и о прояснении того, что кроется за возвращаемым кодом 200.

В общем, бредом как-то я эту идею бы не назвал. А вот с реализацией, не знаю. Я пока не применяю.
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,099
30.05.2016, 17:21
Kifsif, таки это ерунда полная. Идентификатором теста покрывающего некоторый участок кода будет комбинация имени тестируемого класса с суффиксом "Test" и именем метода отражающим тестируемый метод и логику тестирования. И этого достаточно. И не нужны никакие пятизначные ID в комментариях.

Цитата Сообщение от Kifsif Посмотреть сообщение
Когда с нуля пишешь, можно по чуть-чуть идти. А когда тебе бульдозер подвез гору готового кода, тут, знаете ли, можно подумать уже и о прояснении того, что кроется за возвращаемым кодом 200.
А это вообще о чём? Как тебе какие-то идентификаторы помогут разобраться в унаследованном коде?

Добавлено через 3 минуты
Цитата Сообщение от Kifsif Посмотреть сообщение
Повышает читаемость кода? Да, повышает.
Т.е. строка вида //54395 разом прояснит что-то в коде? Предлагаешь по всему проекту поиск делать, чтобы разобрать что значит это число?
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
30.05.2016, 17:42  [ТС]
Ну, вот подключаю я модуль для регистрации юзера.

И хочу написать функциональный тест (т.е. то, что выполняет и видит юзер): если перейти на страничку регистрации юзера и заполнить все поля, то окажешься на странице, где тебя поблагодарят за регистрацию и скажут - иди теперь в свой емейл и активируй учетку.

В тесте в регистрационной форме с помощью библиотеки Selenium заполнил все поля и нажал "Зарегистрировать".
И тест у меня должен проверить, оказался ли я редиректом на странице с сообщением о регистрации.

Такой тест нужно сделать, мне кажется. Это подстрахует - а не отвалился ли модуль при развертывании на продуктивном сервере. Т.е. мы не тестируем чужой код, а тестируем только его интеграцию со своим проектом.

Начинаю тест выполнять. И получаю всякие сообщения.

Сначала орет: у тебя нет защиты от CSRF, иди, пропиши тег. Прописываю.
Потом он орет: у тебя не заданы установки, сколько дней действительна ссылка для активации. Иду, правлю.
Потом он орет: не могу отправить е-мейл. Иду, задаю установки для отправки е-мейла.
Потом орет: нет шаблона для заголовка е-мейла. Делаю шаблон.
Потом: нет шаблона для текста е-мейла. Делаю шаблон.
Потом: нет шаблона для самой страницы уведомления о том, что регистрацию мы сделали, теперь пора активировать.

Итого, в 6 местах, если не ошибаюсь я ради этого внес правки.

Можно было бы отказаться от написания функционального теста сразу и частично покрыть что-то из этого дела юнит-тестами. Например, отпарвку емейлов. Но все равно не все.

Ну, а дальше, я думаю, не надо особо углубляться в тестирование. Иначе можно этот модуль регистрации неделю подключать. Может, оно и неплохо. Но на практике - если форма регистрации заработала, значит все нормально. И рассматривать ее нужно уже как черный ящик.

Так что тут речь не о том, что можно обойтись юнит-тестом для метода.

И вообще, есть стили разработки, принятые в компаниях. Может быть принято писать номер инцидента по багтрекеру. Т.е. когда правишь код, пишешь этот ID в каждом месте, где правил.

Так что от написания ID к куску кода никто в обморок не падает. Ну, а тут будет написан ID в шести местах, проблем особых нет - глобальный поиск по всему проекту найдет их все довольно быстро.

Чем плохо? Ну, менеджер проекта, если имеет квалификацию и сунет нос, увидит, конечно, что ты что-то писал без тестов. Может наругать. Но для проекта-то это все равно - по крайней мере - не ухудшает качество кода. А улучшить может.
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,099
30.05.2016, 17:56
Kifsif, что-то тебя далеко унесло от мысли изложенной в первом посте. Начал с ID для юнит-тестов, переключился на интеграционное тестирование... Где связь?

Цитата Сообщение от Kifsif Посмотреть сообщение
Т.е. когда правишь код, пишешь этот ID в каждом месте, где правил.
И через некоторое время весь твой код будет напичкан этими невероятно нужными метками Практическая польза от этого какая? Натыкаясь на такую метку вспоминать какой эпичный баг ты исправил тут три месяца назад? Нормальные люди в комментарии к коммиту указывают номер исправленного бага. Если тебе понадобится посмотреть историю правок, то система контроля версий (любая) позволит тебе это сделать. Зачем засорять исходники?
1
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
30.05.2016, 18:04  [ТС]
А где в первом посте про юнит-тесты?
Там просто про тесты. А по умной книжке первым тестом пишется функциональный тест. Потом, правда, написано, что надо помаленьку двигаться и юнит-тестами покрывать каждый шажок.

А тут-то юнит-тесты зачем? Модуль чужой. Надо просто проверить, хорошо ли он интегрировался с твоим проектом. Так что функционального достаточно. Мне так кажется. Я не претендую на истину.

А какие проблемы от засорения исходников комментариями с неким набором номеров тестов. Ну, пусть их там даже будет десяток к одной строчке продуктивного кода. Когда тебе комментарий не нужен, по нему взгляд скользит, не задерживаясь на нем.

Так что кого обременит идентификатор теста?

Ты только не думай, что я бычу. Такая вот идея, просто. И критика идеи приветствуется. Я не уверен, кстати, что идея жизнеспособна.
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,099
30.05.2016, 18:21
Цитата Сообщение от Kifsif Посмотреть сообщение
А где в первом посте про юнит-тесты?
Идея помечать конкретный участок кода меткой указывающей на тест подразумевает именно юнит-тестирование. Интеграционное тестирование охватывает большое количество кода, тут метки ставить замучаешься. Поэтому я и подумал о юнит-тестах.

С помощью меток в коде ты пытаешься продублировать существующий функционал - навигацию по коду (позволяет делать любая IDE) и историю изменения кода (позволяет любая система контроля версий). Если бы это что-то давало, то такой подход бы уже давно практиковался.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
30.05.2016, 18:25  [ТС]
Да, наверное, ты прав. Кстати подключаемый модуль для регистрации юзера, с которым сейчас вожусь, позволяет тестировать его функционал в проекте. Так что это все, видимо, ни о чем. Ну, так, как учебный материал.

А если не секрет, ты плотно покрываешь код тестами? Просто чтобы понять уровень беседы. А то мало ли, вдруг ты вообще тесты не практикуешь.
0
Эксперт .NET
 Аватар для Usaga
14122 / 9341 / 1350
Регистрация: 21.01.2016
Сообщений: 35,099
30.05.2016, 18:32
Цитата Сообщение от Kifsif Посмотреть сообщение
А если не секрет, ты плотно покрываешь код тестами?
Нет, я покрываю тестами только сложную логику ошибки в которой будет сложно увидеть при испытаниях софта. Весь код покрыть тестами - никакого времени не хватит, а, между тем, многое могут увидеть/отловить тестировщики. Так получается намного быстрее. Но это практика в моей фирме такая. Другие жители форума могут работать по другой схеме.
2
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
30.05.2016, 18:42  [ТС]
Спасибо за беседу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2016, 18:42
Помогаю со студенческими работами здесь

Критический участок кода
Добрый день, есть участок кода выполняющий манипуляции с параллельным портом и очень хотелось бы что бы во время выполнения этого участка...

Упростить участок кода!
Наваял вот такой кодик: int A; int B; int C; Console.WriteLine("Верно ли что число...

Объяснить участок кода
Доброго времени суток! Объясните пожалуйста данный участок кода на C#, в частности интересует, что сделалось с помощью оператора =>...

Зациклился участок кода
Здравствуйте, есть вот такой код: Код в начале ..... и далее if (!empty($row)) { usleep(500000); ...

Перейти в участок кода
гугл пользы не дал. подскажите возможнали перейти к определённому участку кода в скрипте? или можно сделать какой нибуть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru