Проектирование программного обеспечения. Николаев С.В. - 120 стр.

UptoLike

Составители: 

120
Отсюда становится очевидной нетривиальность этапа тестирования, о чем
свидетельствует также тот факт, что даже коммерческие программы, выпус-
каемые солидными фирмами и прошедшие весьма изощренные процедуры
тестирования отнюдь не свободны от разного рода ошибок, причем фирмы
изготовители обычно не скупятся на благодарности и вознаграждение тем,
кому удается найти ошибки в готовом
программном продукте.
Можно предложить некоторые общие рекомендации, позволяющие повы-
сить эффективность тестирования.
1. О тестировании нужно думать еще на этапе программирования, а
еще лучше на этапе проектирования. Именно удобство последующего тес-
тирования может служить одним из основных критериев при разбиении про-
граммы на функциональные модули. Следует отметить, что ,как правило,
разбиение
на модули по признаку функциональной законченности одновре-
менно обеспечивает условия для эффективного их тестирования, так как при
этом уменьшается число внешних связей (обменов) и легче всего прогнози-
руются "правильные результаты".
2. Объем тестирования нужно разумно ограничивать. Абсолютное
тестирование в принципе возможно: это полный перебор всех возможных
комбинаций входных данных и параметров
окружения. Однако даже для
простых фрагментов программы полный набор тестов дает астрономическое
число комбинаций. Это связано с тем, что количество тестов есть комбина-
торное число от значений параметров, порождающих разнообразие ситуаций.
Однако, довольно часто при разумном расчленении процесса тестирования на
законченные фрагменты, удается уйти от "дурной комбинаторики" и весьма
существенно
сократить объем перебора. Рассмотрим простые примеры, кото-
рые хорошо иллюстрируют масштабы такой комбинаторной сложности тес-
тирования.
Пример 1. (сложность тестов по данным) Рассмотрим простой функцио-
нальный блок (Рис. 3.2323), который имеет два числовых входа x, y и один
выход z (это может быть операция арифметического перемножения двух
чисел, или что-нибудь в этом роде). Пусть x, y, z -
это 32-разрядные
двоичные числа. Тогда для полного тестирования нужно подать на вход 2
64
числовых комбинаций. Чтобы почувствовать масштаб этой величины пред-
положим, что для прогона одного теста требуется всего 1 микросекунда (10
6
с). Прогон всех тестов тогда потребует более 500 тыс. лет непрерывной ра-
боты. Ясно, что никаких перспектив дождаться результатов такого тестиро-
вания нет.