Методы тестирования программ

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

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

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

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

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

Методологии тестирования представлены ниже.

Черный ящик

Белый ящик

Эквивалентное разбиение

Анализ граничных значений

Применение функциональных диаграмм

Предположение об ошибке

Покрытие операторов

Покрытие решений

Покрытие условий

Покрытие решений/условий

Комбинаторное покрытие условий

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

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

Предлагаю ознакомиться с аналогичными статьями: