Покриття коду (англ. code coverage, tests coverage) — міра, яка використовується при тестуванні програмного забезпечення. Вона визначається відсотком тестованого вихідного коду (сирцевий код) програми.
Техніка покриття коду була однією із перших методик, винайдених для систематичного тестування програмного забезпечення. Перша згадка покриття коду в публікаціях з'явилася 1963 року.
Критерії
Існує кілька різноманітних способів вимірювання покриття, основні з них:
- покриття операторів — чи кожен рядок коду був виконаний та відтестований;
- покриття умов — чи кожна гілка виконання (обчислення логічної умови) була виконана і відтестована;
- покриття шляхів — чи всі можливі шляхи через даний фрагмент коду були виконані та відтестовані;
- покриття функцій — чи кожна з функцій була виконана та відтестована;
- покриття вхід/вихід — чи всі виклики функцій та повернення із них були виконані та відтестовані.
Для програмного забезпечення із особливими вимогами до безпеки часто виникає потреба продемонструвати, що тестами досягається 100 % покриття для одного із критеріїв.
Деякі із наведених критеріїв покриття пов'язані поміж собою; для прикладу, покриття шляхів включає в себе і покриття умов і покриття операторів. Покриття операторів не включає в себе покриття умов, як демонструє фрагмент програми мовою програмування Сі:
printf("this is"); if (bar < 1) { printf(" not "); } printf("a positive integer");
Якщо тут bar = −1
, то покриття операторів буде цілковитим, а покриття умов — ні, через те, що випадок недотримання умови в операторі if — не покритий (і при цьому для додатних чисел вивід буде спотворений). Повне покриття зазвичай неможливе. Фрагмент коду, який містить n умов, містить шляхів; в той час як цикл взагалі породжує безмежну кількість шляхів. Деякі шляхи в програмі можуть бути недосягнутими у зв'язку з тим, що в тестових даних були відсутніми такі дані, які могли привести до виконання цих шляхів. Не існує універсального алгоритму, який би вирішував проблему неосяжних шляхів (цей алгоритм можна було б використовувати для вирішення проблеми зупинки).
На практиці, для досягнення покриття шляхів використовують наступний підхід: виділяються класи шляхів (до прикладу, до одного класу можна віднести шляхи, які відрізняються лише кількістю ітерацій в одному й тому ж циклі), 100 % покриття досягнуте, якщо покриті всі класи шляхів (клас вважається покритим, якщо покрито хоча б один шлях з нього).
Практичне застосування
Зазвичай вихідний код забезпечується тестами, які регулярно виконують. Отриманий звіт аналізується з метою виявити ті ділянки коду, які не протестовані, після чого проводиться оновлення набору тестів, а саме пишуться тести для непокритих ділянок коду. Ціль полягає в тому, щоб отримати набір тестів для регресивного тестування, при якому детально перевіряється весь вихідний код.
Ступінь покриття коду зазвичай представляють у відсотковому вигляді. До прикладу, «було протестовано 67 % коду». Зміст цієї фрази залежить від того, який критерій було використано, оскільки 67 % покриття шляхів — це кращий результат ніж 67 % покриття операторів. Питання про взаємозв'язок покриття коду та якості тестового набору на даний момент ще не є остаточно вирішеним.
Реалізації
- - gcc
- - sun
- Testwell CTC++
Виноски
- Joan C. Miller, Clifford J. Maloney (February 1963). Systematic mistake analysis of digital computer programs. Communications of the ACM. New York, NY, USA: ACM. 6 (2): 58—63. doi:10.1145/366246.366248. ISSN 0001-0782.
Посилання
- RTCA/. Software Considerations In Airborne Systems And Equipment Certification, 1992.
Дивись також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Pokrittya Pokrittya kodu angl code coverage tests coverage mira yaka vikoristovuyetsya pri testuvanni programnogo zabezpechennya Vona viznachayetsya vidsotkom testovanogo vihidnogo kodu sircevij kod programi Tehnika pokrittya kodu bula odniyeyu iz pershih metodik vinajdenih dlya sistematichnogo testuvannya programnogo zabezpechennya Persha zgadka pokrittya kodu v publikaciyah z yavilasya 1963 roku KriteriyiIsnuye kilka riznomanitnih sposobiv vimiryuvannya pokrittya osnovni z nih pokrittya operatoriv chi kozhen ryadok kodu buv vikonanij ta vidtestovanij pokrittya umov chi kozhna gilka vikonannya obchislennya logichnoyi umovi bula vikonana i vidtestovana pokrittya shlyahiv chi vsi mozhlivi shlyahi cherez danij fragment kodu buli vikonani ta vidtestovani pokrittya funkcij chi kozhna z funkcij bula vikonana ta vidtestovana pokrittya vhid vihid chi vsi vikliki funkcij ta povernennya iz nih buli vikonani ta vidtestovani Dlya programnogo zabezpechennya iz osoblivimi vimogami do bezpeki chasto vinikaye potreba prodemonstruvati sho testami dosyagayetsya 100 pokrittya dlya odnogo iz kriteriyiv Deyaki iz navedenih kriteriyiv pokrittya pov yazani pomizh soboyu dlya prikladu pokrittya shlyahiv vklyuchaye v sebe i pokrittya umov i pokrittya operatoriv Pokrittya operatoriv ne vklyuchaye v sebe pokrittya umov yak demonstruye fragment programi movoyu programuvannya Si printf this is if bar lt 1 printf not printf a positive integer Yaksho tut bar 1 to pokrittya operatoriv bude cilkovitim a pokrittya umov ni cherez te sho vipadok nedotrimannya umovi v operatori if ne pokritij i pri comu dlya dodatnih chisel vivid bude spotvorenij Povne pokrittya zazvichaj nemozhlive Fragment kodu yakij mistit n umov mistit 2n displaystyle 2 n shlyahiv v toj chas yak cikl vzagali porodzhuye bezmezhnu kilkist shlyahiv Deyaki shlyahi v programi mozhut buti nedosyagnutimi u zv yazku z tim sho v testovih danih buli vidsutnimi taki dani yaki mogli privesti do vikonannya cih shlyahiv Ne isnuye universalnogo algoritmu yakij bi virishuvav problemu neosyazhnih shlyahiv cej algoritm mozhna bulo b vikoristovuvati dlya virishennya problemi zupinki Na praktici dlya dosyagnennya pokrittya shlyahiv vikoristovuyut nastupnij pidhid vidilyayutsya klasi shlyahiv do prikladu do odnogo klasu mozhna vidnesti shlyahi yaki vidriznyayutsya lishe kilkistyu iteracij v odnomu j tomu zh cikli 100 pokrittya dosyagnute yaksho pokriti vsi klasi shlyahiv klas vvazhayetsya pokritim yaksho pokrito hocha b odin shlyah z nogo Praktichne zastosuvannyaZazvichaj vihidnij kod zabezpechuyetsya testami yaki regulyarno vikonuyut Otrimanij zvit analizuyetsya z metoyu viyaviti ti dilyanki kodu yaki ne protestovani pislya chogo provoditsya onovlennya naboru testiv a same pishutsya testi dlya nepokritih dilyanok kodu Cil polyagaye v tomu shob otrimati nabir testiv dlya regresivnogo testuvannya pri yakomu detalno pereviryayetsya ves vihidnij kod Stupin pokrittya kodu zazvichaj predstavlyayut u vidsotkovomu viglyadi Do prikladu bulo protestovano 67 kodu Zmist ciyeyi frazi zalezhit vid togo yakij kriterij bulo vikoristano oskilki 67 pokrittya shlyahiv ce krashij rezultat nizh 67 pokrittya operatoriv Pitannya pro vzayemozv yazok pokrittya kodu ta yakosti testovogo naboru na danij moment she ne ye ostatochno virishenim Realizaciyi gcc sun Testwell CTC VinoskiJoan C Miller Clifford J Maloney February 1963 Systematic mistake analysis of digital computer programs Communications of the ACM New York NY USA ACM 6 2 58 63 doi 10 1145 366246 366248 ISSN 0001 0782 PosilannyaRTCA Software Considerations In Airborne Systems And Equipment Certification 1992 Divis takozhMetrika programnogo zabezpechennya Regresivne testuvannya