Метрика покрытия кода показывает, какая доля исходного кода была выполнена в тестах.
Однако стопроцентное покрытие кода не гарантирует идеальное качество или отсутствие ошибок. Давайте рассмотрим два основных типа метрик покрытия кода и их ограничения.
Типы метрик покрытия кода
Code Coverage
Code Coverage измеряет отношение количества выполненных строк кода к общему количеству строк кода. На первый взгляд, кажется логичным стремиться к максимальному покрытию, но этот подход имеет свои недостатки.
Пример:
const evaluate = (x) => {
if (x > 10) {
return "Greater";
} else {
return "Lesser";
}
};
// Тесты
assert(evaluate(5) == "Lesser");В этом примере тесты покрывают 50% строк кода.
Теперь рассмотрим пример рефакторинга кода:
const evaluateRefactor = (x) => (x > 10) ? "Greater" : "Lesser";
// Тесты
assert(evaluateRefactor(5) == "Lesser");
В этом примере тесты покрывают только одну строку, что соответствует 100% покрытия
Проблемы с таким подходом:
Branch Coverage
Branch Coverage измеряет отношение количества покрытых ветвей к общему количеству ветвей в коде. Ветви – это управляющие структуры, такие как
if, switch, и циклы.Пример:
const evaluate = (x) => {
if (x > 10) {
return "Greater";
} else if (x < 5) {
return "Lesser";
} else {
return "Equal";
}
};
// Тесты
assert(evaluate(15) == "Greater");
assert(evaluate(3) == "Lesser");
assert(evaluate(7) == "Equal");В этом примере тесты покрывают все возможные ветви:
if (x > 10), else if (x < 5) и else. Таким образом, достигается стопроцентное покрытие ветвей. Однако это не гарантирует, что все граничные условия, такие как точные значения 10 и 5, были протестированы.Проблемы с таким подходом:
Заключение:
code coverage или branch coverage, является полезным инструментом, и они могут говорить о проблемахСтавьте 👍 👎
Теги: #code_coverage #branch_coverage #automation
Please open Telegram to view this post
VIEW IN TELEGRAM
👎56👍14❤3