Какие методы вы успешно использовали для улучшения покрытия кода?
-
05-07-2019 - |
Вопрос
Я регулярно достигаю 100% покрытия библиотек с помощью TDD, но не всегда, и всегда остаются части приложений, которые остаются непроверенными и непокрытыми.
Кроме того, бывают случаи, когда вы начинаете с устаревшего кода, в котором очень мало тестов и очень мало покрытия.
Пожалуйста, расскажите, какова ваша ситуация и что сработало, по крайней мере. улучшен покрытие.
Я предполагаю, что вы измеряете покрытие во время модульного тестирования, но скажем, используете ли вы другие методы.
Решение
Удалить код.
Это не изворотливо, но на самом деле серьезно. Каждый раз, когда я видел наименьшее количество дублирования кода или даже кода, который не мог выполнить, я удалял его. Это увеличило охват и улучшило ремонтопригодность.
Я должен отметить, что это более применимо для увеличения охвата старых баз кода по сравнению с новыми базами кода. Р>
Другие советы
Я предполагаю, что вы читаете "Покрытый код против.Код протестирован", верно ?
Как указано в этом вопросе,
Даже при 100% покрытии блоков + 100% покрытии дуг + 100% безошибочном прямолинейном коде с хотя бы одним путем все равно будут входные данные, которые выполняют пути/циклы способами, вызывающими больше ошибок.
Теперь я использую эклемма, основанный на EMMA и этом инструменте покрытия кода, объясняет, почему 100% код не всегда возможен:из-за частично закрытые линии из-за:
- Неявные ветвления на одной линии.
- Общий код конструктора.
- Неявные ветвления из-за блоковfinally.
- Неявные ветвления из-за скрытого Class.forName().
Таким образом, все эти четыре случая могут быть хорошими кандидатами на рефакторинг, ведущий к лучшему покрытию кода.
Теперь я согласен с ответом Фрэнка Крюгера.Некоторый непокрытый код также может указывать на необходимость проведения некоторого рефакторинга, включая некоторый код, который необходимо фактически удалить;)
Две вещи, которые оказали наибольшее влияние на проекты, над которыми я работал, были:
<Ол>Мы используем Perl, поэтому Девел::Обложка был очень полезен для нас.Показывает покрытие для каждого оператора, покрытие ветвей и условное покрытие во время модульного тестирования, а также такие вещи, как покрытие POD.Мы используем HTML-вывод с легко распознаваемыми зелеными цветами для обозначения «100%», а также желтыми и красными для более низких уровней покрытия.
РЕДАКТИРОВАТЬ: Немного подробнее:
- Если условное покрытие не является полным, проверьте условия взаимозависимости.Если он есть, выполните рефакторинг.Если это не так, вы сможете расширить свои тесты, чтобы удовлетворить все условия.
- Если условное покрытие и покрытие ветвей выглядят полными, а покрытие операторов — нет, вы либо неправильно написали условные выражения (например,всегда рано возвращаетесь из подпрограммы, когда вы этого не хотели) или у вас есть лишний код, который можно безопасно удалить.
FIT-тестирование улучшило покрытие кода. Это было здорово, потому что это совершенно другой курс.
Справочная информация: у нас есть смесь устаревшего и нового кода. Мы стараемся проводить как можно больше модульного / интеграционного тестирования нового материала, но поскольку мы переходим на Hibernate / Postgres и от OODB, нет особого смысла тестировать устаревший код.
Для тех, кто не знает, FIT - это способ тестирования программного обеспечения с точки зрения пользователя. По сути, вы можете указать желаемое поведение в таблицах HTML: таблицы определяют действия с программным обеспечением и желаемые результаты. Наша команда пишет «клейкий код» (он же FIT-тест), который сопоставляет действия с вызовами кода. Обратите внимание, что эти тесты работают в режиме «из космоса» по сравнению с модульными тестами.
Используя этот подход, мы увеличили покрытие кода на несколько процентных пунктов. Дополнительным бонусом является то, что эти тесты будут соединяться между версиями: они будут тестировать устаревший код, а затем - новый код. то есть они служат в некотором смысле регрессионными тестами.