Lecture 07 5/3/2016 9:31:00 AM Experience-based Techniques Тестирование основаное на опыте подразумивает под собой нестуктурированые тесты, не основаные на тест кейсах. Применяется в случае недетально описаных спецификаций отсутствии времени на стуктурированые тесты (исполнении тест кейсов) Experience-based Techniques может применятся и в случае, если спецификации доступны. Цель – основываясь на опыте работы со схожими системами сосредоточиться на более ненадёжных частях программы, не привязываясь непосредственно к тестированию спецификаций. Техники Experience-based Techniques Error guessing «Угадывание ошибок» простая неструктурированая техника, которая основана на интуиции и опыте полученном при тестиривании подобных приложений. Применяется для определения и проведения тестов, которые сложно было бы организовать при более формальном и структурированом подходе. Основной минус Error guessing это негарантированая эффективность, так как результат полностью зависит от опыта конкретного тестера. В качестве улучшения результативности Error guessing используются следующие подходы: определение областей тестирования основываясь на опыте/мнении нескольких опытных тестеров тесты основываются на списке заведомо существующих багов. Анализируется область затронутая багами и тестирование производится вокруг этой «слабой» обалсти. Explorative testing Техника тестирования, которая комбинирует опыт тестера и структурированый подход к тестированию. Нужда в применении этой техники может возникать при отсутствии детальных спецификаций или при нехватке времени. Тестирование проводится в соответствии с графиком и целями тестирования. Основное отличие от Error Guessing - наличие областей, к которым применяется тестирование, основаное на опыте. Выбор техники тестирования 1. Первое и главное правило: первым проводится общее функциональное тестирование (спецификации). Применяется структурированый подход, то есть скрипты, отчёты. 2. Когда базовая проверка функциональности закончена, наступает время определение областей тестирования и покрытия. Покрывается ли нашими тестами каждая функциональность продукта? 3. Затем применяются структурые методы (в дополнение к функциональным). Под структурными имеются ввиду тестирование кода (white box). 4. Когда завершено систематичное тестирование появляется возможность применить experienced-based технику. Structure-based or white-box techniques Техника, которая применяется для изучения структуры программы. Вместо того, чтобы исполнять код, чтобы убедиться, что он нормально работает фокусируются на определённых частях кода. Например, проводится проверка того, что выбраная часть кода выполняется хотя бы один раз. Для того чтобы применять структурные тесты необходимо уметь проводить анализ кода. 1 Lecture 07 5/3/2016 9:31:00 AM Код может быть двух типов – исполняемый и неисполняемый. Исполняемый код приводит к действиям/вычислениям компьютера. Неисполняемый код испоьзуется, чтобы подготовить компьютер к действияем или вычислениям. В коде, который мы будет рассматривать неисполняемые строки будут распологаться в начале кода, все исполняемые строки – между двумя ключевми словами BEGIN и END. Структра следующая: 1 2 3 4 5 6 Неисполняемые строки BEGIN Исполняемые строки END Существует три структуры, которые встречаются в коде: 1. Sequence (Последовательность) 2. Selection (Выбор) 3. Iteration (Итерация) Sequence 1 Read A 2 Read B 3 C = A + B Комьютер исполнит строки из примера последовательно. Код исполнялся сверху вниз, одна строка за другой. Selection 1 2 3 4 5 6 IF P > 3 THEN X = X + Y ELSE X = X – Y ENDIF Здесь компьютер проводит сравнение значение P с 3. Если условие выполняется, то исполнение кода переходит на строку 2, в противном случае исполнение переходит на строку 4. Iteration Или «цикл». Набиболее распространённый цикл известен как DO WHILE (или WHILE DO): 1 2 3 4 5 6 X = 15 Count = 0 WHILE X < 20 DO X = X + 1 Count = Count +1 END DO Код будет выполнятся до тех пор, пока условие цилка (X < 20) будет выполнятся. 2 5/3/2016 9:31:00 AM Lecture 07 Flow charts (блок-схемы) Используются два символа – прямоугольники и ромбы. Прямоугольники – обозначают части последовательно исполняемого кода Ромбы – обозначают условие (в том числе условие присутствующее в цикле). Example1 Control flow graphs (Граф потока управления) Отображение кода ввиде графов потока управления позволяет концентрироваться только на частях программы, в которых принимается логическое решение. То есть концентрируются на частях, которые влияют на ход программы. Граф состоит из двух честей – узлов и рёбер. Узел представляет точку в коде где ход программы может быть изменён (например, есть условие) Ребро – указывает направление хода программы. Control flow subgraphs (Подграфы потока управления) If then else Do while Repeat until Если блок или подграф не имеют путей до них от входного блока, то данная часть графа является недостижимой (мертвый код) при любых вариантах исполнения, и по этой причине он может быть удален из программы. Если же из данного подграфа нет путей до выходного блока, то значит этот подграф содержит бесконечный цикл. Конечно же, не все бесконечные циклы можно обнаружить по такому признаку. Statement testing and coverage Example Блок схемы хорошо применимы для отображения исполняемых частей программы – прямоугольники или ромбы. Графы потока управления – отображают только структурные части, отвечающие за изменения хода программы (напр. условие). На практике, нам необходимы оба типа отображения структур. Для этого были созданы так называемые гибридные графы потока управления. Строится граф потока управления (control flow graph), но добавляется узел для каждой исполняемой части программы. 3 Lecture 07 5/3/2016 9:31:00 AM Посмотрим, что происходит, когда запускается программа. Ход программы исполняет каждую часть, которая встречается на во время выполнения (включая, логические условия). Лучшим способом проведения таких тестов является передача в программу различных входных данных и отслеживания хода программы. Пути программы (точки) Для упрощения обозначения возможных ходов исполнения программы используется буквенное обозначение. Кейс acdfgh: Decision testing and coverage Эта техника нацелена на тестирование условий в программе. Например, условие цикла - проверяется поведение при выполнении условия выхода из цикла и невыполнении. Тоже касается IF – передаются значения, которые проверят оба исхода условия – True и False. Надо понимать, что основная цель всех схем и графов – отследить возможные ходы исполнения программы. Тем не менее, возникают ситуации, когда ход программы идёт по непредвиденному пути. Безусловно, это ошибка в программе (например, возникает крэш). В этом случае непредусмотренную ситуацию на себя берёт операционная система. 4