550 likes | 728 Views
Тестване на софтуера. Цели. Да се обсъди разликата м/у валидиращо тестване и тестване за дефекти Да опише принципите на тестването на с-ма и компонента Да опише стратегиите за генериране на тестови случаи за с-мата
E N D
Цели • Да се обсъди разликата м/у валидиращо тестване и тестване за дефекти • Да опише принципите на тестването на с-ма и компонента • Да опише стратегиите за генериране на тестови случаи за с-мата • Да се разберат основните х-ки на средствата използвани за автоматизиране на тестовете.
Основни теми • Тестване на с-мата • Тестване на компонентите • Проектиране на тестовите случаи • Автоматизация на тестването
Процес на тестване • Тестване на компонентите • Тестване на индивидуални програмни компоненти • Обикновено разработчикът е отговорен за него (освен за някои критични с-ми) • Тестовете се извличат от опита на разработчика. • Тестване на с-мата • Тестване на групи от компоненти интегрирани да съдадат с-ма или подс-ма. • За него е отговорен независим екип за тестване. • Тестовете се основават на с-мната спецификация
Тестване за дефекти • Целта е да се открият дефекти в програмата • Успешен тест за дефекти е този, който кара програмата да се държи не по нормалния начин • Тестовете показват наличието, а не отсъствието на дефекти
Цели на тестовия процес • Валидиращо тестване • Да демонстрира на разработчика и на клиента, че софтуерът отговаря на изискванията му. • Успешен тест е този, който показва, че с-мата действа, както е замислена • Тестване за дефекти • Да открие грешки или дефекти в софтуера, където поведението е неправилно или има несъответствие със спецификацията; • Успешен тест е този, който предизвиква неправилно действие или разкрива дефект.
Политики за тестване • Само пълното тестване може да покаже,че програмата няма дефекти. Обаче пълното тестване е невъзможно. • Политиките дефинират подхода, който се използва при избор на тестовете на с-мата • Трябва да се тестват всички функции извиквани от меню • Трябва да се тестват комбинациите от функции викани от едни също меню • Когато се очаква вход от потребителя, трябва да се тестват всички функции с правилни и неправилни данни.
Тестване на с-мата • Извършва интегрирането на компоненти за създаване на с-ма или подс-ма • Може да включва тестването на инкременти, които се предават на клиента. • Две фази: • Интеграционно тестване.Екипът има достъп до сорс кода на с-мата. С-мата се тества с интегрирането на компонентите. • Тестване на изданието.Екипът тества готовата за издаване с-ма като черна кутия.
Интеграционно тестване • Включва изграждането на с-мата от и тестването й за проблеми, които могат да възникнат от взаимодействието на компонентите. • Интегриране отгоре-надолу Разработва се скелета на с-мата и се запълва с компоненти • Интегриране отдолу нагоре Интегрират се инфраструктурните компоненти и след това функционалните • С-мите трябва да се изграждат инкрементално, за да се опрости локализацията на грешките
Инкрементално интеграционно тестване A T1 T1 A T1 T2 A B T2 T2 T3 B T3 B C T3 T4 C T4 D T5 Test sequence 1 Test sequence 2 Test sequence 3
Подходи за тестването • Валидиране на архитектурата Интегриращото “отгоре-надолу” тестване е по-добро при откриване на грешки в с-мната архитектура • Демонстрация на с-мата Интегриращото “отгоре-надолу” тестване позволява ограничена демонстрация в ранен етап на разработката • Осъществяване на теста Често е по-лесно с интегриращото “отдолу-нагоре” тестване • Наблюдение на тестовете Проблеми и при 2-та подхода. Може да се изисква допълнителен код за наблюдение на тестовете
Тестване на изданието • Това е процесът на тестване на изданието, което ще се достави на клиентите • Основна цел да се повиши увереността на доставчика, че с-мата отговаря на изискванията. • То обикновено е “черна кутия” или функционално тестване • Основава се само на спецификацията; • Тестващите нямат представа от осъществяването.
Насоки за тестването Това са съвети за тестващия екип, за да им помогнат да изберат тестове, които ще открият дефекти в с-мата • Избери входни данни, които карат с-мата да генерира всички съобщения за грешки. • Проектирай входа така, че буферите да се препълнят • Повтори един и същ вход или последователност от входове няколко пъти • Предизвикай невалиден изход; • Предизвикай много големи или много малки резултати от изчисленията.
Случаи на използване (Use cases) • Случаите на използване могат да са база за извличане на тестове. Те помагат да се определят операциите, които трябва да се тестват и да се проектират тестваните случаи. • От съответна диаграма на последователностите (sequence diagram) могат да се определят входовете и изходите, които да се тестват.
Диаграма на последователностите за събиране на метео-данни
Тестване на ефективността • Част от тестовете могат да проверяват интегралните качества на с-мата акто ефективност и надеждност. • Тестовете за ефективност включват планиране на серия тестове с повишаващо натоварване, докато бързодействието стане неприемливо.
Тестване на стрес • Пуска с-мата с натоварване над максималното. Често това предизвиква показването на скрити дефекти. • Стресирането на с-мата тества поведението при срив. Това не трябва да става катастрофа. Тестването проверява за неприемлив отказ от услуги или загуба на данни • То е важно за разпределени с-ми, които могат да покажат разпадане на с-мата при претоварване на мрежата
Тестване на компоненти • Това е процес на тестване на изолирани индивидуални компоненти • Това е процес на тестване за дефекти • Компонентата може да е: • Отделна функция или метод на обект • Класове от обекти с по няколко атрибута и методи • Съставни компоненти с дефиниран интерфейс за достъп до функциите й.
Тестване на клас от обекти • Пълното тестване на клас включва: • Тестване на всички операции асоциирани с един обект • Даване на стойност на атрибутите и достъп до тях • преминаване на обекта през всички възможни състояния • Наследяването усложнява проектирането на тестовете за класове, защото информацията за проверка не е локализирана.
Интерфейс на обекта Метео-станция
Тестване на клас Метео-станция • Нужно е да се дефинират тестовите случаи за reportWeather, calibrate, test, startup и shutdown. • Като се използва моделът на състоянията, трябва да се определят последователностите от промени на състоянията и последователностите от събития предизвикващи тези състояния • Например: Waiting -> Calibrating -> Testing -> Transmitting -> Waiting
Тестване на интерфейсите • Целите са да открият грешки в интерфейсите или неверни предположения за интерфейсите. • Особено важно за обектно ориентираната разработка, където обектите са дефинирани чрез интерфейсите си.
Тестване на интерфейсите Test cases A B C
Типове интерфейси • Параметричен интерфейс Данните предадени от една процедура на друга • Интерфейси със споделена памет Блок памет, който е общ за процедури и/или функции • Процедурен интерфейс Под-с-ма капсулира напор от процедури, които могат да бъдат извиквани от друга под-с-ма • Интерфейс чрез предаване на съобщения Под-с-ма иска услуга от друга под-с-ма.
Грешки в интерфейсите • Неправилно използване Извикващата компонента извиква друга компонента и извършва грешка при използването й, напр. грешен ред на параметрите • Неразбиране на интерфейса При написването на извикващата компонента са направени неправилни предположения за поведението на извикваната компонента. • Грешки на синхронизация Извикващата и извикваната компоненти работят с различни скорости и е предадена неактуална информация.
Насоки при тестването на интерфейсите • Тестовете се проектират така, че параметрите към извикваната процедура да са с гранични стойности • Когато има параметри-указатели се тестват с null • Проектират се тестове, които предизвикват срив на компонентата • Използва се стресово тестване при с-ми с обмен на съобщения • При с-ми със споделена памет трябва да се променя реда на активиране на компонентите.
Проектиране на тестовите случаи • Това са входовете и изходите, използвани да се тества с-мата • Целта е да се създаде набор от тестове, които са ефективни за валидирането и за откриването на дефекти • Подходи в проектирането: • Тестване основано на изисквания • Тестване основано на раздели от данни; • Структурно тестване.
Тестване основано на изисквания • Основен принцип на инженеринга на изискванията е, изискванията да са проверяеми • Това е техника за валидиращо тестване, при което за всяко изискване се извлича набор от тестове.
Тестване по класове (partitions) • Входните данни и изходните р-тати често попадат в различни класове, в които всички членове на даден клас имат общи х-ки. • Всеки от тези класове се нарича клас на еквивалентност или домейн, като програмата се държи по еквивалентен начин за всеки член на класа. • За всеки клас трябва да бъде избран тестов случай.
3 1 1 4 7 1 0 Less than 4 Betw een 4 and 1 0 Mor e than 1 0 Number of input v alues 9999 1 00000 1 0000 5 0000 99999 Less than 1 0000 Betw een 1 0000 and 99999 Mor e than 99999 Input v alues Класове на еквивалентност
Спецификация на подпрограмата за търсене procedure Search (Key : ELEM ; T: SEQ of ELEM; Found : in out BOOLEAN; L: in out ELEM_INDEX) ; Pre-condition -- the sequence has at least one element T’FIRST <= T’LAST Post-condition -- the element is found and is referenced by L ( Found and T (L) = Key) or -- the element is not in the array ( not Found and not (exists i, T’FIRST >= i <= T’LAST, T (i) = Key ))
Подпрограма за търсене – класове на входа • Входове, които отговарят на предусловия • Входове, които не отговарят на предусловия • Входове, за които ключът е член на масива • Входове, за които ключът не е член на масива
Насоки за тестване (последователности) • Тествайте с последователности, които имат само 1 стойност • Използвайте последователности с различни размери в различните тестове • Направете тестове, при които се използва първия, последния и средния елемент на последователността. • Тествайте с последователност с дължина 0.
Подпрограма за търсене – класове на входа
Структурно тестване • Понякога се нарича тестване на “бяла кутия” • Извличане на тестовите случаи според структурата на програмата. Познаването на програмата се използва за определяне на допълнителни случаи. • Целта е да се изпълнят всички оператори на програмата (не всички комбинации на пътищата)
Структурно тестване Test data T ests Deri v es Component Test code outputs
Бинарно търсене – класове на еквивалентност • Удовлетворени предусловия, ключът е в масива • Удовлетворени предусловия, ключът не е в масива • Неудовлетворени предусловия, ключът е в масива • Неудовлетворени предусловия, ключът не е в масива • Pre-conditions unsatisfied, key element not in array. • Входният масив има една единствена стойност. • Входният масив има четен брой стойности. • Входният масив има нечетен брой стойности.
Бинарно търсене – класове на еквивалентност
Бинарно търсене – случаи на тестване
Тестване на пътищата • Целта на това тестване е да се всеки път в програмата да се изпълни поне веднъж. • Изходната точка за това тестване е блок-схемата на програмата, която е граф с възли представляващи решенията и дъги – пътят =на предаване на управлението • Операторите с условия са възлите в тази диаграма.
Независими пътища • 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14 • 1, 2, 3, 4, 5, 14 • 1, 2, 3, 4, 5, 6, 7, 11, 12, 5, … • 1, 2, 3, 4, 6, 7, 2, 11, 13, 5, … • Случаите на тестване трябва да се подберат така, че да се изпълнят всички пътища • Може да се използва динамичен анализатор на програми, който да провери, че всички пътища са били изпълнени