code coverage tutorial
Овај свеобухватни водич објашњава шта је покривеност кодом при тестирању софтвера, његове врсте, предности и недостаци:
Крајњи циљ сваке компаније за развој софтвера је развој софтвера доброг квалитета. Да би се постигао овај циљ, софтвер мора бити темељно тестиран.
Тестирање је стога саставни део развоја софтверске апликације. Отуда је неопходно да програмер прегледа развијени софтвер (што се ради током фазе тестирања јединице), а затим проследи КЦ тиму како би се темељито тестирао како би се осигурало да има минималне грешке или да их уопште нема.
Софтвер је јединствено тестиран пре него што је пуштен стварном тиму за тестирање на тестирање. Како ово тестирање укључује тестирање на нивоу кода, то ради програмер. Ово се ради како би се осигурало да сваки део кода који се тестира ради како се очекује.
Овде су мали делови кода који су развијени тестирани у изолацији како би се осигурала њихова исправност. Али, питање које се често намеће у уму програмера је колико јединственог тестирања треба обавити а одговор на ово лежи у покривености кодекса.
Овај водич ће вам пружити дубоко знање о томе шта је покривеност кодом и зашто нам је потребан. Упознали бисте по чему се разликује од покривености тестом.
Такође ћемо погледати алате и методологије који се користе за покривање кода, а при крају овог водича видећемо и користи заједно са његовим недостацима. Неки од митова повезаних са покривањем кода такође би били обрађени овде.
Шта ћете научити:
Шта је покривеност кодом
Ово је важна метрика јединственог тестирања. То је корисно када се зна ефикасност јединствених тестова. То је мера која указује на проценат изворног кода који би се извршио током тестирања.
Поједностављено речено, степен извршења изворног кода софтверског програма или апликације током тестирања је оно што се назива Покривеност кода.
Ако тестови изврше цео комад кода, укључујући све гране, услове или петље, тада бисмо рекли да постоји потпуно покривање свих могућих сценарија, па је према томе покривеност кода 100%. Да бисмо ово још боље разумели, узмимо пример.
Доље је дат једноставан код који се користи за сабирање два броја и приказ резултата у зависности од вредности резултата.
Input a, b Let c = a + b If c <10, print c Else, print ‘Sorry’
Горњи програм узима два улаза, тј. „А“ и „б“. Збир оба се чува у променљивој ц. Ако је вредност ц мања од 10, тада се одштампа вредност „ц“, у супротном се исписује „Извините“.
Сада, ако имамо неке тестове за валидацију горе наведеног програма са вредностима а & б тако да је збир увек мањи од 10, тада се други део кода никада неће извршити. У таквом сценарију рекли бисмо да покривеност није потпуна.
Ово је био само мали пример који је појаснио значење покривености кодом. Како више истражујемо, постајаћете све јаснији у томе.
Зашто нам је потребно покривање кода
(слика извор )
Из различитих разлога покривеност кода је од суштинског значаја, а неки од њих су наведени у наставку:
узорци биографије за тестирање софтвера 2 године искуства
- Помаже утврђивање да софтвер има мање грешака у поређењу са софтвером који нема добру покривеност кодом.
- Помажући у побољшању квалитета кода, индиректно помаже у испоруци бољег ‘квалитетног’ софтвера.
- То је мера која се може користити за познавање ефикасности теста (ефикасност јединичних тестова који су написани за тестирање кода).
- Помаже у идентификовању делова изворног кода који не би били тестирани.
- Помаже у утврђивању да ли је тренутно тестирање (јединствено тестирање) довољно или није и да ли су потребна још нека испитивања.
Покривеност кода против Тест покривености
Да бисмо разумели разлику између покривености кода и покривености тестом, прво схватимо значење покривености тестом.
Тест Цовераге
То је мера колико је делова очекиваног тестирања обухваћено током тестирања софтвера. Од стране „Очекивано тестирање“ мислимо на комплетан скуп тест случајева који су написани за извршење за тестирање датог софтвера.
Претпоставимо да је за тестирање софтвера написан скуп од 500 тест случајева. Сада је, као део активности тестирања, извршено само 300 тест случајева. Претпоставимо да је ово због недостатка времена. У овом случају, доле би било приказано испитивање.
Покривеност тестом = (извршени тест случајеви / укупно тест случајеви) * 100
= (300/500) * 100
= 60%
Упоредимо ово са оним што је покривеност кодом.
Покривеност кодом
То је мера која показује у којој мери се изворни код апликације извршава током тестирања кода. Тако показује степен до ког би се изворни код тестирао.
Претпоставимо да тестирамо апликацију са 500 редова кода, тестови извршавају само 400 редова кода. Претпоставимо да је то због одређене петље / стања која се не извршава. У овом случају, доле би било обухваћено кодом.
Покривеност кода = (број извршених редова кода / укупан број линија кода) * 100
= (400/500) * 100
= 80%
У наставку су наведене разлике између покривености кода и покривености тестом:
Тест Цовераге | Покривеност кодом |
---|---|
То је мера колики је део очекиваног тестирања покривен током тестирања софтвера. | То је мера која показује у којој мери се изворни код апликације извршава током тестирања кода. |
Обухват тестом може се израчунати помоћу следеће формуле: Покривеност тестом = (извршени тест случајеви / укупно тест случајеви) * 100 | Покривеност кода може се израчунати помоћу следеће формуле: Покривеност кода = (број извршених редова кода / укупан број линија кода) * 100 |
Методологије
Овде ћемо разговарати о различитим методама које се / могу користити за мерење покривености кодом.
Да бисмо разумели ове методологије, погледајмо доњи исечак кода:
Add (int a, int b) { If (b > a) { b = b - a Print b } If (a > b) { b = a – b Print b } Else Print ‘0’ }
Извештај Покривеност
Ова методологија је мера која говори јесу ли сви могући извршни изрази кода у изворном коду извршени бар једном. То је метода којом се осигурава да тестови покрију барем једном сваки ред изворног кода.
Ово може звучати једноставно, али треба бити опрезан током мерења покривености изјаве. Разлог је тај што у изворном коду може постојати одређено стање које се можда неће извршити у зависности од улазних вредности.
То би значило да сви редови кода неће бити обухваћени тестирањем. Стога ћемо можда морати да користимо различите скупове улазних вредности да бисмо покрили све такве услове у изворном коду.
На пример, у горе наведеном изворном коду ако се улазне вредности узимају као 2 и 3, тада се „Елсе“ део кода неће извршити. Међутим, ако су улазне вредности типа 3 и 2, онда се део кода „Ако“ не би извршио.
То значи да ни са једним сетом вредности наше Изјаве покривеност не би била 100%. У таквом случају, можда ћемо морати да извршимо тестове са сва три ((2, 3), (3, 2), (0, 0)) скупа вредности како бисмо осигурали 100% покривеност изјаве.
бесплатна апликација радног времена за ипхоне и андроид
Покривеност функције
Као што и само име говори, ова методологија мери у којој мери су функције присутне у изворном коду покривене током тестирања. Све функције које се налазе у изворном коду тестирају се током извршавања теста. Опет, мора се осигурати да ове функције тестирамо на различите вредности како би се функција темељно тестирала.
У изворном коду може бити више функција и у зависности од коришћених улазних вредности, функција може или не мора бити позвана. Стога је сврха покривања функције да осигура да свака од нас захтева функцију.
На пример, у горе наведеном изворном коду ако наши тестови позову функцију „Додај“ чак и једном, тада бисмо то назвали као комплетно покриће функције.
Обухват стања
У изворном коду где год имамо услов, резултат би била логичка вредност тачно или нетачно. Услов покривености има за циљ утврђивање да ли тестови покривају обе вредности, тј. Тачно, нетачно.
У изворном коду, када се сваки услов који се јавља процени и за истинита и за нетачна стања, тада се каже да је покривеност услова за код потпуна.
На пример, у горњем коду ако се користе скупови вредности (2, 3) и (4, 2), тада би покривеност услова била 100%. Када се користи скуп података (2, 3), тада (б> а) процењује на тачно, а (а> б) на нетачно. Слично томе, када се користи скуп података (4, 2), тада (б> а) процењује на нетачно, а (а> б) на тачно.
Дакле, оба услова имају и вредности, тј. Тачно и нетачно. Отуда би покривеност услова била 100%.
Покривеност филијале
Циљ ове методологије је осигурати да се свака грана која се појављује у свакој условној структури изврши у изворном коду. На пример, у горенаведеном коду, сви изрази „Ако“ и било који пратећи исказ „Елсе“ требало би да буду обухваћени тестом за 100% покривеност филијале.
На пример, у горњем коду ако се користе скупови вредности (2, 3), (4, 2), (1, 1), тада би покривеност гране била 100%. Када се користи скуп података (2, 3), тада (б> а) и извршава се прва грана „Ако“. Слично томе, када се користи скуп података (4, 2), тада (а> б) израчунава вредност тачно и извршава се друга грана „Ако“.
Тада се помоћу скупа података (1, 1) грана ‘Елсе’ процењује на тачно и извршава. Тиме се осигурава 100% покривеност филијале.
Покривеност филијале против стања покривености
Покривеност филијала често се меша са покрићем стања, међутим, то се разликује.
Да разумемо ово на једноставном примеру.
If (a >0) & (b >0) Then Print “Hello” Else Print “Bye”
Запишимо скуп података потребних за комплетирање Покривеност филијале:
(1, 1) - У овом случају су обе ставке „а“ и „б“ тачне, па се услов Иф извршава.
(1, 0) - У овом случају, „а“ је тачно, а „б“ би било нетачно, па се извршава Елсе део кода.
Као што знамо, сврха покривања подружнице је да се свака подружница изврши најмање једном и та сврха је постигнута.
Обухват стања:
(1, 0) - У овом случају, „а“ је тачно, а „б“ би било нетачно.
(0, 1) - У овом случају, „а“ је нетачно, а „б“ би било тачно.
Сврха покривености услова је да добије сваки од тачних и нетачних података за сваки извршени услов и ова сврха је овде постигнута.
Да ли сте приметили да се други део не извршава у покривању стања? Овде се стање покривености разликује од покривања огранка.
Алати за покривање кода
За мерење покривености било којим софтвером на тржишту постоји неколико алата.
У наставку су наведени неки од алата за вашу референцу:
- Парасофт ЈТест
- Тествелл ЦТЦ ++
- Покривеност
- ЈаЦоЦо
- ЦодеЦовер
- БуллсеиеЦовераге
- ЕММА
- ОпенЦовер
- НЦовер
- Скуисх ЦОЦО
- ЦоверагеМетер
- ГЦТ
- ТЦАТ Ц / Ц ++
- Гретел
- ЈЦов
Препоручено читање => Алати за покривање кода
Горња веза ће садржати следеће информације о овим алатима:
- Кључне карактеристике
- Тип лиценце
- Службени УРЛ
- За и против
- Најновија верзија
Предности
Као што се горе види, ово је врло корисна тест метрика из следећих разлога:
- Помаже у идентификовању оних подручја у изворном коду која би остала непроверена / непокривена тестовима.
- То је корисно у идентификовању употребљеног / мртвог кода, чиме се побољшава квалитет кода.
- Ефикасност јединичних тестова може се знати уз помоћ Цоде Цовераге.
- Софтвер бољег квалитета може се испоручити помоћу ових показатеља.
Недостаци
- Покушај постизања 100% покривености кода понекад узрокује недостатак робусности тестова што резултира пропуштањем снимања сценарија склоних дефектима.
- За разлику од уобичајене перцепције, не може да гарантује да ли дизајнирани софтвер задовољава све захтеве.
Митови против чињеница
Мит | Чињеница |
---|---|
Имајући 100% покривеност кода осигурава да софтвер неће имати грешака. | Не, 100% покривеност кодом не може гарантовати софтвер без грешака. Добро покривање кода заједно са добрим напорима КЦ тима може осигурати софтвер са минималним грешкама или без њих. |
Имати 100% покривености кода значи да је написани код савршен. | Не, заправо, ако код уопште није обухватио важне захтеве, онда се код не може назвати савршеним иако је покривеност кода 100%. |
Цоде Цовераге мери ефикасност тестова изведених на софтверском производу. | Не, покривеност кодом је само мера која се користи за тестирање ефикасности јединичних тестова, тј. Тестова извршених само на изворном коду софтвера. |
ФАК
П # 1) Шта је прихватљиво покривање кода?
Одговор: Постизање 100% покривености кодом не би требало да буде циљ током јединственог тестирања софтверског кода. Али зашто не? Да бисте разумели разлог, можда ћете морати заронити мало дубље да бисте разумели основно значење.
Када циљамо 100% покривеност, чешће се дешава да сав фокус у дизајнирању тестова иде на то да ли се тестира свака изјава, петља, грана или услов. Дакле, искрцавамо се улажући превише напора који можда не би били вредни узимајући у обзир утрошено време.
Штавише, фокусирање на велику покривеност такође резултира пропуштањем важних сценарија који ће вероватно имати недостатке, јер све што нам је циљ је да обезбедимо да се тестира свака линија кода.
Фокусирање на високу покривеност кодова није увек важно и не може бити ни фиксни број за циљање за тестирање различитих кодова. Међутим, генерално, покривеност од 75% - 80% би требала бити идеалан број.
Током тестирања нашег кода, главни фокус би требао бити на томе да покријемо критичне и вероватно ризичне сценарије. Ако се ови пропусте, иако би имали 100% покривеност кодом, наши тестови би једноставно имали лошу ефикасност.
К # 2) Како могу да проверим покривеност свог кода?
Одговор: Да бисмо тестирали проценат покривености кода који сте могли постићи тестовима дизајнираним за тестирање кода, на тржишту имамо неколико алата. У зависности од програмског језика који један користи, имамо разне алате.
Неки од њих су наведени у наставку:
- Јава - Покривеност, ЈаЦоЦо
- Јавасцрипт - Бланкет.јс, Истанбул
- Питхон - Цовераге.пи
- Руби - СимплеЦов
Коришћењем ових алата можемо добити комплетан извештај о покривености наших тестова који нам помажу да знамо који део кода ће се извршити, а који ће пропустити наши тестови.
К # 3) Да ли је покривеност кодом добра метрика?
Одговор: У стварним сценаријима ово је корисно у одређеној мери и на неке одређене начине.
Гледајући прво његова ограничења, врло добро знамо да 100% покривеност не гарантује да Кодекс не садржи грешке, нити гарантује да су сви захтеви покривени кодексом, тј. Упркос 100% покривености кода, ми јесмо врло вероватно да ће у коду бити грешака, разлог је тај што покривеност не осигурава да су сви сценарији тестирани.
Штавише, ако су захтеви прескочени током писања кода, тада не постоји мапирање захтева са кодом за који се води рачуна као о покривености кода.
Рекавши то, не можемо порећи да када користимо покривеност кода као метрику, даје нам идеју да ли смо покрили основне захтеве тестирања сваке линије нашег кода. Овај проценат покривености даје нам представу о томе колико делова нашег кода се извршава помоћу наших јединичних тестова.
Откривамо колико нашег кода не би било извршено. Ово нам заузврат помаже да одлучимо колико је још јединствених тестова потребно и за које делове кода.
знак у низ ц ++
Стога можемо закључити да нам лоша покривеност даје идеју о неефикасности јединичних тестова. Истовремено, осигуравање 100% покривености није гаранција за код без кварова. Стога треба имати уравнотежен приступ тамо где не пренаглашавамо важност циљања високог процента покривености кода.
К # 4) Како могу побољшати покривеност кодом?
Одговор: Извештај о покривености кодом који пружају алати за покривање, као што су ЈаЦоЦо, Истанбул итд., Приказује подручја која су обухваћена тестовима, као и она која би прошла неиспитане.
Познавањем непроверених делова кода, тестови се могу писати или ручно или помоћу било ког алата за аутоматизацију да би се покрила подручја која би у супротном прошла непроверена и тиме повећала покривеност кода.
Овде је важно напоменути да иако можемо да напишемо стотине редова кода да бисмо тестирали функцију у коду, али покривеност може бити врло мала. Разлог је тај што предубоко тестирање дела огромног кода неће помоћи у повећању покривености кода.
Дакле, ако је циљ повећати покривеност, онда треба пазити да се покрију све функције, услови и петље, уместо да се дубоко зарони у једну функцију и напишу велики тестови за ту једну функцију.
Закључак
Софтверски производ високог квалитета је оно што је потребно у данашњем брзом свету интернета.
Обезбеђивање доброг квалитета софтвера није само одговорност КА инжењера већ је и одговорност програмера. Цоде Цовераге је стога од велике користи када програмери испоручују квалитетан производ КА тиму.
У овом водичу објашњено је све о покривености кода и његовој употреби. Такође смо мало дубље истражили разлику између покривености кодом и покривености тестом. Поред овога, стекли смо разумевање методологија које се користе заједно са разним алатима за покривање кода.
Овде су представљене предности и недостаци. Коначно, разбили смо неке митове и честа питања повезана са покривањем кода
Срећно читање !!
Препоручено читање
- Топ 15 алата за покривање кода (за Јава, ЈаваСцрипт, Ц ++, Ц #, ПХП)
- 15 најбољих ЈАВА алата за развој, изградњу, профил, покривање кода и преглед
- Водич за функције # методе и методе са примерима кода
- Водич за руковање изузецима за Ц # са примерима кода
- Водич за корњаче СВН: Ревизије у спремишту кода
- Водич за дужину Јава низа са примерима кода
- АВС ЦодеБуилд Туториал: Издвајање кода из Мавен Буилд-а
- Водич за СВН: Управљање изворним кодом помоћу Субверзије