Покрытие кода - это измерение того, сколько строк / блоков / дуг вашего кода выполнено во время выполнения автоматических тестов.
Покрытие кода осуществляется с помощью специализированного инструмента, позволяющего двоичным инструментам добавлять трассировочные вызовы и запускать полный набор автоматических тестов для инструментального продукта. Хороший инструмент даст вам не только процент выполненного кода, но также позволит вам углубиться в данные и точно определить, какие строки кода были выполнены во время определенного теста.
Наша команда использует Magellan - собственный набор инструментов для покрытия кода. Если вы магазин .NET, Visual Studio имеет встроенные инструменты для сбора покрытия кода. Вы также можете свернуть некоторые пользовательские инструменты, как описано в этой статье .
Если вы магазин C ++, у Intel есть некоторые инструменты, которые работают для Windows и Linux, хотя я ими не пользовался. Я также слышал, что есть инструмент gcov для GCC, но я ничего о нем не знаю и не могу дать вам ссылку.
Что касается того, как мы его используем - покрытие кода является одним из критериев выхода для каждого этапа. На самом деле у нас есть три метрики покрытия кода - покрытие из юнит-тестов (от команды разработчиков), сценариев (от команды тестирования) и комбинированное покрытие.
Кстати, хотя охват кода является хорошим показателем того, сколько тестов вы проводите, это не обязательно хороший показатель того, насколько хорошо вы тестируете свой продукт. Есть другие метрики, которые вы должны использовать вместе с охватом кода, чтобы гарантировать качество.
Покрытие кода в основном проверяет, какая часть вашего кода покрыта тестами. Таким образом, если у вас 90% покрытия кода, это означает, что 10% кода не покрыто тестами. Я знаю, что вы можете подумать, что 90% кода покрыты, но вы должны смотреть под другим углом. Что мешает вам получить 100% покрытие кода?
Хороший пример будет таким:
Теперь в приведенном выше коде есть два пути / ветви. Если вы всегда нажимаете на ветку «ДА», то вы не покрываете другую часть, и это будет показано в результатах покрытия кода. Это хорошо, потому что теперь вы знаете, что на это не распространяется, и вы можете написать тест, чтобы охватить остальную часть. Если не было никакого покрытия кода, то вы просто сидите на бомбе замедленного действия, чтобы взорваться.
NCover - хороший инструмент для измерения покрытия кода.
источник
Просто помните, что «100% покрытие кода» не означает, что все тестируется полностью - хотя это означает, что тестируется каждая строка кода, это не означает, что они тестируются в каждой (общей) ситуации.
Я бы использовал покрытие кода, чтобы выделить биты кода, для которых я, вероятно, должен написать тесты. Например, если какой-либо инструмент покрытия кода показывает, что myImportantFunction () не выполняется во время выполнения моих текущих модульных тестов, их, вероятно, следует улучшить.
По сути, 100% покрытие кода не означает, что ваш код совершенен. Используйте это как руководство, чтобы написать более всесторонние (модульные) тесты.
источник
x
и возвращала,x/x
и вы запустили тест, используя my_func (2), у вас было бы 100% покрытие (так как код функции был бы выполнен), но вы пропустили огромную проблему, когда 0 является параметром. Т.е. вы не проверили все необходимые сценарии даже при 100% покрытии.Дополняя несколько пунктов ко многим из предыдущих ответов:
Покрытие кода означает, насколько хорошо ваш тестовый набор покрывает ваш исходный код. т.е. в какой степени исходный код охватывается набором тестовых случаев.
Как упоминалось в ответах выше, существуют различные критерии покрытия, такие как пути, условия, функции, операторы и т. Д.
Примечание: Статический анализ кода обнаружит, есть ли какой-либо недоступный код или зависший код, то есть код, не охваченный каким-либо другим вызовом функции. А также другое статическое покрытие. Даже если статический анализ кода сообщает, что код покрыт на 100%, он не дает отчетов о вашем наборе тестирования, если проверено все возможное покрытие кода.
источник
Покрытие кода было хорошо объяснено в предыдущих ответах. Так что это скорее ответ на вторую часть вопроса.
Мы использовали три инструмента для определения покрытия кода.
Мы используем эти инструменты для
источник
Покрытие кода - это просто мера проверяемого кода. Существует множество критериев охвата, которые можно измерить, но обычно это различные пути, условия, функции и операторы в программе, которые составляют общий охват. Метрика покрытия кода - это просто процент тестов, которые выполняют каждый из этих критериев покрытия.
Что касается отслеживания охвата модульных тестов в моих проектах, я использую инструменты статического анализа кода для отслеживания.
источник
Для Perl есть отличный модуль Devel :: Cover, который я регулярно использую в своих модулях.
Если сборкой и установкой управляет Module :: Build, вы можете просто запустить
./Build testcover
хороший HTML-сайт, который сообщает вам покрытие для каждой подпрограммы, строки и условия, с красивыми цветами, позволяющими легко увидеть, какой путь к коду не был пройден.источник
В предыдущих ответах кодовое покрытие было хорошо объяснено. Я просто добавив некоторые знания , связанные с инструментами , если ваш работают над
iOS
иOSX
платформы, Xcode обеспечивает возможность охвата тестирования и мониторинга кода.Ссылки Ссылки:
https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/07-code_coverage.html
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
Обе полезные ссылки для изучения и изучения покрытия кода с Xcode.
источник
Для PHP вы должны взглянуть на Github от Себастьяна Бергмана
https://github.com/sebastianbergmann/php-code-coverage
источник