Какво е Loop тестване? Методика, пример
⚡ Умно обобщение
Тестването на цикъл валидира конструкциите на цикъла в програмата, като проверява какво се случва, когато цикълът бъде пропуснат, въведен веднъж, изпълнен на границата си и избутан с едно преминаване извън максимално допустимия брой.
Какво е Loop тестване?
Тестване на цикъл е вид софтуерно тестване, което се фокусира изцяло върху валидността на цикличните конструкции в програмата. То е една част от тестването на контролните структури, наред с тестване на пътя, тестване за валидиране на данни и тестване на условия.
Тестването на цикъл е a тестване на бяла кутия техника, така че се прилага от някой, който може да прочете изходния код и да види състоянието на цикъла, брояча и пътя на изхода. Тестерът не гадае поведението от потребителския интерфейс; самият цикъл е тестваният обект.
Диаграмата по-долу показва къде се намира тестването на цикли в семейството за тестване на управляващи структури.
Тествани типове контури
Преди да изберете стратегия, определете кой от четирите класа цикли разглеждате. Примери за тествани типове цикли са:
- Обикновен цикъл — единична линия с един вход и един изход, като например равнина за, докато or направи-а конструкция.
- Вложен цикъл — един цикъл, поставен вътре в друг, така че вътрешният цикъл да се изпълнява докрай при всяко преминаване на външния цикъл.
- Конкатениран цикъл — два или повече цикъла, изпълняващи се един след друг последователно.
- Неструктуриран цикъл — непланирана комбинация от вложени и конкатенирани цикли, обикновено резултат от скокове в или извън тялото на цикъл.
Класът определя усилията. Един прост цикъл се нуждае от няколко итерации; неструктурираният цикъл обикновено се нуждае от преработка на кода, преди изобщо да може да бъде тестван.
Защо тестване на цикъл?
Тестването на цикъл се извършва поради следните причини
- Тестването може да коригира проблемите с повторението на цикъла
- Тестването на цикли може да разкрие проблеми с производителността и капацитета
- Чрез тестване на цикли могат да се определят неинициализираните променливи в цикъла
- Това помага за идентифициране на проблеми с инициализацията на цикъла.
Има и търговска причина. Цикъл, който изпълнява една итерация в повече, поврежда общата сума; цикъл, който никога не завършва, замръзва процеса. И двата дефекта са лесни за откриване, докато кодът е все още на машина на разработчика, и скъпи за откриване в производствения процес.
Как да направите Loop тестване: Пълна методология
При тестване на цикъл, той трябва да бъде проверен на три различни нива:
- Когато се влезе в цикъла
- По време на изпълнението му и
- Когато цикълът е оставен
Стратегията за тестване за всички тези цикли е следната.
Обикновен цикъл
Един прост цикъл има един вход и един изход, както е показано по-долу.
Един прост цикъл се тества по следния начин:
- Пропуснете целия цикъл
- Направете 1 преминаване през примката
- Направете 2 преминаване през примката
- правя a преминава през цикъла, където a < b, това е типичен брой итерации в среден диапазон
- правя b, b-1 и b+1 преминава през цикъла, където b е максималният брой допустими преминавания през цикъла.
Последните два случая носят най-голяма стойност. Пропуснетеping Цикълът доказва, че условието за изход е оценено преди изпълнението на тялото, и b+1 случай доказва, че цикълът отказва да работи извън декларирания си лимит, вместо да препълва масив.
Вложен цикъл
Вложеният цикъл умножава броя на възможните комбинации от итерации, така че се тества отвътре навън, а не всички наведнъж.
За вложен цикъл е необходимо да следвате следните стъпки.
- Задайте всички останали цикли на минималната им стойност и започнете от най-вътрешния цикъл
- За най-вътрешния цикъл извършете прост тест за цикъл и задръжте външните цикли на тяхната минимална стойност на параметъра на итерация
- Извършете теста за следващия цикъл и работете навън
- Продължете, докато не бъде тестван най-външният контур.
Конкатенирани цикли
Свързаните цикли се намират един след друг в един и същ път на изпълнение, както е показано на диаграмата.
В конкатенираните цикли, ако два цикъла са независими един от друг, те се тестват, използвайки подхода на прост цикъл, в противен случай се тестват като вложени цикли.
Ако обаче броячът на цикли на един цикъл се използва като начална стойност за другия, двата цикъла не се считат за независими.
Неструктурирани цикли
Неструктурираните цикли са най-трудният случай, защото управлението влиза и излиза от тялото на цикъла в произволни точки.
За неструктурирани цикли, дизайнът трябва да бъде преструктуриран, за да отразява използването на структурни програмни конструкции. След като кодът е редуциран до прости, вложени или конкатенирани форми, се прилага горната стратегия за съпоставяне.
Пример за тестване на цикъл с тестови случаи
Разработен пример прави броя на итерациите конкретен. Да разгледаме рутина, която умножава текущ резултат по всяко цяло число от 1 до n, факториално изчисление. Броячът на цикъла започва от 1, условието за изход е противодействие на > n, и цикълът е деклариран да приема максимум 12 преминавания, преди резултатът да препълни декларирания целочислен тип.
Третирайки това като прост цикъл, препоръчаният по-горе брой итерации се превръща в следното тестови случаи.
| Тестов случай | Стойност на n | Изпълнени пасове | Какво доказва |
| TC01 | 0 | 0 (пропускане на цикъл) | Условието за изход се оценява преди изпълнението на тялото, а резултатът остава на инициализираната си стойност 1. |
| TC02 | 1 | 1 | Еднократното преминаване дава правилния резултат и броячът се увеличава веднъж. |
| TC03 | 2 | 2 | Акумулаторът пренася стойност напред между две последователни пасове. |
| TC04 | 5 | 5 | Типичното броене в среден диапазон връща очакваните 120, което потвърждава нормалното поведение. |
| TC05 | 11 | 11 | Един пропуск под максимума все още се завършва нормално (b-1 г.). |
| TC06 | 12 | 12 | Декларираният максимум се приема и цикълът прекратява (b). |
| TC07 | 13 | отхвърлена | Едно преминаване над максимума се отхвърля, вместо тихо да прелива (b+1). |
Обърнете внимание, че TC01 и TC07 са двата случая, които разработчиците най-често пропускат, и те са двата, които разкриват дефекти от пропусната инициализация и препълване. Отрицателна стойност на n принадлежи към същия набор, ако спецификацията позволява да бъде предоставено, което свързва тестването на цикъла с отрицателен тест.
Често срещани дефекти, открити чрез тестване на контур
Тестването на цикли непрекъснато открива едно и също малко семейство от грешки, което е причината фиксираният брой итерации да се изпълнява всеки път.
- Граници, отклоняващи се с едно от едно — условие, записано като < където <= беше предназначено, така че цикълът се изпълнява с един проход твърде малко или с един проход твърде много.
- Неинициализирани броячи или акумулатори — сума, която съдържа стойност, останала от предишно повикване.
- Безкрайни цикли — условие за изход, което тялото на цикъла никога не може да удовлетвори, защото броячът се актуализира само в някои клонове.
- Предположения за пропуснат цикъл — код след цикъла, който чете променлива, която тялото на цикъла е трябвало да зададе, което се проваля, когато цикълът се изпълни нула пъти.
- Проблеми с капацитета и производителността — цикъл, който е правилен, но препрочита базата данни при всяко преминаване, така че цената нараства с броя на итерациите.
- Вложена интерференция — вътрешен цикъл, който използва повторно брояча на външния цикъл и тихо променя брояча на външните итерации.
Тъй като всяка повреда съответства на специфичен брой итерации, дефектите, открити тук, са лесни за възпроизвеждане и бързи за отстраняване в сравнение с дефектите, открити при по-високи... нива на теста.
Тестване на цикли спрямо други техники за тестване на управляващи структури
Тестването на цикли е един член на семейството на управляващите структури и е лесно да се обърка със съседните техники. Таблицата по-долу ги разделя.
| Техника | Какво е насочено към него | Типична цел на покритието |
| Тестване на цикъл | Конструкции на цикли: вход, брой итерации и изход | Нулево, едно, типично и гранично преброяване на итерации за всеки цикъл |
| Тестване на състоянието | Булеви изрази в решенията | Всяко условие е оценявано едновременно като истина и неистина. |
| Тестване на потока от данни | Дефиниция и употреба на всяка променлива | Всяка двойка „определение за употреба“ е упражнена поне веднъж |
| Тестване на базов път | Независими пътища през графа на управляващия поток | Брой пътища, равни на цикломатичната сложност |
На практика тези техники се допълват, а не се конкурират. Цикломатична сложност казва ви колко независими пътя съществуват, тестването на базови пътища ги покрива, а тестването на цикли след това добавя броя на итерациите, които само покритието на пътя не би довело до форсиране. Всички те са динамично тестване дейности, тъй като кодът трябва да бъде изпълнен, за да се наблюдават резултатите.
Ограничение при тестване на цикъл
Техниката има реални граници и познаването им предотвратява прекомерните инвестиции.
- Грешките в цикъла се появяват най-вече в софтуер от ниско ниво
- Грешките, идентифицирани по време на тестването на цикъла, не са много фини
- Много от грешките могат да бъдат открити от операционната система, тъй като причиняват нарушения на границите на паметта, откриваеми грешки на показалеца и подобни грешки.
- Идентифицирането на класа на всеки цикъл и съответното му тестване струва време, което е трудно да се оправдае при кодови пътища, които носят малък риск.





