Програмни езици и системи, Тестване на софтуер
Тестване–процесът на изпълнение на програма за откриване на грешки чрез реално изпълнение на специално избрани тестови случаи. Стъпките на процеса се определят чрез тестове. Всеки тест определя:
• собствен набор от изходни данни и условия за стартиране на програмата;
• набор от очаквани резултати от програмата.
Друго име за теста–е тестов случай. Пълната проверка на програмата се гарантира чрез изчерпателно тестване. Той изисква проверка на всички набори от изходни данни, всички варианти на тяхната обработка и включва голям брой тестови варианти. Уви, изчерпателното тестване в много случаи остава само мечта–задействат се ограничения на ресурсите (предимно времеви ограничения).
Вариант на тест с висока вероятност за откриване на нерешена грешка се счита за добър. Тестът се нарича успешен, ако открие неразрешена грешка.
• демонстрация на съответствие на функциите на програмата с нейното предназначение;
• демонстрация на изпълнение на изискванията за изпълнение на програмата;
• показване на надеждността като показател за качество на програмата.
Тестването не може да покаже липсата на дефекти (може само да покаже наличието на дефекти).
Помислете за информационните потоци на процеса на тестване. Те са показани на фиг. 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 Ще бъде полезно да прочетете по темата: