Основы организации тестирования программ

Для предотвращенияошибок и дефектов ПО широко используются методы тестирования.

Тестирование программного обеспечения (software testing) - это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов [6.6]. Тестирование может быть статическим или динамическим (методами «белого ящика» или «черного ящика»).

Тестирование обеспечивает [6.2]:

· обнаружение ошибок;

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

· демонстрацию реализации требований к характеристикам программы;

· отображение надежности как индикатора качества программы.

Тестовая деятельность, связанная с анализом результатов разработки ПО, называется статическим тестированием (static testing). Статическое тестирование может выполнять проверку программных кодов, сквозной контроль и проверку программы даже без запуска на ЭВМ. Такой подход к тестированию иногда отождествляют с тестированием по методу « белого ящика». Однако тестирование «белым ящиком» всегда подразумевает прогон отдельных программных компонент с использованием специальных тестовых наборов.

При тестировании « белым ящиком» известнавнутренняя структура программы.

Исследуются внутренние элементы программы и связи между ними.

Объектом тестирования является внутреннее поведение программы.

Тестовая деятельность, предусматривающая эксплуатацию программного продукта с целью проверки выполнения функций системы, называется динамическим тестированием (dynamic testing), иначе этот подход называют « черным ящиком».

При тестировании методом «черного ящика» известны функции, выполняемые системой.

Исследуетсяработа каждой функции на всей области определения.

Система представляется объектом с известными входными значениями и выходными результатами, при этом никак не учитывается внутреннее представление системы.

Тестирование методом «черного ящика» демонстрирует:

· как выполняются функции программы;

· как принимаются исходные данные;

· как вырабатываются результаты;

· как сохраняется целостность внешней информации.

Тестирование программного обеспечения выполняет две базовые функции: верификацию и аттестацию.

Верификация (verification) это процедура, которая показывает соответствие результатов конкретной фазы процесса разработки ПО требованиям данной и предшествующих стадий.

Аттестация (validation) есть гарантия того, что программный продукт удовлетворяет всем системным требованиям заказчика.

Исследования показывают, что методики тестирования, основанные на принципах «черного и белого ящиков», должны использоваться вместе. Конечно, тестирование «белого ящика» более трудоемкий процесс, трудно поддающийся автоматизации, но выявляющий многие ошибки ПО. Эта работа требует хорошего знания кода, поэтому её проводят в присутствии автора программы, желательно, другие программисты, и именно поэтому удается выявить большое количество сложных, либо редко проявляющихся ошибок. Для проведения подобных инспекций в рамках группы программистов или целого предприятия должны существовать определенные правила написания кода.

 

6.5.1.1. Особенности тестирования « белого ящика»

Обычно тестирование «белого ящика» основано на анализе управляющей структуры программы. Программа считается полностью проверенной, если проведено исчерпывающее тестирование путей ее графа управления. При этом формируются тестовые варианты, в которых [6.2]:

· гарантируется проверка всех независимых маршрутов программы;

· проходятся ветви FALSE, TRUE для всех логических решений;

· выполняются все циклы ( в пределах их границ и диапазонов);

· анализируется правильность внутренних структур данных.

Недостатки:

1) количество независимых маршрутов может быть очень велико, поэтому проверка всех маршрутов в графе сложного программного модуля практически невозможна;

2) исчерпывающее тестирование маршрутов не гарантирует соответствия программы исходным требованиям к ней;

3) в программе могут быть пропущены некоторые маршруты;

4) нельзя обнаружить ошибки, появление которых зависит от обрабатываемых данных (это ошибки, обусловленные выражениями типа if abs (a - b) < eps… и т.д.).

Используютсяразные варианты тестирования «белого ящика»[6.2]:

- способ тестирования базового пути, который позволяет оценить комплексную сложность программы и использовать эту оценку для определения необходимого количества тестовых вариантов. Тестовые варианты гарантируют выполнение каждого оператора программы при тестировании;

- способ тестирования ветвей и операторов отношений, который обеспечивает построение тестовых вариантов для проверки логических условий;

- способ тестирования потоков данных, который обеспечивает анализ информационной структуры программы и проверку работы циклов.

 

6.5.1.2. Особенности функционального тестирования ПО ( методы тестирования «черного ящика»)

Принципы тестирования « черного ящика» [6.2] не являются альтернативой методам «белого ящика», они используются на более поздних ступенях тестирования ПО и обнаруживают другие типы ошибок:

1) некорректные или отсутствующие функции;

2) ошибки интерфейса;

3) ошибки во внутренних структурах данных или в доступе к внешней базе данных;

4) ошибки характеристик, например, необходимая емкость памяти;

5) ошибки инициализации и завершения.

Техника « черного ящика» ориентирована на решение следующих задач:

- сокращение необходимого числа тестовых вариантов (из-за проверки динамических, а не статических аспектов системы);

- выявление классов ошибок, а не отдельных ошибок.

Используютсяследующие способы тестирования «черного ящика»:

- способ разбиения по эквивалентности. В этом способе входная область данных делится на классы эквивалентности. Класс эквивалентности - набор данных с общими свойствами. Для каждого класса данных разрабатывается один тестовый вариант. Классы эквивалентности могут быть определены по спецификации на программу. Тестовый вариант подбирается так, чтобы проверить сразу наибольшее количество свойств класса эквивалентности;

- способ анализа граничных значений. Анализ граничных значений заключается в получении тестовых вариантов, которые анализируют граничные значения;

- способ диаграмм причин-следствий - способ проектирования тестовых вариантов, который обеспечивает формальную запись логических условий и соответствующих действий. Используя автоматный подход к решению задачи, строятся тестовые последовательности, которые проверяют причинно-следственные отношения в программных модулях.