Тестово покритие в софтуерното тестване: Как да го измерим

⚡ Умно обобщение

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

  • 🎯 Определение: Покритието на тестовете отчита кои изисквания, функции и кодови пътища вече се прилагат от съществуващите тестове.
  • 🧭 Видове: Оператор, клон, условие, път, изисквания и покритие на риска отговарят на различен въпрос.
  • Code срещу тест: Code Покритието измерва изпълнените изходни линии, докато тестовото покритие измерва цялостния план за тестване.
  • 🧮 Формула: Разделете изпълнените редове на общия брой редове, след което умножете по 100 за процента.
  • 🛠️ техники: Анализът на граничните стойности, таблиците за решения и тестването на прехода на състоянията разширяват обхвата, без да се преувеличава наборът.
  • 📈 Оптимизация: Класирайте модулите по риск, автоматизирайте регресионния пакет и преглеждайте тенденцията на покритието всеки спринт.
  • 🤖 AI помощ: Инструментите с изкуствен интелект генерират липсващи единични тестове и класират непроверените пътища по производствен риск.

Какво е тестово покритие?

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

С прости думи, това е техника, която гарантира, че вашите тестове тестват вашия код или каква част от вашия код сте упражнили, като сте изпълнили теста.

Какво прави тестовото покритие?

В реален проект, тестовото покритие поддържа четири практически дейности:

  • Намиране на областта на изискване, което не е изпълнено от набор от тестови случаи
  • Помага за създаване на допълнителни тестови случаи за увеличаване на покритието
  • Идентифициране на количествена мярка за тестово покритие, което е индиректен метод за проверка на качеството
  • Идентифициране на безсмислени тестови случаи, които не увеличават покритието

Предимства на тестовото покритие в софтуерното инженерство

Тези дейности се превръщат в конкретни инженерни ползи.

  • Може да гарантира качеството на теста
  • Може да помогне да се идентифицира какви части от кода действително са били докоснати за изданието или корекцията
  • Може да определи всички точки на вземане на решения и пътища във вашето приложение, които не са били тествани, което ви позволява да увеличите обхвата на тестването.
  • Предотвратяване на дефект изтичане
  • Времето, обхватът и разходите могат да бъдат контролирани
  • Предотвратяване на дефекти на ранен етап от жизнения цикъл на проекта
  • Пропуски в изискванията, тестови случаи и дефекти на ниво модул и ниво код могат да бъдат намерени по лесен начин

Видове тестово покритие

Покритието никога не е едно число. Екипи 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 дефектите в изпълними тестови случаи
  • На ниво код или ниво на тест на единица, покритието на теста може да бъде постигнато чрез използване на инструментите за автоматизирано покритие на код или покритие на тест на единица
  • Функционалното тестово покритие може да се извърши с помощта на подходящи инструменти за управление на тестове

Как да подобрим тестовото покритие

Установяването на покритие е отправната точка; повишаването му е повтаряща се рутина. Работете по тази последователност в началото на всеки цикъл на пускане на пазара.

  1. Базово изравнете текущото число. Изпълнете отделно отчет за покритие и отчет за запис, клон и покритие на изисквания, така че пропуските да останат видими за всеки модул, а не скрити в рамките на една средна стойност за целия проект.
  2. Съпоставете тестовете с изискванията. Build a tracтаблица за ефективност, която свързва всяко изискване с поне един тестов случай. Всеки празен ред е потвърдена празнина, а не подозрение.
  3. Класирайте модулите по риск. Логиката на плащането, удостоверяването и миграцията на данни заслужава далеч по-задълбочено покритие от статичен екран за помощ, така че изразходвайте бюджета там, където евентуална повреда би навредила най-много.
  4. Добавете отрицателни и гранични случаи. Празните входни данни, прекалено големите стойности, мрежовите таймаути и грешките в разрешенията достигат до клонове, които тестовете за щастлив път никога не докосват.
  5. Подредете тестовите нива на слоеве. Комбинирам модулно тестване, интеграционно тестванеи проверки от край до край, защото всяко ниво покрива това, което останалите структурно не могат.
  6. Автоматизирайте регресионния пакет. Promoстабилни случаи в тестване за автоматизация и да ги изпълните вътре в CI/CD тръбопровод след всеки коммит.
  7. Оттеглете излишните случаи. Изтрийте дублирани тестове, които добавят минути за изпълнение, без да добавят нито един непокрит ред.
  8. Revвижте тенденцията всеки спринт. Track покритие до плътност на дефектитеНарастващото изтичане при плоско покритие е ранно предупреждение за сляпо петно.

⚠️ Предупреждение: Не третирайте 100% като цел. Пакет с 85% надеждност и силни твърдения защитава дадена версия много по-добре от 95% повърхностни проверки, които изпълняват код, без да проверяват резултата.

Недостатъци на тестовото покритие

Покритието остава ценно, но носи ограничения, които си струва да се посочат, преди да се докладва какъвто и да е процент.

  • Повечето от задачите в тестовото покритие са ръчни, тъй като няма инструменти за автоматизиране. Следователно са необходими много усилия за анализиране на изискванията и създаване на тестови случаи.
  • Тестовото покритие ви позволява да преброите функции и след това да измерите с няколко теста. Винаги обаче има място за грешки в преценката.

Въпроси и Отговори

Повечето екипи третират 70 до 80 процента като практическа цел и 90 процента или повече за критични за безопасността модули. Преследването на 100 процента рядко се изплаща. Приоритизирайте дълбочината на логиката с висок риск, вместо да разпределяте тестовете равномерно в кодовата база.

Не. Пълното покритие доказва, че всеки елемент е изпълнен, а не че всяка стойност, изискване или потребителско пътуване е било валидирано. Липсващи изисквания, слаби твърдения и нефункционални грешки, като например бавно време за реакция, все още не се отчитат при 100% отчитане на пакет.

Докладът за покритие изброява покритите и непокрити линии, разклонения и функции за всеки файл, с проценти, обобщени по модул и проект. Инструменти като JaCoCo също така маркирайте частично покрити клони, обикновено най-бързо затварящите се празнини.

Изкуственият интелект анализира изходния код, историята на изпълнението и данните за дефекти, за да определи непроверени пътища с висок риск, след което предлага случаи, които ги приключват. Той също така класира кои тестове да се изпълнят първо, като съкращава обратната връзка в процес на разработка, без да жертва покритието.

Да. Инструменти като Дифблу пишете автоматично единични тестове за открита логика, а генеративните модели превръщат изискванията на разбираем език в изпълними случаи. Човешкият преглед остава от съществено значение, защото генерираните твърдения могат да преминат без проверка на смислено поведение.

Обобщете тази публикация с: