Програмни езици и системи, Тестване на софтуер

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

• собствен набор от изходни данни и условия за стартиране на програмата;

• набор от очаквани резултати от програмата.

Друго име за тестае тестов случай. Пълната проверка на програмата се гарантира чрез изчерпателно тестване. Той изисква проверка на всички набори от изходни данни, всички варианти на тяхната обработка и включва голям брой тестови варианти. Уви, изчерпателното тестване в много случаи остава само мечтазадействат се ограничения на ресурсите (предимно времеви ограничения).

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

• демонстрация на съответствие на функциите на програмата с нейното предназначение;

• демонстрация на изпълнение на изискванията за изпълнение на програмата;

• показване на надеждността като показател за качество на програмата.

Тестването не може да покаже липсата на дефекти (може само да покаже наличието на дефекти).

Помислете за информационните потоци на процеса на тестване. Те са показани на фиг. 1.7.

системи

Ориз. 1.7. Информационни потоци на процеса на тестване

Има три потока на входа на процеса на тестване:

• изходни данни за стартиране на програмата;

Извършват се тестове, всички резултати се оценяват. Това означава, че действителните резултати от теста се сравняват с очакваните резултати. Когато се установи несъответствие, грешката-се коригира и отстраняването на грешки започва. Процесът на отстраняване на грешки е непредвидимпо време. Несигурността при отстраняването на грешки води до големи трудности при планирането на действия.

След събиране и оценка на резултатите от тестовете започва показването на качеството и надеждността на софтуера. Ако редовно се срещат сериозни грешки, които изискват промени в дизайна, тогава качеството и надеждността на софтуера са съмнителни, посочва се необходимостта от повишено тестване. От друга страна, ако функциите на софтуера се изпълняват правилно и откритите грешки се коригират лесно, може да се направи един от двата извода:

• качеството и надеждността на софтуера са задоволителни;

• тестовете не могат да открият сериозни грешки.

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

• функционално тестване (черна кутия тестване);

• структурно тестване (тестване с бяла кутия).

Тестване на черна кутия

Както е показано на фиг. 1.8, основното място за прилагане на интерфейса-с тестове на черна кутия.

X Y

Ориз. 1.8. Тестване на черна кутия

Тези тестове демонстрират:

• как се изпълняват програмните функции;

• как се получават входните данни;

• как се генерират резултати;

• как се поддържа целостта на външната информация.

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

Тестване на бяла кутия

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

Обикновено тестването с бяла кутия (Фигура 1.9) се основава на анализ на контролната структура на програмата.

Ориз. 1.9. Тестване на бяла кутия

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

В този случай се формират тестови варианти, в които:

• гарантира се проверка на всички независими маршрути на програмата;

• True, False разклонения се намират за всички логически решения;

• всички цикли се изпълняват (в техните граници и диапазони);

• анализира се коректността на вътрешните структури от данни.

Недостатъци на тестването с бяла кутия:

• броят на независимите маршрути може да бъде много голям;

• изчерпателното тестване на маршрути не гарантира съответствие на програмата с първоначалните изисквания към нея;

• програмата може да се пропусненякои маршрути;

• невъзможно е да се открият грешки, чиято поява зависи от обработените данни (това са грешки, причинени от изрази като if abs (a-b) E2,

където El, Е2са аритметични изрази, а като релационен оператор се използва един от следните оператори: , =, ¹,.

Съставното условие се състои от няколко прости условия, булеви оператори и скоби. Ще използваме булевите оператори ИЛИ, И (&), НЕ. Условия, които не съдържат релационни изрази, се наричат ​​булеви изрази.

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

Ако условието е неправилно, то поне един от елементите на условието е неправилен. Следователно в условието са възможни следните видове грешки:

• грешка на булевия оператор (наличие на неправилни/липсващи/излишни булеви оператори);

• грешка на булева променлива;

• грешка в булева скоба;

• грешка на релационния оператор;

• грешка в аритметичния израз.

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

Целта на тестването на условия е да се открият не само грешки в условията, но и други грешки в програмите. Ако пакетът от тестове за програма A е ефективен при откриване на грешки в условията, съдържащи се в A, тогава е вероятно този пакет да е ефективен и воткриване на други грешки в A. В допълнение, ако дадена техника за тестване е ефективна при откриване на грешки в условие, тогава е вероятно тази техника да бъде ефективна при откриване на грешки в програма.

Има няколко метода за тестване на условията.

Най-простата техника етестване на разклонения. Тук за съставното условие C се проверява:

• всяко просто условие (включено в него);

Друга техника е-тестване на обхват. Изисква генерирането на 3-4 теста за изразяване на връзката. Изразяване на формата

се проверява чрез три теста, които формират стойността на E1 по-голяма от E2, равна на E2 и по-малка от E2.

Ако релационният оператор е невалиден и E1 и E2 са правилни, тогава тези три теста гарантират, че релационният оператор е неуспешен.

За да определи грешките в E1 и E2, тестът трябва да генерира стойността на E1, по-голяма или по-малка от E2, и да гарантира, че разликата между тези стойности е възможно най-малка.

Булевите изрази сnпроменливи изискват набор от 2n теста. Този набор ви позволява да откривате грешки на булеви оператори, променливи и скоби, но е практичен само за малкиn.Въпреки това, ако всяка булева променлива е включена в булевия израз само веднъж, тогава броят на тестовете лесно се намалява.

Тестване на разклонения и релационни оператори

Методът за тестване на разклонения и релационни оператори открива грешки на разклоняващи и релационни оператори в състояние, за което са изпълнени следните ограничения:

• всички булеви променливи и релационни оператори се включват в условието само веднъж;

• в условието няма общи променливи.

При този метод се използват ограничения на естествените условия (ограничения върху резултата). За съставно условиеС,включителноnпрости условия, се формира ограничението на условието:

където diе ограничение върху резултата от i-тото просто условие.

Обмислете стъпките на пътя за тестване на разклонения и релационни оператори.

За всяко условие програмата изпълнява следните действия:

• изгражда се ограничение на условието;

• разкриват се ограничения на резултата за всяко просто условие;

• изградено е ограничаващо множество. Конструкцията се извършва чрез заместване в константните формули OM& или O или на идентифицираните ограничения на резултата;

• За всеки елемент се разработва тестова версия.

Метод за тестване на потока от данни

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

Работата на всяка програма може да се разглежда като обработка на потока от данни, предавани от входа на програмата до нейния изход.

Дефиницията на данни се отнася до действия, които променят елемент от данни. Дефиниционният атрибутиме на елемент е от лявата страна на оператора за присвояване:

Използване на данние използването на елемент в израз, при който има достъп до елемента от данни, но не и елементът е модифициран. Знакът за използване на име на елементе от дясната страна на оператора за присвояване:

Тук мястото на другото заместване на името е маркирано с правоъгълник (правоъгълникът действа като контейнер).

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

Има 4 вида цикли:

За проверкапрости цикли (фиг. 1.10) с брой повторенияn, може да се използва един от следните набори от тестове:

• изпълнение на целия цикъл;

• само един цикъл;

• два цикъла;

• Цикълътtпреминава, къдетоt Ще бъде полезно да прочетете по темата: