Ако си поговорите с някой от „динозаврите“ в софтуерната индустрия, той ще ви разкаже как само преди няколко десетилетия никой не е обръщал внимание на тестовете и дори не е съществувала професията на QA инженерите.
Днес тестовете са основополагащ елемент от разработката на софтуер, при това съвсем не са в ръцете само на QA инженерите. Тестовете са първата стъпка от работата и последната. Онова, което може да държи в рамки свръхсложните днешни приложения, при които постоянно нещо не работи както трябва. Тук накратко ще ви разкажем за това защо са важни и кои са основните типове тестване в света на софтуерното инженерство.
Кой разбира, функционира
На първо място е важно да кажем какво се крие зад магическото съкращение QA. Това в софтуерния свят не са Questions & Answers, които ежедневно ще срещнете скрити зад същото съкращение, а Quality Assurance – специалистите, които отговарят за осигуряването на качеството. Които следят за това колко добре се справят програмистите и дебнат за появяването на опасни бъгове. Но за тяхната професия (и дали пък тя не е вашата бъдеща такава) ще поговорим по-подробно скоро, тук сме се събрали, за да откроим основните типове тестове, които се прилагат. В различните проекти някои от тях са отговорност на програмистите, в други – на QA специалистите, а трети не се интересуват толкова от тестването и именно те надали имат светло бъдеще в днешния софтуерен живот.
В него проектите са сложни и многопластови, всеки ред код може да „счупи“ друг; всяка нова функционалност да навреди на нещо предишно. Ето защо идват тестовете, които достатъчно често се пускат в действие, за да могат да покажат къде нещо не е наред, преди проблемът да е стигнал до потребителите.
И така, най-голямата група, за която си струва да знаете, са функционалните тестове. Както личи и от името им, тяхната задача е да проверяват дали приложението функционира както трябва, дали някоя нова функционалност не се е отразила зле на досегашните.
От малкото към голямото
Вътре в голямата група на функционалните тестове ще срещнете още много отделни типове и подгрупи. Може би най-популярната класификация ги разделя на юнит тестове, интеграционни и проверки от край до край – end-to-end.
Целта на юнит тестовете е да проверяват функционирането на възможно най-малките градивни единици на приложението. Колкото по-малка част от кода проверява един такъв тест, толкова по-добре си върши работата. Често броят на юнит тестовете в дадено по-мащабно приложение става наистина внушителен. Те се пишат най-бързо и лесно и като цяло са най-разпространените в софтуерния свят. Идеята им е, че когато се проверява дали отделните единици продължават да си вършат добре работата, същото ще важи и за цялото приложение.
Много често юнит тестовете се пишат от самите програмисти. В някои екипи е задължително изискване, когато се напише дадена функционалност, софтуерният инженер да подготви и съответните юнит тестове, които са свързани с нея. Добра идея е да се прави така, защото в противен случай е много трудно да се навакса с писането на тестове, когато приложението е станало огромно.
Разбира се, важно е да уточним, че те трябва да проверяват положителните сценарии – дали дадена функционалност се изпълнява както трябва. Но също и отрицателните – дали приложението реагира правилно при проблем, например не би ви пуснало да влезете в профила си, без да сте въвели своята парола.
Разбира се, само този тип проверки съвсем не винаги са достатъчни и тук идва мястото на следващите групи.
Интеграционните тестове например се грижат да проверят как си взаимодействат едни с други отделните компоненти, проверявайки отделни функционалности. А тези от край до край целят да проверяват цялата последователност от действия, които би трябвало да позволява приложението.
Дим от комина
Разбира се, има още много типове тестове и класификации. Може би единствената друго безспорно универсално разделение е това, което ги определя като автоматизирани или ръчни. Докато при ръчните един човек проверява сам какво се случва в приложението, при автоматичните това прави специален софтуер, който най-често повтаря едни и същи последователности от проверки. Най-често такива са юнит тестовете и тези от край до край, където най-използваната и популярна програма се нарича Selenium. Тоест, днес имаме QA инженери, чиято задача е да проверяват всичко ръчно и такива, които пък пишат компютърен код със същата крайна цел. Нерядко едни и същи специалисти правят по малко и от двете.
За „пушещи“ или smoke тестове става дума тогава, когато нещата се проверяват без особено задълбочаване. Това идва от механиката, където пуши ли печката леко при първото пускане, значи всичко с нея е наред.
Регресионните тестове идват тогава, когато се добавя ново приложение и конкретно се проверява дали нищо от преди това работещите не се е повредило. А acceptance или тестовете за одобряване са точно обратното – при тях се проверява само доколко точно е изпълнено дадено задание спрямо описанието, без да се гледат останалите елементи.
Функционирай това
Нефункционалните тестове са тези, които не са директно свързани с конкретните задачи на софтуерното приложение.
Голяма част от тях например са свързани със сигурността му. Те също могат да бъдат най-различни, типичен пример са тестовете за пробиви или penetration, осъществявани от бели хакери. Тяхната единствена цел е да открият уязвимости, които могат да се превърнат в сериозна опасност при истинска хакерска атака.
Важна група проверки са и тези за представяне. Оценява се например доколко е бързо приложението и има ли нужда от подобрения в тази област. Или пък дали то се справя добре, ако бъде подложено на по-сериозно натоварване, например от много повече потребители.
Тестовете за използваемост също по същество не са свързани с това как работи апликацията, а дали тя е удобна при различни условия, например може ли да се ползва от хора с увреждания, или пък при доста различни екранни резолюции.
Висша форма на доверие
Тестовете за съвместимост пък идват тогава, когато трябва да се провери дали две приложения си взаимодействат достатъчно добре.
Разбира се, много често всички тези класификации са условни, дадена проверка може да включва характеристиките на няколко от групите. Но е важно всеки софтуерен инженер или човек, който работи на друга длъжност в тази област, да знае тази основна терминология, така че да може да си комуникира адекватно с колегите.
Тестовете стават все по-важни с всяка изминала година, защото все повече и по-мащабни са приложенията, които ни заобикалят, а с това стават по-големи и рисковете. Със сигурност професията на QA инженера има доста успешно настояще и повече от перспективно бъдеще. Но за нея ще ви разкажем при следващата ни среща.
А ако междувременно искате сами да създадете прост сайт и да опитате да му приложите базови тестове, за това, разбира се, винаги ще ви е полезен безплатният хостинг. Опитайте услугата, която предлагаме, като започнете оттук.