key successful unit testing how developers test their own code
Блацк Бок тестери не брину о јединственом тестирању. Њихов главни циљ је потврдити пријаву према захтевима без уласка у детаље примене.
Али као радозналост или Ван кутије размишљања , да ли сте се икад запитали како програмери тестирају свој код? Коју методу користе за тестирање пре објављивања кода за тестирање? Колико је развојно тестирање важно у агилном процесу? Одговор на све ово је Јединствено тестирање. Желим да вас едукујем о важности јединственог тестирања како би тимови за развој и тестирање могли више сарађивати на дизајнирању, тестирању и објављивању одличне апликације.
Ко зна да ће у будућности неки од вас можда и прећи на тестирање беле кутије и користити ове технике валидације и побољшања кода!
Шта ћете научити:
Шта је јединствено тестирање?
Јединствено тестирање није нови концепт. Тамо је од раних дана програмирања. Обично програмери и понекад Тестери беле кутије написати Унит тестове за побољшање квалитета кода провером сваке јединице кода која се користи за примену функционалних захтева (тзв. тест погон развој ТДД или тест-фирст девелопмент).
Већина нас можда зна класичну дефиницију -
„Јединствено тестирање је метода верификације најмањег дела тестираног кода у односу на његову намену.“ Ако сврха или захтев нису успели, онда јединично испитивање није успело.
Једноставним речима, то значи - писање дела кода (јединични тест) ради верификације кода (јединице) написаног за примену захтева.
Јединствено тестирање у СДЛЦ
У јединственом тестирању, програмери користе ручне или аутоматизоване тестове како би се уверили да свака јединица у софтверу испуњава захтеве купца. Ова јединица може бити појединачна функција, објекат, метода, поступак или модул у софтверу који се тестира.
Писање јединствених тестова за тестирање појединачних јединица олакшава писање свеобухватних тестова јер су све јединице састављене. Током развоја софтвера то се ради као први ниво тестирања.
Значај писања јединичних тестова
Јединствено тестирање користи се за дизајн робусних софтверских компоненти које помажу у одржавању кода и уклањању проблема у кодним јединицама. Сви знамо важност проналажења и отклањања недостатака у раној фази циклуса развоја софтвера. Ово тестирање служи истој сврси.
То је саставни део агилног процеса развоја софтвера. Када би требало да се покрене пакет за тестирање јединице за покретање сваке ноћи и генерише извештај. Ако било који јединични тест не успе, КА тим не би требало да прихвати ту верзију за верификацију.
Ако ово поставимо као стандардни поступак, многи недостаци би се ухватили у раном развојном циклусу, што би уштедело много времена за тестирање.
Знам да многи програмери мрзе да пишу унит тестове. Они или игноришу или пишу лоше јединице тестова због чврстог распореда или неозбиљности (да, пишу празне јединице тестове, па их 100% успешно положи ;-)). Важно је написати добре јединичне тестове или их уопште не писати. Још је важније пружити довољно времена и подстицајно окружење за стварне користи.
Јединствене методе испитивања
Може се извршити на 2 начина:
- Ручно тестирање
- Аутоматизовано тестирање
У Ручно тестирање , тестер ручно извршава тест случајеве без употребе било ког алата за аутоматизацију. Овде се свака фаза теста извршава ручно. Ручно тестирање је заморно, посебно за тестове који се понављају и захтевају више напора за креирање и извршавање тест случајева. Ручно тестирање не захтева знање било ког алата за тестирање.
Чињеница је да 100% аутоматизације није могуће и стога ће увек бити извршен одређени ниво ручног тестирања.
У Аутоматско тестирање, софтверски алати за аутоматизацију тестирања користе се за аутоматизацију тестова / тест случајева. Алат за аутоматизацију може снимити и сачувати ваш тест и може се репродуковати онолико пута колико је потребно без икакве даље људске интервенције.
Ови алати могу чак и да унесу податке о тестирању у систем који се тестира, као и да упоређују очекиване резултате са стварним резултатима и аутоматски генеришу извештаје. Међутим, почетни трошкови постављања алата за аутоматизацију испитивања су високи.
Технике у оквиру јединственог тестирања
# 1) Тестирање беле кутије:
шта је добра промена гласа
Током тестирања у белој кутији, испитивач познаје унутрашњу структуру софтвера, укључујући код, и може га тестирати у односу на дизајн и захтеве. Отуда је тестирање беле кутије такође познато као транспарентно тестирање .
# 2) Тестирање црне кутије:
У тестирању црне кутије, тестер не познаје интерне структуре нити код софтвера.
# 3) Тестирање сиве кутије:
Ово се такође назива испитивање полупровидне технике што значи, тестери су само делимично свесни унутрашње структуре, функција и дизајна заједно са захтевима. Отклањање грешака врши се стварним уносом са предње стране да би се добили тачни подаци на позадини. Сива кутија се стога сматра комбинацијом техника испитивања црне кутије и беле кутије.
Тестирање сиве кутије обухвата следеће врсте испитивања:
- Испитивање матрице.
- Испитивање узорака.
- Испитивање правокутног узорка.
- Регресија тестирање.
Предности јединичног тестирања
- Процес постаје окретан: Да бисмо додали нове функције или функције постојећем софтверу, морамо да изменимо стари код. Али промена ствари на већ тестирани код може бити ризична и скупа.
- Квалитет кода се побољшава: Квалитет кода се аутоматски побољшава када се изврши јединствено тестирање. Грешке идентификоване током овог тестирања су отклоњене пре него што су послате за фазу интеграционог тестирања. Резултат је робустан дизајн и развој док програмери пишу тест случајеве тако што ће прво разумети спецификације.
- Рано открива грешке: Док програмери покрећу јединствене тестове, откривају грешке рано у животном циклусу развоја софтвера и решавају их. То укључује недостатке или недостајуће делове у спецификацији, као и грешке у примени програмера.
- Лакше промене и поједностављене интеграције: Јединствено тестирање програмеру олакшава реструктурирање кода, уношење промена и одржавање кода. Такође олакшава тестирање кода након интеграције. Решавање проблема у јединственом тестирању може решити многе друге проблеме који се јављају у каснијим фазама развоја и тестирања
- Доступност документације: Програмери који касније истражују функционалност могу се обратити документацији за тестирање јединице и лако могу пронаћи интерфејс за тестирање јединице и исправити или брзо и лако радити.
- Једноставан поступак отклањања грешака: Помаже у поједностављењу процеса отклањања грешака. Ако тест не успе у било којој фази, код је потребно отклонити или се процес може наставити без икаквих препрека.
- Нижа цена: Када се грешке открију и реше током јединственог тестирања, смањују се трошкови и време израде. Без овог тестирања, ако се исте грешке открију у каснијој фази након интеграције кода, постаје теже пронаћи и решити их, што скупље чини и продужава време развоја.
- Комплетност кода се може показати помоћу јединствених тестова: Ово је корисније у агилном процесу. Испитивачи не добијају функционалне верзије за тестирање док се интеграција не заврши. Попуњавање кода не може се оправдати показивањем да сте га написали и пријавили. Али покретање Унит тестова може показати комплетност кода.
- Штеди време за развој: Довршавање кода може потрајати више времена, али због мање грешака у тестирању система и прихватања може се уштедети целокупно време развоја.
- Покривеност кодом може се мерити
Јединични циклус испитивања
(слика извор )
Шта чини добар јединични тест?
Па, нисам права особа која може рећи шта чини добар Унит Тест, али на основу мојих запажања о разним пројектима могу да кажем карактеристике доброг Унит Тест-а. Лош Унит Тест не додаје вредност пројекту. Уместо тога, трошкови пројекта значајно се повећавају писањем и управљањем лошим јединичним тестовима.
Како написати добре јединичне тестове?
- Јединствени тест треба да буде написан како би се потврдила појединачна јединица кода, а не интеграција.
- Мали и изоловани Унит тестови са јасним именовањем олакшали би писање и одржавање.
- Промена другог дела софтвера не би требало да утиче на Унит тест ако су они изоловани и написани за одређену јединицу кода.
- Требало би брзо да се покрене
- Јединствени тест би требало да се може поново користити
Оквири за јединствено тестирање
Оквири за јединствено тестирање углавном се користе за брзо и једноставно писање јединичних тестова. Већина програмских језика не подржава јединствено тестирање са уграђеним компајлером. Независни отворени и комерцијални алати могу се користити да би јединствено тестирање учинили још забавнијим.
Списак популарних Алати за јединствено тестирање за различите програмске језике:
- Јава фрамеворк - ЈУнит
- ПХП фрамеворк - ПХПУнит
- Ц ++ оквири - УнитТест ++ и Гоогле Ц ++
- .НЕТ фрамеворк - НУнит
- Питхон фрамеворк - пи.тест
Заблуде и истине
- Потребно је више времена за писање кода са Унит тест случајевима, а ми за то немамо времена - У стварности, дугорочно бисте уштедели време за развој.
- Јединствено тестирање ће пронаћи све грешке - неће, јер намера Унит теста није да пронађе грешке, већ да развије робусне софтверске компоненте које ће имати мање недостатака у каснијим фазама СДЛЦ-а.
- 100% покривеност кодом значи 100% покривеност тестом - Ово не гарантује да је код без грешака.
Како прихватити јединствено тестирање?
Добро јединствено тестирање може се извршити у 3 основна дела.
- Напиши код за јединствени тест
- Покрените код за тестирање јединице да бисте проверили да ли испуњава системске захтеве
- Извршите софтверски код за тестирање на недостатке и да ли код испуњава системске захтеве.
Након предузимања горња 3 корака, ако се чини да је код тачан, тада се каже да је положено јединствено тестирање. А ако не испуњава системске захтеве, тест не успе. У овом случају, програмер мора поново да провери и исправи код.
У неким случајевима је неопходно раздвојити код да би се тачније извршило ово тестирање.
Најбоља пракса
Да бисте током овог тестирања створили најбољи код, узмите у обзир следеће тачке:
- Код треба да буде јак: Постоје случајеви када тест не успе или се у најгорим случајевима уопште не изврши ако је код сломљен.
- Разумљиво и разумно: Шифра би требала бити лако разумљива. То програмеру олакшава писање кода, па ће чак и другим програмерима који ће накнадно радити на коду бити лако отклонити грешке.
- Треба да буде појединачни случај: Тестови који дефинишу више случајева у једном сложени су за рад. Стога је писање једног кода случаја најбоља пракса, што чини код лакшим за разумевање и отклањање грешака.
- Дозволи аутоматизоване тестове: Програмери треба да се побрину да тест ради у аутоматизованој форми. Требало би да буде у континуираном процесу испоруке или процесу интеграције.
Остале тачке које треба имати на уму су следеће:
- Уместо да креирате тестове за све услове, фокусирајте се на тест који утиче на понашање система.
- Постоје шансе да се грешка понови због кеш меморије прегледача.
- Тест случајеви не би требали бити међусобно зависни.
- Обратите пажњу и на стање петље.
- Чешће планирајте тест случајеве.
Закључак
Јединствено тестирање долази на сцену када је потребно тестирати сваку функцију одвојено. Много је разумно открити и исправити грешке током овог тестирања и уштедети време и трошкове, уместо да се проналазе у каснијој фази развоја софтвера.
Иако нуди многе предности, постоје и ограничења везана за његово коришћење. Строга дисциплина и доследност су потребни током читавог процеса развоја софтвера да се превазиђу ограничења и стекну предвиђене користи.
Ваши коментари су добродошли!
Као тестер црне кутије, која су ваша запажања о јединственом тестирању у вашем тиму? Да ли неко има бољу идеју за успешно јединствено тестирање?
Препоручено читање
- Разлике између јединственог тестирања, интеграционог тестирања и функционалног тестирања
- 20 најпопуларнијих алата за јединствено тестирање 2021
- Писање јединствених тестова са Споцк Фрамеворк-ом
- Најбољи алати за тестирање софтвера 2021. (Алати за аутоматизацију КА теста)
- Кључне разлике између тестирања црне кутије и тестирања беле кутије
- Испитивање оптерећења помоћу ХП ЛоадРуннер водича
- Разлика између тестирања радне површине, клијентског сервера и веб тестирања
- Шта је гама тестирање? Завршна фаза испитивања