Шта је тестирање јединице?
Испитивање јединице је реч која је само-објаснила ако разуме шта се подразумева под Јединица. Јединица је најмањи могући комад кода који се може логички изоловати из система. То значи да било који део кода који може да предузме уносе, извршава задатак и генерише излаз чак и када је независно од целог система или решења, може бити назван Јединицом. Тестирање овог дела кода ради генерисања очекиваног резултата на датом скупу улаза назива се Јединствено тестирање.
Врсте испитивања јединица
Хајде да разговарамо о неким врстама јединица тестирања.
1) Ручно тестирање
Ручно тестирање кода захтева да програмер ручно уклони погрешку у свакој линији кода и тестира га на тачност. Можда ће бити потребна и корак по корак сет инструкција ако је функционалност сложена.
2) Аутоматизовано тестирање
У тестирању аутоматизације, програмер пише код за тестирање кода. Ово се углавном помаже кроз оквире јединице за тестирање који нису распоређени у производњи. Други пут, програмер може изабрати да напише тестни код без оквира и ручно га прокоментарише пре примене.
Ручно тестирање очигледно изгледа дуготрајно у већини случајева. Али у неким случајевима када писање аутоматизованих тест случајева није могуће за сваки сценарио није могуће, приручник је често пожељна метода.
Зашто је тестирање јединице важно?
Да бисмо разумели важност тестирања јединице, морамо да погледамо ширу слику. То је део животног циклуса развоја софтвера. Погледајмо на кратко остале делове да бисмо боље разумели улогу тестирања јединице.
Горња слика је једноставна илустрација нормалног животног циклуса развоја софтвера и процеса испитивања који су с њим повезани. Непотребно је рећи да у зависности од структуре пројекта цео процес варира са додатком и уклањањем одређених компоненти. Процес тестирања, међутим, сигурно укључује четири врсте како је описано у наставку:
- Испитивање јединице - основни ниво целог процеса тестирања. Ово изводи програмер компоненте или било ко од његових вршњака. У овом другом случају се у софтверу често назива и Пеер Тестинг.
- Интегратион Тестинг - Тестирање компоненте јединице са њеним непосредним родитељским модулом. Циљ је проверити да ли се компонента јединице добро интегрише са осталим компонентама и није ли проузроковала неисправност било које друге компоненте.
- Тестирање система - Испитивање целог система када се компонента јединице постави на своје место.
- Испитивање прихватања - обично се обавља од стране предузећа / клијената и проверава да ли се резултат поклапа са функцијом коју очекује крајњи корисник.
Стога се добро види да се сви процеси тестирања ослањају на елементарни ниво тестирања. Ако основни ниво тестирања није извршен, сва остала испитивања могу резултирати узалудним.
Рецимо сада да имате код који има два дела
- Израчунајте сложене камате.
- Додајте камату на главницу и израчунајте корист доспећа.
Претпоставимо да нисте тестирали јединице нити једну од ових компоненти и наставили директно са тестирањем система. Приликом тестирања система настаје грешка да вредност зрелости није тачна. Који дио кода има грешку?
- Може бити у обрачуну камате.
- То може бити у примени логике састављања.
- Може бити и камата на износ главнице.
Видите, како се то сада повећава. Све то би се могло избећи да су обе компоненте кода тестиране.
Зашто је тестирање јединице важно?
- Поправља грешке само у фази развоја. Ово штеди много времена, труда и трошкова. Замислите да ако није било јединица тестирања, код би ишао од тима за осигурање квалитета за врло једноставна питања.
- Добри тестови јединице такође служе у сврху детаљне документације. Када програмер пише тестне случајеве јединице, нехотице пише очекивану функционалност кода. Ово једноставно није ништа друго него документација која објашњава рад кода.
- Олакшава измене и одржавање кода. Након што унесете било какве измене у код, поново покрените тестове и прекршите, сви недостаци се проналазе без икаквих проблема.
- Такође примењује модуларност. Јединствени тестови се изводе на појединим компонентама, што значи да код мора бити што прецизнији. То осигурава да је код правилно подељен на модуле.
Друга страна новчића
Има и неких недостатака. Иако предности претежу над недостацима и увек се препоручује да тестирате код, ипак има смисла знати оба лица исте кованице.
- Испитивање јединице, како досад темељно, понекад може успети да ухвати и све грешке иу најтривијалнијем коду. Једноставно није могуће проценити све путеве извршења. Стога су јединични тестови често једноставан и сретан пут и негативни сценарији.
- Од програмера се захтева да размисли о кутији и покуша да разбије свој код. То је често тешко јер перцепција програмера постаје пристрана према коду.
Алати за тестирање јединице
У индустрији постоји неколико алата који помажу у аутоматизованим тестним случајевима. Као сврха, програмеру олакшавају писање и извршавање тестних случајева јединица. Постоји свет оквира оквира за тестирање јединица на раздвајању програмера. Неке од најпопуларнијих и широко коришћених алата наведене су у наставку.
ЈУнит
ЈУнит је бесплатни алат за тестирање Јава. Аутоматски се укључује у многе предлошке пројеката доступне са различитим ИДЕ-има за развој Јава. Оно што ЈУнит чини посебним јесте то што прво тестира податке, а затим тестира код након уметања података у њих. Такође пружа тврдње за идентификацију метода испитивања.
НУнит
НУнит је то .Нет као што је ЈУнит за Јаву. Има све истакнуте карактеристике ЈУнит-а, али за развој у .Нет програмском језику. Такође подржава паралелно покретање тестова.
ПХПУнит
Слично као ЈУнит и НУнит, ПХПУнит је алат за ПХП програмере. Такође подржава све елементарне карактеристике доброг алата за тестирање.
КСУнит
Други оквир који је општији од својих колега је КСУнит. Подржава више језика као што су Ц ++, Ц #, АСП.Нет, итд. Такође се може похвалити сличним карактеристикама као и други алати доступни на тржишту.
Јтест
Парасофт Јтест је додатак треће стране који користи оквире отвореног кода као што је ЈУнит и додаје решења са једним кликом како би олакшао живот. Помоћу Јтест-а можете аутоматски генерисати тестне кодове за само неколико кликова. Аутоматизирајући ове задатке, програмер је слободан радити на пословној логици тестних случајева.
КУнит
Веома популаран оквир за тестирање ЈаваСцрипт јединице. Може да тестира ЈаваСцрипт код и на страни клијента и на серверу.
Јасмине
Још један врло широко коришћен алат за тестирање ЈаваСцрипт оквира. Има велику подршку заједнице за Ангулар, Реацт, итд.
ЈМоцкИт
ЈМоцкИт је алат отвореног кода који такође подржава исмевање АПИ позива са синтаксом за снимање и верификацију.
Пример случаја тест јединице
Врло основни захтев сваког тестног примера јединице је код који се тестира. Претпоставимо да имамо функцију која потврђује да ли су бројеви телефона тачни (у формату) или не. Зависно од географског положаја, овај критеријум такође може варирати. Дакле, нећемо наглашавати критеријуме. Радије ћемо се фокусирати на тестни случај јединице.
public class PhoneValidator
(
public bool IsPhoneValid(string phone)
(
/* write some code to verify if the phone is valid or not. return true, if the phone is valid. return false, if invalid. */
)
)
Сада морамо да тестирамо овај део кода.
Можемо га и ручно тестирати уметањем различитих вредности и верификацијом излаза. Ово може изгледати једноставно на први поглед, али биће поновљен задатак ако се промени кода.
Алтернативно, можемо написати тестни случај који може послужити као мој валидатор све док пословна логика остане иста. Тестни случај јединице се неће променити чак и ако променимо код. Дакле, напишемо тестни случај јединице за горњи код.
public void TestPhoneValidator()
(
string validPhone = "(123) 456-7890";
string invalidPhone = "123 45"
PhoneValidator validator = new PhoneValidator();
Assert.IsTrue(validator.IsPhoneValid(valid phone));
Assert.IsFalse(validator.IsPhoneValid(invalidPhone));
)
Па како функционише горњи тестни код јединице? Запазите два Извештаја о стању. Осигуравају да тест пролази само ако двије линије примају истинито и лажно од одговарајућих позива ИсПхонеВалид.
Питали бисте које су предности писања овог тестног случаја? Па, ако имате хиљаде телефонских бројева за потврду у било којем стварном сценарију, не морате ручно да потврдите сваки пут када програм за отклањање грешака притисне код. Једноставно назовите тестни код хиљадама пута и он ће вам рећи који су тестови прошли, а који нису. Сада требате само да прегледате оне који нису успели.
Савети за тестирање јединице
- Увек користите алат или оквир који подржава ваш језик. Алат олакшава израду тестних случајева јединица. У супротном можете уложити додатне напоре.
- Иако се препоручује за све, понекад је прикладно прескочити једноставне кодове и не утичу директно на понашање система. На пример, коди за геттер и сеттер могу се мање фокусирати.
- Никада не прескачите кодове који директно утичу на систем или су од пресудне важности за имплементацију пословне логике.
- Користите податке испитивања који подсећају на податке о производњи.
- Изолите свој код. Ако ваш код зависи од података из базе података, немојте писати тест случај да бисте позвали базу података и добили вредности. Уместо тога, направите интерфејс и исмевајте АПИ и позиве из базе података.
- Пре него што поправите грешку која настаје приликом тестирања јединице, напишите тест случај који открива квар. Постоје три разлога за то:
- Моћи ћете ухватити регресијске недостатке који настају из вашег поправљања.
- Ваш тест случај је сада свеобухватнији.
- Често је програмер лен да једном ажурира своје тестне случајеве.
- Поред писања тест случајева који потврђују пословну логику, пишите и случајеве који тестирају перформансе кода. Нарочито када кодови укључују петље, перформансе су подручје које је највише под утицајем.
Ствари које треба запамтити
- Случајеви јединице морају бити независни од
- Код који се тестира - Свака промена у коду не би требало да захтева промену јединице јединице испитивања осим ако се сама пословна логика не промени. На пример, ако логика сада захтева да ваљани телефонски број увек почне са '+', тада треба променити јединицу тест јединице, у супротном не.
- Други код - Не би требало да постоји било каква интеракција или зависност са било којим другим делом кода или вредности базе података или било каквим сличним стварима. Јединица треба да буде изолована током испитивања.
- Слиједите јасне и досљедне конвенције о именовању за ваше тест случајеве. То олакшава праћење сценарија. Такође можете да користите алате за контролу верзија како бисте пратили своје тестне случајеве.
- Никада не прелазите свој код на следећу фазу све док то не учините, грешке су исправљене и поново тестиране.
- Најважније је да то буде навика. Ово је пракса кодирања коју треба укључити. Што више кодите без тестирања јединице, то је ваш код већи склоност грешкама.
Каријера у тестирању јединица
Иако тестирање јединице није поље у целини, ипак је додатна стрелица у вашој дрвећи. То је добра пракса кодирања и када се добри кодери не преферирају?
Закључак
Може се неспорно закључити да тестирање јединице може бити једноставно и понекад сложено. Тада вам помажу алати и оквири. Чак и када је обављено тестирање уређаја, код није доказ потпуно грешке. Тада почиње процес следећег нивоа испитивања. Између свих ових несигурности, једино што је сигурно је да је неопходно тестирање јединице.
Препоручени чланци
Ово је водич за тестирање јединица. Овдје смо разговарали о важности, савјетима, алатима, каријери и врстама тестирања јединица са својим примјерима. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -
- Тестирање питања за интервју
- Апликација за веб тестирање
- Неисправан животни циклус у тестирању софтвера
- Каријере у тестирању софтвера
- Листа оквира за тестирање Јава