разработка через тестирование - Кто должен писать тесты?

12

Первоначально, это обязанность разработчика писать тест, но я заметил, что во многих случаях / e-зрелые разработчики эти случаи не дают даже 80% покрытия.
Как насчет того, чтобы у меня был специалист по обеспечению качества, посвященный написанию ВСЕХ тестов для данного проекта вместо разработчика?
Есть ли какие-то минусы к этому?

Итай Моав -Малимовка
источник
2
Имейте в виду, что TDD НЕ означает писать все тесты для всего кода, а затем писать код. Это термин; все же практический подход - написание тестов, а затем написание кода небольшими итерациями; приближаясь к нему более параллельным образом. Написание ВСЕХ тестов заблаговременно - пустая трата времени, потому что рефакторинг неизбежно всплывет.
Аарон Макивер

Ответы:

19

В разработке через тестирование тесты должны быть написаны разработчиком. Иначе кто-то, кроме разработчика, руководит разработкой.

Поэтому, как только вы дадите работу по написанию тестов не-разработчику, этот человек станет разработчиком.

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

Эрик Уилсон
источник
1
Если бы у вас было два единомышленника с позиции навыков, вы, вероятно, могли бы подходить к TDD в режиме парного программирования, переключаясь между тестами и кодом. Называйте их тестировщиками / программистами / кодовыми обезьянами ... речь идет о наборе навыков, который вы затронули.
Аарон Макивер
И, учитывая, что вы пишете_test-write_code-run_test, возможно, каждую минуту вы уничтожаете свой темп прогресса.
Фрэнк Шеарар
7

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

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

И последнее, но не менее важное: в «чистом» TTD вообще не должно быть непокрытого кода (поскольку вы сначала пишете тесты). Однако есть случаи (хотя люди спорят об этом), когда более низкий охват кода приемлем. Некоторые утверждают, например, что написание тестов для получателей / установщиков POJO - пустая трата времени.

MCHL
источник
2

эти случаи не дают даже 80% покрытия

Это может быть проблемой управления.

Или это может быть неактуально.

Во-первых, разница между 80% и 100% охватом - это, вероятно, большая цена за очень небольшую выгоду.

«Покрытие» может означать что угодно. Строки кода, логические пути и т. Д. Я предполагаю, что вы имеете в виду строки кода (не логические пути).

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

На 20% больше тестов не всегда на 20% больше качества.

Во-вторых. Это проблема управления. Если руководство хочет 100-процентное покрытие, оно должно внедрить систему вознаграждений, которая вознаграждает 100-процентное покрытие вместо того, чтобы «достаточно хорошо выпустить» 80-процентное покрытие.

Добавление QA людей, чтобы написать больше тестов, не очень поможет.

Добавление разработчиков для написания большего количества тестов - это то, что необходимо для обеспечения 100% покрытия тестами.

С. Лотт
источник
Кто сказал что-нибудь о 100% покрытии?
Эрик Уилсон
@FarmBoy: вопрос подразумевает, что 80% -ое покрытие недостаточно хорошо. Что достаточно хорошо? Обычный магический номер - 100% охват.
С.Лотт
1
Но мой тренер всегда говорил мне, чтобы дать 110%. Почему я не могу требовать такого количества покрытия ... ;-P
Берин Лорич
@Berin Loritsch: я за тобой на 200%.
S.Lott
1
@Job: «Некоторые QA люди могут написать некоторый код». Правильно. Затем они становятся разработчиками, и это хорошо.
С.Лотт
2

ИМХО Модульное тестирование не является процессом обеспечения качества. Это скорее ускорение разработки (за счет сокращения цикла обратной связи для разработчиков). Это должен делать человек, пишущий компонент (он же модуль), с акцентом на использование компонентов (другим разработчиком).

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

И то, и другое можно сделать в стиле TDD.

Хит Лилли
источник
2

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

Следует также отметить, что покрытие не скажет вам о качестве кода и не сообщит, распространяется ли действие правил домена.

Фернандо
источник
0

Если вам нужно покрытие не менее 80%, вам нужно сделать пару вещей:

  • Предоставьте вашим разработчикам инструменты, которые им необходимы, чтобы определить, какой уровень охвата у них есть - и убедитесь, что это яблоки с яблоками. Существует несколько способов измерения покрытия.
  • Обеспечить награду / стимул для выполнения этого подвига. Программисты будут делать только то, что, по их мнению, окупятся. Если 50% покрытия достаточно, чтобы обеспечить качество и выполнить всю работу, это то, что они будут делать.

Наконец, следует понимать, что существует разница между предполагаемыми путями выполнения и непредусмотренными путями выполнения. В процессе написания тестового кода вы, возможно, доказали, что вам нужна пара независимых операторов if. В результате доступны тесты для двух из четырех возможных путей выполнения. Добавьте еще один независимый оператор if, и у вас есть потенциал для восьми путей выполнения (т. Е. Экспоненциальный рост).

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

Берин Лорич
источник