Урок за покритие на кода: Тестване на разклонения, изявления и решения
Какво е покритие на кода?
Покритието на кода е мярка, която описва степента, в която изходният код на програмата е тестван. Това е една форма на тестване на бяла кутия, която открива областите на програмата, които не се упражняват от набор от тестови случаи. Той също така създава някои тестови случаи за увеличаване на покритието и определяне на количествена мярка за покритие на кода.
В повечето случаи системата за покритие на кода събира информация за работещата програма. Той също така комбинира това с информация за изходния код, за да генерира отчет за покритието на кода на тестовия пакет.
Защо да използвате тестване на покритието на кода?
Ето някои основни причини за използване на кодово покритие:
- Помага ви да измерите ефективността на изпълнението на теста
- Предлага количествено измерване.
- Той определя степента, до която изходният код е тестван.
Методи за покритие на кода
Следват основните методи за покритие на кода
- Покритие на изявлението
- Покритие на решението
- Покритие на клонове
- Toggle Покритие
- FSM покритие
Покритие на изявлението
Покритие на изявлението е техника за тестване на бяла кутия, при която всички изпълними изрази в изходния код се изпълняват поне веднъж. Използва се за изчисляване на броя на изразите в изходния код, които са били изпълнени. Основната цел на Statement Coverage е да покрие всички възможни пътища, редове и изрази в изходния код.
Покритието на изявление се използва за извличане на сценарий въз основа на структурата на тествания код.
In Бял Box Тестване, тестерът се концентрира върху това как работи софтуерът. С други думи, тестерът ще се съсредоточи върху вътрешната работа на изходния код по отношение на контролни графики на потока или диаграми на потока.
Като цяло във всеки софтуер, ако погледнем изходния код, ще има голямо разнообразие от елементи като оператори, функции, цикъл, изключителни манипулатори и т.н. Въз основа на входа към програмата, някои от операторите на кода може да не бъдат изпълнени . Целта на покритието на Statement е да покрие всички възможни пътища, редове и оператори в кода.
Нека разберем това с пример, как да изчислим покритието на отчета.
Сценарий за изчисляване на покритието на отчета за даден изходен код. Тук вземаме два различни сценария, за да проверим процента на покритие на отчета за всеки сценарий.
Програмен код:
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Изявленията, отбелязани с жълт цвят, са тези, които се изпълняват по сценарий
Брой изпълнени оператори = 5, Общ брой оператори = 7
Покритие на изявлението: 5/7 = 71%
По същия начин ще видим сценарий 2,
Сценарий 2:
Ако A = -3, B = -9
Изявленията, отбелязани с жълт цвят, са тези, които се изпълняват по сценарий.
Брой изпълнени изрази = 6
Общ брой твърдения = 7
Покритие на изявлението: 6/7 = 85%
Но като цяло, ако видите, всички твърдения се покриват и от двата сценария. Така че можем да заключим, че общото покритие на изявленията е 100%.
Какво покрива покритието на изявленията?
- Неизползвани отчети
- Мъртъв код
- Неизползвани клонове
- Липсващи твърдения
Тестване на покритието на решенията
Покритие на решението е техника за тестване на бяла кутия, която отчита верните или грешните резултати на всеки булев израз на изходния код. Целта на тестването на покритието на решението е да покрие и валидира целия достъпен изходен код, като провери и гарантира, че всяко разклонение на всяка възможна точка на решение се изпълнява поне веднъж.
При този тип покритие изразите могат да станат сложни, което прави постигането на 100% покритие трудно. Ето защо се използват различни методи за отчитане на този показател. Тези методи дават приоритет на най-критичните комбинации. Въпреки че е подобно на покритието на решенията, то осигурява по-голяма чувствителност към контролния поток.
Пример за покритие на решение
Разгледайте следния код-
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Сценарий 1:
Стойността на a е 2
Маркираният в жълто код ще бъде изпълнен. Тук резултатът „Не“ от решението If (a>5) се проверява.
Покритие на решение = 50%
Сценарий 2:
Стойността на a е 6
Маркираният в жълто код ще бъде изпълнен. Тук резултатът „Да“ от решението If (a>5) е отметнат.
Покритие на решение = 50%
Тестов случай | Стойността на А | Продукция | Покритие на решението |
---|---|---|---|
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Тестване на покритието на клонове
Покритие на клонове е метод за тестване на бяла кутия, при който се тества всеки резултат от кодов модул (изявление или цикъл). Целта на покритието на клоновете е да се гарантира, че всяко условие за вземане на решение от всеки клон се изпълнява поне веднъж. Помага за измерване на части от независими кодови сегменти и за откриване на секции без разклонения.
Например, ако резултатите са двоични, трябва да тествате както True, така и False резултати.
Формулата за изчисляване на покритието на клона:
Пример за покритие на клон
За да научим покритието на клоновете, нека разгледаме същия пример, използван по-рано
Разгледайте следния код-
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Покритието на клонове ще вземе предвид и безусловния клон
Тестов случай | Стойността на А | Продукция | Покритие на решението | Покритие на клонове |
---|---|---|---|---|
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Предимства на клоново покритие:
Покритие на клон Тестването предлага следните предимства:
- Позволява ви да валидирате всички разклонения в кода
- Помага ви да се уверите, че нито едно разклонение не води до аномалии в работата на програмата
- Методът за покритие на разклонения премахва проблеми, които се случват поради тестване на покритие на изявления
- Позволява ви да намерите области, които не са тествани с други методи за тестване
- Позволява ви да намерите количествена мярка за покритие на кода
- Покритието на разклоненията игнорира разклоненията вътре в булевите изрази
Тестване на покритието на състоянието
Покритие на състоянието или покритието на израз е метод за тестване, използван за тестване и оценка на променливите или подизразите в условния израз. Целта на покритието на условието е да се проверят отделните резултати за всяко логическо условие. Покритието на условията предлага по-добра чувствителност към контролния поток, отколкото покритието на решенията. В това покритие се разглеждат само изрази с логически операнди.
Например, ако изразът има булеви операции като И, ИЛИ, XOR, което показва пълните възможности.
Покритието на условията не дава гаранция за пълно покритие на решението.
Формулата за изчисляване на покритието на условията:
Пример:
За горния израз имаме 4 възможни комбинации
- TT
- FF
- TF
- FT
Разгледайте следния вход
X = 3
Y = 4 |
(x | TRUE | Покритието на състоянието е ¼ = 25% |
A = 3
В = 4 |
(a>b) | FALSE |
Покритие на краен автомат
Покритието на крайната машина със сигурност е най-сложният тип метод за покритие на код. Това е така, защото работи върху поведението на дизайна. При този метод на покритие трябва да потърсите колко специфични за времето състояния са посетени, преминати. Той също така проверява колко последователности са включени в краен автомат.
Кой тип кодово покритие да изберете
Това със сигурност е най-трудният отговор. За да избере метод на покритие, тестерът трябва да провери дали
- тестваният код има единични или множество неоткрити дефекти
- цената на потенциалната неустойка
- цената на загубената репутация
- разходи за загубена продажба и др.
Колкото по-голяма е вероятността дефектите да причинят скъпи производствени повреди, толкова по-тежко е нивото на покритие, което трябва да изберете.
Покритие на код срещу функционално покритие
Покритие на кода | Функционално покритие |
---|---|
Покритието на кода ви казва колко добре е използван изходният код от вашия тестов стенд. | Функционалното покритие измерва доколко функционалността на дизайна е покрита от вашия тестов стенд. |
Никога не използвайте спецификация на дизайна | Използвайте спецификация на дизайна |
Направено от разработчици | Изработено от тестери |
Инструменти за покритие на кода
Ето списък с важни инструменти за покритие на кода:
Име на инструмента | Descriptйон |
---|---|
Cobertura | Това е инструмент за покритие с отворен код. Той измерва тестовото покритие чрез инструментиране на кодова база и анализира кои редове от код се изпълняват и кои не се изпълняват, когато се изпълнява тестовият пакет. |
Детелина | Clover също така намалява времето за тестване, като изпълнява само тестовете, които покриват кода на приложението, който е бил модифициран след предишната компилация. |
DevPartner | DevPartner позволява на разработчиците да анализират Java код за качество и сложност на кода. |
Ема | EMMA поддържа ниво на покритие на клас, метод, линия и базов блок, агрегиран изходен файл, клас и метод. |
Калистик | Kalistick е приложение на трета страна, което анализира кодовете от различни гледни точки. |
CoView и CoAnt | Софтуерът за кодиране е инструмент за покриване на код за показатели, създаване на фиктивни обекти, възможност за тестване на код, покритие на пътя и разклонения и т.н. |
Булсай за C++ | BulseyeCoverage е инструмент за покритие на код за C++ и В. |
Хидролокатор | Sonar е инструмент за покритие с отворен код, който ви помага да управлявате качеството на кода. |
Предимства и недостатъци от използването на кодово покритие
Предимства на покритието на кода | Недостатъци на покритието на кода |
---|---|
Полезно за оценка на количествена мярка за покритие на кода | Дори когато някаква специфична функция не е внедрена в дизайна, покритието на кода все още отчита 100% покритие. |
Тя ви позволява да създавате допълнителни тестови случаи, за да увеличите покритието | Не е възможно да се определи дали сме тествали всички възможни стойности на функция с помощта на покритие на кода |
Тя ви позволява да намерите областите на програма, които не се упражняват от набор от тестови случаи | Покритието на кода също не показва колко и колко добре сте покрили логиката си |
В случай, че определената функция не е внедрена или не е включена от спецификацията, тогава базираните на структура техники не могат да открият този проблем. |
Oбобщение
- Покритието на кода е мярка, която описва степента, в която изходният код на програмата е тестван
- Помага ви да измерите ефективността на изпълнението на теста
- Пет метода за покритие на кода са 1.) Покритие на изявление 2.) Покритие на условия 3) Покритие на клон 4) Toggle Покритие 5) Покритие на FSM
- Покритието на изрази включва изпълнение на всички изпълними изрази в изходния код поне веднъж
- Покритието на решението отчита верните или грешните резултати от всеки булев израз
- В покритието на клона всеки резултат от кодов модул се тества
- Conditional ще разкрие как се оценяват променливите или подизразите в условния израз
- Покритието на крайната машина със сигурност е най-сложният тип метод за покритие на код
- За да избере метод на покритие, тестерът трябва да провери цената на потенциалната неустойка, загубена репутация, загубена продажба и т.н.
- Покритието на кода ви казва колко добре е бил използван изходният код от вашия тестов стенд, докато функционалното покритие измерва колко добре е покрита функционалността на дизайна
- Cobertura, JTest, Clover, Emma, Kalistick са няколко важни инструмента за покритие на кода
- Покритието на кода ви позволява да създавате допълнителни тестови случаи, за да увеличите покритието
- Покритието на кода не ви помага да определите дали сме тествали всички възможни стойности на функция