Відповіді:
Покриття коду - це вимірювання кількості рядків / блоків / дуг вашого коду, виконаних під час роботи автоматизованих тестів.
Покриття коду збирається за допомогою спеціалізованого інструменту для інструментації двійкових файлів для додавання викликів відстеження та проведення повного набору автоматизованих тестів на інструментальний продукт. Хороший інструмент дасть вам не тільки відсоток виконуваного коду, але також дозволить детально ознайомитись з даними та точно побачити, які рядки коду були виконані під час конкретного тесту.
Наша команда використовує Magellan - власний набір інструментів для покриття коду. Якщо ви є магазином .NET, Visual Studio має інтегровані інструменти для збору покриття коду. Ви також можете скочувати деякі спеціальні інструменти, як описано у цій статті .
Якщо ви магазин C ++, Intel має деякі інструменти, які працюють для Windows та Linux, хоча я не використовував їх. Я також чув, що є інструмент gcov для GCC, але я нічого не знаю про це і не можу надати вам посилання.
Щодо того, як ми його використовуємо - покриття коду є одним із наших критеріїв виходу для кожної віхи. Насправді у нас є три показники покриття коду - покриття від одиничних тестів (від команди розробників), тестів сценаріїв (від команди тестування) та комбінованого покриття.
BTW, хоча висвітлення коду - це хороший показник того, скільки ви проводите тестування, це не обов'язково є хорошим показником того, наскільки добре ви тестуєте свій продукт. Є інші показники, які слід використовувати разом із покриттям коду для забезпечення якості.
Покриття коду в основному тестує те, що значна частина вашого коду охоплена тестами. Отже, якщо у вас 90% покриття коду, це означає, що 10% коду не покриваються тестами. Я знаю, що ви можете думати, що 90% коду покрито, але ви повинні дивитись з іншого кута. Що зупиняє вас на 100% покритті коду?
Хорошим прикладом буде такий:
if(customer.IsOldCustomer())
{
}
else
{
}
Тепер у наведеному вище коді є два контури / гілки. Якщо ви завжди натискаєте на гілку "ТАК", тоді ви не охоплюєте іншу частину, і це буде показано в результатах покриття коду. Це добре, тому що тепер ви знаєте, що те, що не охоплено, і ви можете написати тест, щоб покрити іншу частину. Якщо не було покриття коду, то ви просто сидите на бомбі, яка вибухнула.
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://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
Обидва є корисними посиланнями для вивчення та вивчення покриття коду за допомогою Xcode.
Для PHP слід поглянути на Github від Себастьяна Бергмана
Забезпечує збирання, обробку та візуалізацію інформації про покриття коду PHP.