Как обеспечить качество юнит-тестов?

Существуют ли проверенные способы проверки качества тестов Junit или интеграционных тестов?

Должен ли ваш бизнес-аналитик проверять юнит-тесты на достоверность? Или есть другие способы? В традиционной среде кода сначала коллега или руководитель рассмотрели бы план тестирования, но как насчет автоматизированных тестов?

Я посмотрел на этот поток стека, но не смог извлечь ничего значимого.

Мысли?

5 ответов

Мутационное тестирование и покрытие кода могут проверить качество ваших тестов.

Итак, сначала проверьте, что покрытие вашего кода достаточно высоко. После этого проверьте с помощью мутационного тестирования, чем ваш тест хороши. Инструмент мутационного тестирования вносит небольшие изменения в производственный код и повторно запускает тест - после модификации хороший тест должен провалиться. Для инструмента тестирования мутации в Java посмотрите на Тестирование мутации PIT и это сообщение в блоге: Введение в тестирование мутации с помощью PIT и TestNG

Но этого все еще недостаточно, тесты должны быть хорошо написаны и читаемы. Поэтому вам также необходимо проверить код и проверить правила качества тестов. Я рекомендую хорошую книгу о написании хороших тестов http://practicalunittesting.com/. Глава 10: Поддерживаемые тесты из этой книги доступны бесплатно.

Вот хорошая связанная статья:

http://www.ibm.com/developerworks/java/library/j-cq01316/index.html?ca=drs

А также:

Хорошие тесты ⇒ Высокий охват Высокий охват ⇒/⇒ Хорошие тесты

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

Инструмент покрытия кода - хорошее начало, но знание того, что данная строка была выполнена, не означает, что она была проверена. Печально известные тестовые случаи без утверждений или expected=Exception.class являются примером.

Я могу представить несколько критериев на этом уровне:

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

Один может попытаться автоматизировать первый, другие более или менее субъективны.

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

Проверка кода - лучший способ обеспечить качество теста. Я не хотел бы, чтобы бизнес-аналитики пересматривали тесты, потому что у них не было подготовки, необходимой для понимания тестов. Кроме того, модульные тесты не все живут на функциональном уровне, где требования аналитиков. Аналитик может сказать "когда пользователь нажимает сохранить, профиль сохраняется", тогда как вам может потребоваться написать n тестов для нескольких слоев, чтобы получить эту функциональность.

Вы могли бы рассмотреть инструменты покрытия кода, чтобы гарантировать, что 100% строк кода тестируются. Эмма - хороший инструмент для Java (http://emma.sourceforge.net/).

Другие вопросы по тегам