Какие методы вы успешно использовали для улучшения покрытия кода?

StackOverflow https://stackoverflow.com/questions/170751

  •  05-07-2019
  •  | 
  •  

Вопрос

Я регулярно достигаю 100% покрытия библиотек с помощью TDD, но не всегда, и всегда остаются части приложений, которые остаются непроверенными и непокрытыми.
Кроме того, бывают случаи, когда вы начинаете с устаревшего кода, в котором очень мало тестов и очень мало покрытия.

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

Это было полезно?

Решение

Удалить код.

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

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

Другие советы

Я предполагаю, что вы читаете "Покрытый код против.Код протестирован", верно ?

Как указано в этом вопросе,

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

Теперь я использую эклемма, основанный на EMMA и этом инструменте покрытия кода, объясняет, почему 100% код не всегда возможен:из-за частично закрытые линии из-за:

  • Неявные ветвления на одной линии.
  • Общий код конструктора.
  • Неявные ветвления из-за блоковfinally.
  • Неявные ветвления из-за скрытого Class.forName().

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

Теперь я согласен с ответом Фрэнка Крюгера.Некоторый непокрытый код также может указывать на необходимость проведения некоторого рефакторинга, включая некоторый код, который необходимо фактически удалить;)

Две вещи, которые оказали наибольшее влияние на проекты, над которыми я работал, были:

<Ол>
  • Периодически "напоминать" команда разработчиков должна реализовать юнит-тесты и изучить, как писать эффективные тесты.
  • Создание отчета об общем охвате тестированием и распространение его среди менеджеров по развитию.
  • Мы используем Perl, поэтому Девел::Обложка был очень полезен для нас.Показывает покрытие для каждого оператора, покрытие ветвей и условное покрытие во время модульного тестирования, а также такие вещи, как покрытие POD.Мы используем HTML-вывод с легко распознаваемыми зелеными цветами для обозначения «100%», а также желтыми и красными для более низких уровней покрытия.

    РЕДАКТИРОВАТЬ: Немного подробнее:

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

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

    Справочная информация: у нас есть смесь устаревшего и нового кода. Мы стараемся проводить как можно больше модульного / интеграционного тестирования нового материала, но поскольку мы переходим на Hibernate / Postgres и от OODB, нет особого смысла тестировать устаревший код.

    Для тех, кто не знает, FIT - это способ тестирования программного обеспечения с точки зрения пользователя. По сути, вы можете указать желаемое поведение в таблицах HTML: таблицы определяют действия с программным обеспечением и желаемые результаты. Наша команда пишет «клейкий код» (он же FIT-тест), который сопоставляет действия с вызовами кода. Обратите внимание, что эти тесты работают в режиме «из космоса» по сравнению с модульными тестами.

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top