Code Инструмент за покритие: Тестване на оператори, разклонения и решения

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

Code Покритието е измерване на „бяла кутия“, което отчита степента, до която изходният код е бил използван от тестов пакет, helping Екипите намират непроверени оператори, разклонения, условия и пътища, които може да заемат скрити дефекти.

  • 🎯 Определение: Code Покритието определя количествено каква част от изходния код вашите тестове действително изпълняват.
  • 📊 Методи: Съществуват пет метода - оператор, решение, разклонение, условие и покритие с крайни машини.
  • 🧩 Изявление срещу клон: Покритието на операторите проверява редовете, докато покритието на клоновете проверява всеки резултат от решението.
  • Code срещу функционално: Code мерки за покритие, упражнявани по код; функционални мерки за покритие, обхванати изисквания.
  • 🛠️ Инструменти: Cobertura, OpenClover, EMMA и Sonar автоматизират измерването на покритието.
  • 🤖 AI помощ: Инструментите с изкуствен интелект генерират тестове и автоматично разкриват непроверени, високорискови пропуски в покритието.

Code Урок за покритие

Какво е Code Покритие?

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

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

Защо да използвате Code Тестване на покритието?

Ето някои основни причини за използване на кодово покритие:

  • Това ви помага да измерите ефективността на внедряването на тестове.
  • Той предлага количествено измерване на тестването.
  • Той определя степента, до която изходният код е тестван.

Code Методи на покритие

Следните са основните методи за покритие на кода:

  • Покритие на изявлението
  • Покритие на решението
  • Покритие на клонове
  • Toggle Покритие
  • FSM покритие

Покритие на изявлението

Покритие на изявлението е техника за тестване с бяла кутия, при която всички изпълними оператори в изходния код се изпълняват поне веднъж. Използва се за изчисляване на броя на изпълнените оператори в изходния код. Основната цел на покритието на оператори е да обхване всички възможни пътища, редове и оператори в изходния код.

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

Покритие на изявлението

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

Обикновено във всеки софтуер, ако по��леднете изходния код, ще има голямо разнообразие от елементи като оператори, функции, looping, обработчици на изключения и т.н. В зависимост от входните данни към програмата, някои от кодовите оператори може да не бъдат изпълнени. Целта на покритието на операторите е да обхване всички възможни пътища, редове и оператори в кода.

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

източник Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Сценарий 1: Ако A = 3, B = 9

Сценарий 1 за покритие на извлечението

Изразите, маркирани в жълто, са тези, които се изпълняват съгласно сценария. Брой изпълнени изрази = 5, Общ брой изрази = 7, следователно Покритие на изразите = 5/7 = 71%.

Сценарий 2: Ако A = -3, B = -9

Сценарий 2 за покритие на извлечението

Изразите, маркирани в жълто, са тези, които се изпълняват съгласно сценария. Брой изпълнени изрази = 6, Общ брой изрази = 7, следователно Покритие на изразите = 6/7 = 85%.

Но като цяло, ако видите, всички твърдения са покрити и от двата сценария. Така че можем да заключим, че общото покритие на твърденията е 100%.

Какво покрива покритието на изявленията?

  1. Неизползвани отчети
  2. Мъртъв Code
  3. Неизползвани клонове
  4. Липсващи твърдения

Тестване на покритието на решенията

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

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

Тестване на покритието на решенията

Пример за покритие на решенията

Разгледайте следния код:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Сценарий 1: Стойността на a е 2. Резултатът „Не“ от решението. Ако е отметнато (a>5), тогава Покритие на решенията = 50%.

Сценарий 2: Стойността на a е 6. Резултатът от решението е „Да“. Ако е отметнато (a>5), тогава Покритие на решението = 50%.

Тестов случай Стойността на А Продукция Покритие на решението
1 2 2 50%
2 6 18 50%

Тестване на покритието на клонове

Покритие на клонове е метод за тестване „бяла кутия“, при който се тества всеки резултат от кодов модул (изпълнител или цикъл). Целта на покритието на клонове е да се гарантира, че всяко условие за решение от всеки клон се изпълнява поне веднъж. Това помага за измерване на дялове от независими сегменти на кода и откриване на секции, които нямат клонове.

Например, ако резултатите са двоични, трябва да тествате както True, така и False резултати.

Формулата за изчисляване на покритието на клона:

Формула за покритие на клоновете

Пример за покритие на клон

За да научите покритието на разклоненията, разгледайте същия пример, използван по-рано. Покритието на разклоненията ще вземе предвид и безусловното разклонение.

Тестов случай Стойността на А Продукция Покритие на решението Покритие на клонове
1 2 2 50% 33%
2 6 18 50% 67%

Предимства на клоново покритие:

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

Тестване на покритието на състоянието

Покритие на състояниетоПокритието на изрази, или , е метод за тестване, използван за проверка и оценка на променливите или подизразите в условен оператор. Целта на покритието на условията е да се проверят отделните резултати за всяко логическо условие. Покритието на условията предлага по-добра чувствителност към потока на управление, отколкото покритието на решенията. При това покритие се разглеждат само изрази с логически операнди.

Например, ако даден израз има булеви операции като AND, OR или XOR, това показва общия брой възможности. Покритието на условията не гарантира пълно покритие на решенията.

Формулата за изчисляване на покритието на условията:

Формула за покритие на състоянието

За израз с два операнда има четири възможни комбинации: TT, FF, TF и ​​FT. Да разгледаме входните данни X=3, Y=4 (x б) НЕВЯРНО, което дава Покритие на състоянието от 1/4 = 25%.

Покритие на краен автомат

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

Кой тип на Code Покритие по избор

Това със сигурност е най-трудният отговор. За да избере метод за покритие, тестерът трябва да провери дали:

  • тестваният код има един или множество неоткрити дефекти,
  • цената на потенциалната санкция,
  • цената на загубената репутация,
  • разходите за загубени продажби и т.н.

Колкото по-голяма е вероятността дефектите да причинят скъпи производствени повреди, толкова по-тежко е нивото на покритие, което трябва да изберете.

Code Покритие срещу функционално покритие

Code Обхват Функционално покритие
Показва ви колко добре е бил тестван изходният код от вашия тестов стенд. Измерва доколко функционалността на дизайна е била покрита от вашия тестов стенд.
Никога не използва спецификация на дизайна. Използва спецификация на дизайна.
Извършено от разработчици. Извършено от тестери.

Code Инструменти за покритие

Ето списък с важни инструменти за покритие на кода:

Име на инструмента Descriptйон
Cobertura Инструмент за покритие на код с отворен код. Той измерва покритието на тестовете, като инструментира кодова база и анализира кои редове код се изпълняват и кои не, когато тестовият пакет се изпълнява.
Детелина Детелина (OpenClover) също така намалява времето за тестване, като изпълнява само тестовете, които обхващат кода на приложението, променен след предишната компилация.
DevPartner DevPartner позволява на разработчиците да анализират Java код за качество и сложност на кода.
Ема EMMA поддържа покритие на класове, методи, редове и основни блокове, агрегирани на ниво изходен файл, клас и метод.
Калистик Kalistick е приложение на трета страна, което анализира кода от различни гледни точки.
CoView и CoAnt Инструмент за покритие на код за показатели, създаване на макетни обекти, тестваемост на код, покритие на пътища и клонове и други.
Булсай за C++ BullseyeCoverage е инструмент за покритие на кода за C++ и В.
Хидролокатор Sonar е инструмент за покритие с отворен код, който ви помага да управлявате качеството на кода.

Предимства и недостатъци на използването Code Обхват

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

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

Много екипи се стремят към 70 до 80% като практическа цел. Достигането на 100% рядко е рентабилно. Фокусирайте се върху обхващането на критична, високорискова логика, вместо да преследвате едно-единствено число в цялата кодова база.

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

Code Покритието измерва колко изходен код се изпълнява по време на тестване. Покритието на тестовете е по-широко, tracопределя колко добре тестовете отговарят на изискванията, характеристиките и рисковете. Code Покритието е един от входните данни за общото тестово покритие.

Не. Можете да достигнете 100% покритие на операторите, като същевременно оставите разклоненията непроверени, например липсващ път else. Покритието на разклоненията (решенията) е по-силно, защото включва покритие на операторите и упражнява всеки резултат.

Изкуственият интелект анализира изходния код и съществуващите тестове, за да определи непроверени, високорискови пътища, след което предлага или генерира нови случаи. Машинното обучение също така приоритизира кои тестове да се изпълняват, съкращавайки обратната връзка, като същевременно запазва...ping покритие високо.

Да. ИИ инструменти като Diffblue Cover сканират код и автономно пишат модулни тестове за открита логика. Те са насочени към рискови клонове и условия, увелич��вайки покритието с много по-малко ръчни усилия.

OpenClover измерва покритието на оператори, клонове и методи и събира над 20 показателя. Cobertura, ЕМА и JaCoCo са други широко използвани безплатни опции за Java проекти.

Модифицираното покритие на състояние/решение изисква всяко условие в решението да повлияе независимо на резултата. То е по-строго от покритието на клонове и е задължително за софтуер, критичен за безопасността, като например авионика, съгласно стандарта DO-178C.

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