Проектирование теста

Результаты психологических исследований, обсуждавшиеся в п. 6.2, показывают, что наибольшее внимание при тестировании программ уделяется проектированию или созданию эффективных тестов. Это связано с невозможностью «полного» тестирования программы, т.е. тест для любой программы будет обязательно неполным (иными словами, тестирование не может гарантировать отсутствия всех ошибок). Стратегия проектирования заключается в том, чтобы попытаться уменьшить эту «неполноту» настолько, насколько это возможно.

Если ввести ограничения на время, стоимость, машинное время и т.п., то ключевым вопросом тестирования становится сле­дую­щий:

Какое подмножество всех возможных тестов имеет наивысшую вероятность обнаружения большинства ошибок?

Изучение методологий проектирования тестов дает ответ на этот вопрос.

По-ви­ди­мо­му, наихудшей из всех методологий является тестирование со случайными входными значениями (стохастическое) — процесс тестирования программы путем случайного выбора некоторого подмножества из всех возможных входных величин. В терминах вероятности обнаружения большинства ошибок случайно выбранный набор тестов имеет малую вероятность быть оптимальным или близким к оп­ти­маль­но­му подмножеством. В настоящем разделе рассматривается несколько подходов, которые позволяют более разумно выбирать тестовые данные. В п. 6.2 бы­ло показано, что исчерпывающее тестирование по принципу черного или белого ящика в общем случае невозможно. Однако при этом отмечалось, что приемлемая стратегия тестирования может обладать элементами обоих подходов. Таковой является стратегия, излагаемая в этом разделе. Можно разработать довольно полный тест, используя определенную методологию проектирования, основанную на принципе черного ящика, а затем дополнить его проверкой логики программы (т.е. с привлечением методов белого ящика).

Методологии, обсуждаемые в настоящем разделе, представлены ниже:

Черный ящик Эквивалентное разбиение Анализ граничных значений Применение функциональных диаграмм Предположение об ошибке Белый ящик Покрытие операторов Покрытие решений Покрытие условий Покрытие решений/условий Комбинаторное покрытие условий

Хотя перечисленные методы будут рассматриваться здесь по отдельности, при проектировании эффективного теста программы рекомендуется использовать если не все эти, то, по крайней мере, большинство из них, так как каждый из них имеет определенные достоинства и недостатки (например, возможность обнаруживать и пропускать различные типы ошибок). Правда, эти методы весьма трудоемки, поэтому некоторые специалисты, ознакомившись с ними, могут не согласиться с данной рекомендацией. Однако следует представлять себе, что тестирование программы — чрезвычайно сложная задача. Для иллюстрации этого приведем известное изречение: «Если вы думаете, что разработка и кодирование программы — вещь трудная, то вы еще ничего не видели».

Рекомендуемая процедура заключается в том, чтобы разрабатывать тесты, используя методы черного ящика, а затем как необходимое условие — дополнительные тесты, используя методы белого ящика. Методы белого ящика, получившие более широкое распространение, обсуждаются первыми.