Разлика между тестване на единици, интегриране и функционално тестване

Подробно сравнение на тестването на единици, интеграцията и функционалното тестване:

За всяко софтуерно приложение е много важно както тестването на единица, така и интеграционното тестване, тъй като всяко от тях използва уникален процес за тестване на софтуерно приложение.

Но нито едно от тях или дори и двете не могат да заменят функционалното тестване в нито един момент.

Тестване на единици срещу тестване на интеграция срещу функционално тестване

Тестване на единици означава изолирано тестване на отделни модули на приложение (без взаимодействие със зависимости), за да се потвърди, че кодът прави нещата правилно.

Тестване на интеграцията означава да се провери дали различните модули работят добре, когато са обединени в група.

Функционално изпитване означава тестване на част от функционалността на системата (може да взаимодейства със зависимости), за да се потвърди, че кодът прави правилните неща.

Функционалните тестове са свързани с интеграционните тестове, но те означават тестове, които проверяват функционалността на цялото приложение с целия код, работещ заедно, почти супер интеграционен тест.

Тестването на единици се отнася до проверка на отделен компонент на системата, докато тестването на функционалността се отнася до проверка на работата на приложението спрямо предвидената функционалност, описана в спецификацията на системните изисквания. От друга страна, интеграционното тестване се отнася до проверка на интегрираните модули в системата.

И най-важното, за да оптимизирате възвръщаемостта на инвестициите (ROI), базата ви с код трябва да съдържа възможно най-много тестове за единици, по-малко интеграционни тестове и най-малко функционални тестове.

Това е илюстрирано най-добре в следната тестова пирамида:

Тестовете на единици се пишат по-лесно и се изпълняват по-бързо. Времето и усилията за изпълнение и поддръжка на тестовете се увеличават от тестове на единици към функционални тестове, както е показано в горната пирамида.

Пример:

Нека разберем тези три вида тестване с един твърде опростен пример.

Напр. За да функционира един мобилен телефон, основните необходими части са "батерия" и "SIM карта".

Пример за тестване на единица - Проверява се животът на батерията, нейният капацитет и други параметри. Проверява се активирането на SIM картата.

Пример за тестване на интеграцията - Батерията и сим картата са интегрирани, т.е. сглобени, за да се стартира мобилният телефон.

Пример за функционално тестване - Функционалността на мобилния телефон се проверява по отношение на неговите функции и използването на батерията, както и на възможностите на SIM картата.

Видяхме един пример на лаически език.

Нека сега разгледаме технически пример за страница за вход:

Почти всяко уеб приложение изисква от своите потребители/клиенти да се логнат. За тази цел всяко приложение трябва да има страница "Вход", която съдържа тези елементи:

  • Акаунт/име на потребителя
  • Парола
  • Бутон за вход/вписване

За тестване на единици тестовите случаи могат да бъдат следните:

  • Дължина на полето - полета за потребителско име и парола.
  • Стойностите на полетата за въвеждане трябва да са валидни.
  • Бутонът за влизане в системата се активира само след въвеждане на валидни стойности (формат и дължина) в двете полета.

За интеграционно тестване тестовите случаи могат да бъдат следните:

  • Потребителят вижда приветственото съобщение, след като въведе валидни стойности и натисне бутона за вход.
  • Потребителят трябва да бъде навигиран до началната страница или страницата за посрещане след валидно въвеждане и натискане на бутона Вход.

Сега, след като тестването на модула и интеграцията са завършени, нека видим допълнителните тестови случаи, които се разглеждат за функционално тестване:

  1. Проверява се очакваното поведение, т.е. дали потребителят може да влезе в системата, като щракне върху бутона за влизане, след като въведе валидни стойности за потребителско име и парола.
  2. Има ли съобщение за добре дошли, което трябва да се появи след успешно влизане?
  3. Има ли съобщение за грешка, което трябва да се появи при невалидно влизане?
  4. Има ли съхранени бисквитки на сайта за полетата за вход?
  5. Може ли деактивиран потребител да влезе в системата?
  6. Има ли връзка "забравена парола" за потребителите, които са забравили паролите си?

Има още много подобни случаи, които идват на ум на функционалния тестер, докато извършва функционално тестване. Но един разработчик не може да вземе предвид всички случаи, докато изгражда тестови случаи за единица и интеграция.

По този начин има много сценарии, които предстои да бъдат тествани дори след тестването на модула и интеграцията.

Сега е време да разгледаме последователно Unit, Integration и Functional testing.

Какво представлява тестването на единици?

Както подсказва името, това ниво включва тестване на "единица".

Тук единицата може да бъде най-малката част от приложението, която може да бъде тествана, независимо дали е най-малката отделна функция, метод и т.н. Разработчиците на софтуер са тези, които пишат тестовите случаи на единицата. Целта тук е да се постигне съответствие между изискванията и очакваното поведение на единицата.

По-долу са изброени няколко важни точки за тестването на единици и ползите от него:

  • Тестването на единицата се извършва преди интеграционното тестване от разработчиците на софтуер, като се използват техники за тестване на бялата кутия.
  • Тестването на единици проверява не само положителното поведение, т.е. правилния изход в случай на валиден вход, но и грешките, които възникват при невалиден вход.
  • Откриването на проблеми/грешки на ранен етап е много полезно и намалява общите разходи по проекта. Тъй като тестването на единици се извършва преди интегрирането на кода, проблемите, открити на този етап, могат да бъдат разрешени много лесно, а въздействието им е много по-малко.
  • Тестът на единицата тества малки части от кода или отделни функции, така че проблемите/грешките, открити в тези тестови случаи, са независими и не влияят на другите тестови случаи.
  • Друго важно предимство е, че тестовите случаи за единици опростяват и улесняват тестването на кода. Така става по-лесно да се решават проблемите и на по-късен етап, тъй като се тества само последната промяна в кода.
  • Тестването на единици спестява време и разходи, а освен това е многократно използваемо и лесно за поддръжка.

JUnit (Java framework), PHPUnit (PHP framework), NUnit (.Net framework) и др. са популярни инструменти за тестване на единици, които се използват за различни езици.

Какво представлява интеграционното тестване?

Интеграционното тестване е тестване на интеграцията на различни части на системата заедно. Две различни части или модули на системата първо се интегрират и след това се извършва интеграционно тестване.

Целта на интеграционното тестване е да се провери функционалността, надеждността и производителността на системата, когато е интегрирана.

Интеграционното тестване се извършва върху модулите, които първо са тествани като единица, и след това интеграционното тестване определя дали комбинацията от модулите дава желания резултат или не.

Интеграционното тестване може да се извършва от независими тестери или от разработчици.

Съществуват 3 различни вида подходи за интеграционно тестване. Нека обсъдим накратко всеки от тях:

а) Интеграционен подход на Големия взрив

При този подход всички модули или единици се интегрират и тестват като цяло наведнъж. Това обикновено се прави, когато цялата система е готова за интеграционно тестване в един момент.

Моля, не бъркайте този подход на интеграционно тестване със системно тестване, тъй като се тества само интеграцията на модули или единици, а не цялата система, както се прави при системното тестване.

Основните характеристики на подхода на Големия взрив предимство е, че всичко интегрирано се тества наведнъж.

Един от основните недостатък е, че става трудно да се идентифицират неуспехите.

Пример: На фигурата по-долу единици от 1 до 6 са интегрирани и тествани с помощта на подхода "Голям взрив".

б) Подход "отгоре надолу

Интеграцията на блоковете/модулите се тества стъпка по стъпка от най-високо до най-ниско ниво.

Първата единица се тества поотделно чрез написване на тестови STUBS. След това по-ниските нива се интегрират едно по едно, докато последното ниво се събере и тества.

Подходът "отгоре надолу" е много органичен начин на интегриране, тъй като съответства на начина, по който нещата се случват в реалната среда.

Единственият загриженост този подход е, че основната функционалност се тества накрая.

в) Подход "отдолу нагоре

Единиците/модулите се тестват от най-ниско към най-високо ниво, стъпка по стъпка, докато всички нива на единици/модули се интегрират и тестват като една единица. Стимулиращи програми, наречени ДВИГАТЕЛИ При този подход се използват по-лесно откриваеми проблеми или грешки на по-ниски нива.

Основните недостатък на този подход е, че проблемите от по-високо ниво могат да бъдат идентифицирани едва в края, когато всички звена са интегрирани.

Тестване на единица срещу тестване на интеграция

След като достатъчно обсъдихме тестването на единици и интеграционното тестване, нека набързо да разгледаме разликите между тях в следващата таблица:

Тестване на единици Тестване на интеграцията
Тестване на отделен компонент от цялата система, т.е. изолирано тестване на единица. Тества компонентите на системата, които работят заедно, т.е. тества съвместната работа на няколко единици.
По-бързо изпълнение Може да работи бавно
Никаква външна зависимост. Всяка външна зависимост е присмехулна или се изключва. Изисква взаимодействие с външни зависимости (напр. база данни, хардуер и др.)
Прост Комплекс
Проведено от разработчика Проведено от изпитващия
Това е вид тестване на бялата кутия Това е вид изпитване на черна кутия
Извършва се в началната фаза на тестването и след това може да се извърши по всяко време Трябва да се извърши след тестване на модула и преди тестване на системата
Евтина поддръжка Скъпа поддръжка
Започва от спецификацията на модула Започва от спецификацията на интерфейса
Тестването на единици има тесен обхват, тъй като проверява само дали всяка малка част от кода прави това, което е предвидено да прави. Тя има по-широк обхват, тъй като обхваща цялото приложение.
Резултатът от тестването на единици е подробна видимост на кода Резултатът от тестването на интеграцията е подробната видимост на структурата на интеграцията.
Разкрива проблеми само във функционалността на отделните модули. Не разкрива грешки в интеграцията или проблеми в цялата система. Откриване на грешки, които възникват при взаимодействието на различните модули, за да се създаде цялостната система.

Функционално тестване

Техниката за тестване на "черна кутия", при която се тества функционалността на приложението, за да генерира желания изход при предоставяне на определен вход, се нарича "функционално тестване".

В нашите процеси за тестване на софтуер ние правим това, като пишем тестови случаи според изискванията и сценариите. За всяка функционалност броят на написаните тестови случаи може да варира от един до много.

Заключение

И трите вида тестове са взаимосвързани.

За да се постигне пълно покритие, е необходимо да има тестове на единиците за пътищата/линиите на кода, функционални тестове и интеграционни тестове, за да се гарантира, че "единиците" работят заедно и съгласувано.

Надявам се, че тази статия ще ви даде ясна представа за Unit, Integration и Functional testing, както и за техните разлики, въпреки че тези форми на тестване са много повече!!

Препоръчително четиво

    Превъртете към горе