Какво е покритие на кода?
Покритието на кода е мярка, която описва степента на тестване на изходния код на програмата. Това е една форма на тестване на бяла кутия, която открива областите на програмата, които не се упражняват от набор от тестови случаи. Той също така създава някои тестови случаи за увеличаване на покритието и определяне на количествена мярка за покритие на кода.
В повечето случаи системата за покритие на кода събира информация за работещата програма. Той също така комбинира това с информация за изходния код, за да генерира отчет за покритието на тестовия пакет.
В този урок ще научите -
- Какво е покритие на кода?
- Защо да използваме Кодово покритие?
- Методи за покритие на кода
- Отчет за покритие
- Покритие на решението
- Браншово покритие
- Състояние покритие
- Крайно покритие на държавна машина
- Кой тип покритие на кода да изберете
- Покритие на кода срещу функционално покритие
- Инструменти за покритие на кода
- Предимства и недостатъци при използването на покритие на кода
Защо да използваме Кодово покритие?
Ето няколко основни причини за използване на покритие на кода:
- Той ви помага да измервате ефективността на изпълнението на теста
- Той предлага количествено измерване.
- Той определя степента, до която е тестван изходният код.
Методи за покритие на кода
Следват основните методи за покритие на кода
- Отчет за покритие
- Покритие на решението
- Браншово покритие
- Превключване на покритието
- Покритие на FSM
Отчет за покритие
Statement Coverage е техника за тестване на бяло поле, при която всички изпълними оператори в изходния код се изпълняват поне веднъж. Той се използва за изчисляване на броя на изпълненията в изходния код, които са били изпълнени. Основната цел на Statement Coverage е да обхване всички възможни пътища, редове и изрази в изходния код.
Покритието на изявлението се използва за извеждане на сценарий въз основа на структурата на тествания код.
При тестване на бяла кутия тестерът се концентрира върху това как работи софтуерът. С други думи, тестерът ще се концентрира върху вътрешната работа на изходния код по отношение на графики за контрол на потока или диаграми на потока.
Като цяло във всеки софтуер, ако разгледаме изходния код, ще има голямо разнообразие от елементи като оператори, функции, цикли, изключителни манипулатори и др. Въз основа на входа в програмата, някои от кодовите инструкции може да не бъдат изпълнени . Целта на покритието на изявлението е да обхване всички възможни пътеки, редове и изявления в кода.
Нека разберем това с пример, как да изчислим покритието на извлеченията.
Сценарий за изчисляване на обхвата на изявлението за даден изходен код. Тук вземаме два различни сценария, за да проверим процента на покритие на извлечения за всеки сценарий.
Програмен код:
Разпечатки (int a, int b) {------------ Printsum е функцияint резултат = a + b;Ако (резултат> 0)Печат ("Положителен", резултат)ИначеПечат ("Отрицателен", резултат)} ----------- Край на изходния код
Сценарий 1:
Ако A = 3, B = 9
Операторите, маркирани в жълт цвят, са тези, които се изпълняват според сценария
Брой изпълнени оператори = 5, Общ брой изявления = 7
Покритие на изявлението: 5/7 = 71%
По същия начин ще видим сценарий 2,
Сценарий 2:
Ако A = -3, B = -9
Операторите, маркирани в жълт цвят, са тези, които се изпълняват според сценария.
Брой изпълнени оператори = 6
Общ брой изявления = 7
Покритие на изявлението: 6/7 = 85%
Но като цяло, ако виждате, всички изявления са били обхванати от 2 -ри сценарий е оценил. Така че можем да заключим, че общото покритие на извлеченията е 100%.
Какво е обхванато от покритие на изявлението?
- Неизползвани изявления
- Мъртъв код
- Неизползвани клонове
- Липсващи изявления
Покритие на решението
Покритието за вземане на решения е техника за тестване на бяло поле, която съобщава истинските или неверни резултати от всеки булев израз на изходния код. Целта на тестването на покритието на решения е да обхване и валидира целия достъпен изходен код, като провери и гарантира, че всеки клон на всяка възможна точка за решение се изпълнява поне веднъж.
При това покритие понякога изразите могат да се усложнят. Поради това е много трудно да се постигне 100% покритие. Ето защо има много различни методи за отчитане на тази метрика. Всички тези методи се фокусират върху покриването на най-важните комбинации. Той много прилича на покритие на решения, но предлага по-добра чувствителност за контрол на потока.
Пример за покритие на решение
Помислете за следния код -
Демонстрация (int a) {Ако (a> 5)a = a * 3Печат (а)}
Сценарий 1:
Стойността на a е 2
Кодът, маркиран в жълто, ще бъде изпълнен. Тук се проверява резултатът "Не" на решението Ако (a> 5).
Покритие на решението = 50%
Сценарий 2:
Стойността на a е 6
Кодът, маркиран в жълто, ще бъде изпълнен. Тук се проверява резултатът "Да" на решението Ако (a> 5).
Покритие на решението = 50%
Тестов случай | Стойност на A | Изход | Покритие на решението |
1 | 2 | 2 | 50% |
2 | 6 | 18. | 50% |
Браншово покритие
Branch Coverage е метод за тестване на бяла кутия, при който се тества всеки резултат от кодов модул (израз или цикъл). Целта на покритието на клонове е да гарантира, че всяко условие за решение от всеки клон се изпълнява поне веднъж. Помага за измерване на фракции от независими кодови сегменти и за откриване на раздели, които нямат клонове.
Например, ако резултатите са двоични, трябва да тествате както верни, така и неверни резултати.
Формулата за изчисляване на покритие на клона:
Пример за браншово покритие
За да научим покритие на клонове, нека разгледаме същия пример, използван по-рано
Обмислете следния код
Демонстрация (int a) {Ако (a> 5)a = a * 3Печат (а)}
Браншовото покритие ще разгледа и безусловния клон
Тестов случай | Стойност на A | Изход | Покритие на решението | Браншово покритие |
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18. | 50% | 67% |
Предимства на покритието на клона:
Тестване на покритие на клонове предлага следните предимства:
- Позволява ви да проверите всички клонове в кода
- Помага ви да се уверите, че разклоненията не водят до аномалии в работата на програмата
- Методът за покритие на клонове премахва проблеми, които се случват поради тестване на покритие на извлечения
- Позволява ви да намерите тези области, които не са тествани от други методи за тестване
- Тя ви позволява да намерите количествена мярка за покритие на кода
- Покритието на клонове игнорира клонове вътре в булевите изрази
Състояние покритие
Условие Покритие или покритие на израз е метод за тестване, използван за тестване и оценка на променливите или под изразите в условния оператор. Целта на покритието на условията е да се проверят индивидуалните резултати за всяко логическо условие. Покритието на условията предлага по-добра чувствителност към контролния поток от покритието за вземане на решения. В това покритие се разглеждат само изрази с логически операнди.
Например, ако израз има булеви операции като AND, OR, XOR, което показва общите възможности.
Покритието на условията не дава гаранция за пълно покритие на решенията.
Формулата за изчисляване на покритие на състоянието:
Пример:
За горния израз имаме 4 възможни комбинации
- TT
- FF
- TF
- FT
Обмислете следния вход
X = 3 Y = 4 |
(x |
ВЯРНО |
Покритие на състоянието е ¼ = 25% |
A = 3 В = 4 |
(a> b) |
НЕВЯРНО |
Крайно покритие на държавна машина
Покритието на крайния автомат със сигурност е най-сложният тип метод на покритие на кода. Това е така, защото работи върху поведението на дизайна. В този метод на покритие трябва да потърсите колко специфични за времето състояния са посетени, транзитирани. Той също така проверява колко последователности са включени в машина за крайно състояние.
Кой тип покритие на кода да изберете
Това със сигурност е най-трудният отговор за даване. За да избере метод на покритие, тестерът трябва да провери дали
- тестваният код има единични или множество неоткрити дефекти
- цена на потенциалната санкция
- цена на загубена репутация
- цена на загубена продажба и др.
Колкото по-голяма е вероятността дефектите да доведат до скъпи производствени откази, толкова по-сериозно е нивото на покритие, което трябва да изберете.
Покритие на кода срещу функционално покритие
Покритие на кода | Функционално покритие |
Покритието на кода ви казва колко добре е бил използван изходният код от вашия тест стенд. | Функционалното покритие измерва колко добре функционалността на дизайна е била покрита от вашия тест стенд. |
Никога не използвайте спецификация на дизайна | Използвайте спецификация на дизайна |
Извършено от разработчици | Извършено от тестери |
Инструменти за покритие на кода
Ето списък с важни инструменти за покритие на кода:
Име на инструмента | Описание |
Кобертура | Това е инструмент за покритие с отворен код. Той измерва покритието на теста, като инструментира кодова основа и анализира кои редове код се изпълняват и кои не се изпълняват, когато тестовият пакет работи. |
Детелина | Clover също така намалява времето за тестване, като изпълнява само тестовете, които покриват кода на приложението, който е модифициран от предишната компилация. |
DevPartner | DevPartner дава възможност на разработчиците да анализират Java кода за качество и сложност на кода. |
Ема | EMMA поддържа покритие на клас, метод, линия и основен блок, агрегиран изходен файл, клас и метод. |
Калистик | Kalistick е приложение на трета страна, което анализира кодовете с различни перспективи. |
CoView и CoAnt | Софтуерът за кодиране е инструмент за покритие на кода за метрики, създаване на фалшиви обекти, тестваемост на кода, покритие на пътя и клонове и т.н. |
Bullseye за C ++ | BulseyeCoverage е инструмент за покритие на код за C ++ и C. |
Сонар | Sonar е инструмент за покритие с отворен код, който ви помага да управлявате качеството на кода. |
Предимства на използването на кодово покритие
- Полезно за оценка на количествена мярка за покритие на кода
- Тя ви позволява да създавате допълнителни тестови случаи, за да увеличите покритието
- Тя ви позволява да намерите областите на програма, която не се упражнява от набор от тестови случаи
Недостатъци на използването на покритие на кода
- Дори когато дадена специфична функция не е внедрена в дизайна, покритието на кода все още отчита 100% покритие.
- Не е възможно да се определи дали сме тествали всички възможни стойности на дадена функция с помощта на покритие на кода
- Покритието на кода също не показва колко и колко добре сте покрили логиката си
- В случай, че посочената функция не е внедрена или не е включена от спецификацията, тогава базирани на структурата техники не могат да намерят този проблем.
Обобщение
- Покритието на кода е мярка, която описва степента на тестване на изходния код на програмата
- Той ви помага да измервате ефективността на изпълнението на теста
- Пет метода за покритие на кода са 1.) Покритие на декларацията 2.) Покритие на състоянието 3) Покритие на клона 4) Превключване на покритието 5) Покритие на FSM
- Покритието на изявления включва изпълнение на всички изпълними оператори в изходния код поне веднъж
- Покритието на решенията отчита истинските или неверните резултати от всеки булев израз
- В покритието на клона се тества всеки резултат от кодов модул
- Условното ще разкрие как се оценяват променливите или подвиразите в условния оператор
- Покритието на крайния автомат със сигурност е най-сложният тип метод на покритие на кода
- За да избере метод на покритие, тестващият трябва да провери цената на потенциалната санкция, загубена репутация, загубена продажба и т.н.
- Покритието на кода ви казва колко добре е бил упражнен изходният код от вашия тестов стенд, докато функционалното покритие измерва колко добре е покрита функционалността на дизайна
- Cobertura, JTest, Clover, Emma, Kalistick са няколко важни инструмента за покритие на кода
- Code Coverage ви позволява да създавате допълнителни тестови случаи, за да увеличите покритието
- Покритието на кода не ви помага да определите дали сме тествали всички възможни стойности на дадена функция