Тестово покритие в софтуерното тестване: Как да го измерим
⚡ Умно обобщение
Тестовото покритие при тестването на софтуер измерва каква част от приложението действително се упражнява от даден набор от тестове. То разкрива непроверени изисквания, кодови пътища и рискове, така че екипите могат да добавят целеви случаи и да ги пускат с измерима увереност.

Какво е тестово покритие?
Тестовото покритие се дефинира като показател в софтуерното тестване, който измерва количеството тестване, извършено от набор от тестове. Това ще включва събиране на информация за това кои части от програма се изпълняват при изпълнение на тестовия пакет, за да се определи кои клонове на условни изрази са били взети.
С прости думи, това е техника, която гарантира, че вашите тестове тестват вашия код или каква част от вашия код сте упражнили, като сте изпълнили теста.
Какво прави тестовото покритие?
В реален проект, тестовото покритие поддържа четири практически дейности:
- Намиране на областта на изискване, което не е изпълнено от набор от тестови случаи
- Помага за създаване на допълнителни тестови случаи за увеличаване на покритието
- Идентифициране на количествена мярка за тестово покритие, което е индиректен метод за проверка на качеството
- Идентифициране на безсмислени тестови случаи, които не увеличават покритието
Предимства на тестовото покритие в софтуерното инженерство
Тези дейности се превръщат в конкретни инженерни ползи.
- Може да гарантира качеството на теста
- Може да помогне да се идентифицира какви части от кода действително са били докоснати за изданието или корекцията
- Може да определи всички точки на вземане на решения и пътища във вашето приложение, които не са били тествани, което ви позволява да увеличите обхвата на тестването.
- Предотвратяване на дефект изтичане
- Времето, обхватът и разходите могат да бъдат контролирани
- Предотвратяване на дефекти на ранен етап от жизнения цикъл на проекта
- Пропуски в изискванията, тестови случаи и дефекти на ниво модул и ниво код могат да бъдат намерени по лесен начин
Видове тестово покритие
Покритието никога не е едно число. Екипи track няколко типа едновременно, защото всеки отговаря на различен въпрос относно един и същ апартамент. Таблицата по-долу групира типовете, които срещате най-често.
| Вид покритие | Какво измерва | Най-добре се използва за |
|---|---|---|
| Покритие на извлечение (ред) | Изпълнимите редове се изпълняват поне веднъж | Модулни тестове и одити на наследен код |
| Покритие на клона или решението | Истински и неистински резултат от всяко решение | Условна и валидационна логика |
| Покритие на състоянието | Всеки булев подизраз като true и като false | Съставни И или ИЛИ изрази |
| Покритие на пътя | Уникални маршрути, преминали през модул | Критични за безопасността и финансови потоци |
| Функционално покритие | Функции или методи, извиквани от тестове | API и слоеве на услугите |
| Покритие на изискванията | Изискванията са съпоставени с поне един тест | Приемане и противопоставянеtracутално одобрение |
| Покритие на риска | Идентифицирани зони с висок риск, в които са упражнявани | Кратки цикли на освобождаване |
Първите пет типа са мерки на ниво код и принадлежат към тестване на бяла кутия, докато изискванията и покритието на риска са на ниво план за тестване.
Какви са основните разлики между Code Покритие и покритие на тестовете?
Code обхват и тестовото покритие са техники за измерване, които ви позволяват да оцените качеството на кода на вашето приложение.
Ето някои критични разлики между кабините на тези методи на покритие:
| параметри | Code Обхват | Тестово покритие |
|---|---|---|
| дефиниция | Code термин за покритие, използван, когато кодът на приложението се използва, докато приложението работи. | Тестовото покритие означава цялостен тестов план. |
| Цел | Code Метриките за покритие могат да помогнат на екипа да наблюдава своите автоматизирани тестове. | Тестовото покритие дава подробности за нивото, до което е тествано писменото кодиране на дадено приложение. |
| Подтипове | Code покритие, разделено на подтипове като покритие на твърдения, покритие на условия, покритие на клонове, Togglелектронно покритие, покритие на FSM. | Няма подтип на метода за тестово покритие. |
Формула за тестово покритие
За да изчислите тестовото покритие, трябва да следвате дадените по-долу стъпки:
Стъпка 1) Броя Y, общият брой редове код в софтуера, който използвате тестване
Стъпка 2) Броя X, броят редове код, които всички тестови случаи изпълняват в момента
Сега трябва да намерите (X, делено на Y), умножено по 100. Резултатът от това изчисление е % на вашето тестово покритие.
Например:
Ако броят на редовете код в системен компонент е 500 и броят на редовете, изпълнени във всички съществуващи тестови случаи, е 50, тогава покритието на теста е:
(50 / 500) * 100 = 10% // executed lines divided by total lines
Примери за тестово покритие
Само процентът никога не е цялата история, както показват примерите по-долу.
Пример 1:
Например, ако „нож“ е предмет, който искате да тествате, тогава трябва да се съсредоточите върху проверката дали той реже зеленчуците или плодовете точно или не. Има обаче и други аспекти, които трябва да се търсят, като например дали потребителят трябва да може да го борави удобно.
Пример 2:
Например, ако искате да проверите приложението Notepad, проверката на основните му функции е задължителна. Трябва обаче да обхванете и други аспекти, тъй като приложението Notepad реагира очаквано, когато се използват други приложения, потребителят разбира как се използва приложението, не се срива, когато се опита да направи нещо необичайно и т.н.
Техники за покритие на тестове
И двата примера сочат към едно и също заключение: постигането на целта за покритие зависи по-малко от писането на повече тестове и повече от избора на правилната техника за проектиране на тестове. Техниките по-долу разширяват покритието, като същевременно запазватping апартаментът е малък.
- Анализ на граничните стойности: Избира входни данни в краищата на всеки валиден диапазон, където дефектите се струпват най-силно. Вижте анализ на гранични стойности за обработени случаи.
- Разделяне на еквивалентност: Групира входни данни, които приложението третира еднакво, така че един случай може безопасно да представлява цял клас стойности.
- Тестване на таблица с решения: Обхваща комбинации от условия и техните очаквани резултати в рамките на една мрежа.
- Тестване за преход на състояния: Упражнява всяко валидно и невалидно движение между състоянията на приложението.
- Тестване на базов път: Извежда минималния набор от независими пътища от графа на управляващия поток.
- Тестване, базирано на риска: Класира характеристиките по въздействие върху бизнеса и първо обхваща тези с най-висок риск.
- Проучвателно изпитване: Разкрива пропуски, които предварително написани случаи и доклади за покритие никога не разкриват.
Как може да се постигне покритие с тестове?
След като техниките бъдат избрани, покритието се осигурява от четири установени маршрута.
- Тестовото покритие може да се извърши чрез упражняване на техники за статичен преглед като партньорски прегледи, инспекции и преглед
- Чрез трансформиране на ad-hoc дефектите в изпълними тестови случаи
- На ниво код или ниво на тест на единица, покритието на теста може да бъде постигнато чрез използване на инструментите за автоматизирано покритие на код или покритие на тест на единица
- Функционалното тестово покритие може да се извърши с помощта на подходящи инструменти за управление на тестове
Как да подобрим тестовото покритие
Установяването на покритие е отправната точка; повишаването му е повтаряща се рутина. Работете по тази последователност в началото на всеки цикъл на пускане на пазара.
- Базово изравнете текущото число. Изпълнете отделно отчет за покритие и отчет за запис, клон и покритие на изисквания, така че пропуските да останат видими за всеки модул, а не скрити в рамките на една средна стойност за целия проект.
- Съпоставете тестовете с изискванията. Build a tracтаблица за ефективност, която свързва всяко изискване с поне един тестов случай. Всеки празен ред е потвърдена празнина, а не подозрение.
- Класирайте модулите по риск. Логиката на плащането, удостоверяването и миграцията на данни заслужава далеч по-задълбочено покритие от статичен екран за помощ, така че изразходвайте бюджета там, където евентуална повреда би навредила най-много.
- Добавете отрицателни и гранични случаи. Празните входни данни, прекалено големите стойности, мрежовите таймаути и грешките в разрешенията достигат до клонове, които тестовете за щастлив път никога не докосват.
- Подредете тестовите нива на слоеве. Комбинирам модулно тестване, интеграционно тестванеи проверки от край до край, защото всяко ниво покрива това, което останалите структурно не могат.
- Автоматизирайте регресионния пакет. Promoстабилни случаи в тестване за автоматизация и да ги изпълните вътре в CI/CD тръбопровод след всеки коммит.
- Оттеглете излишните случаи. Изтрийте дублирани тестове, които добавят минути за изпълнение, без да добавят нито един непокрит ред.
- Revвижте тенденцията всеки спринт. Track покритие до плътност на дефектитеНарастващото изтичане при плоско покритие е ранно предупреждение за сляпо петно.
⚠️ Предупреждение: Не третирайте 100% като цел. Пакет с 85% надеждност и силни твърдения защитава дадена версия много по-добре от 95% повърхностни проверки, които изпълняват код, без да проверяват резултата.
Недостатъци на тестовото покритие
Покритието остава ценно, но носи ограничения, които си струва да се посочат, преди да се докладва какъвто и да е процент.
- Повечето от задачите в тестовото покритие са ръчни, тъй като няма инструменти за автоматизиране. Следователно са необходими много усилия за анализиране на изискванията и създаване на тестови случаи.
- Тестовото покритие ви позволява да преброите функции и след това да измерите с няколко теста. Винаги обаче има място за грешки в преценката.
