Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестирование программного обеспечения. Фундамен...docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
936 Кб
Скачать
☆

Глава 2: Желаемое и действительное в жизни тестировщика

45

каждый возможный путь ее выполнения. Любой пропущенный вами путь останется потенциальным источником проблем.

Для серьезного тестирования путей выполнения программы необходи­мо проанализировать ее листинг. Не заглянув в код, вы не получите реаль­ного представления о ходе ее работы. Сколько бы вы ни работали с программой извне, всегда останется вероятность пропустить огромные фрагменты кода, которые останутся ни разу не выполненными просто потому, что вы даже не подозреваете об их существовании и не знаете, в какой ситуации они выполняются.

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

Если вы полагаете, что можете полностью протестировать программу один раз — прекрасно. Но что вы думаете о возможности повторения этой процедуры десять раз? Двадцать?

Тридцать ?

Невозможно выявить все ошибки проектирования

Программа соответствует спецификации, если она в точности делает то, что указано в спецификации, и больше ничего. Некоторые люди полагают, что если программа соответствует спецификации, значит она правильная. Но что, если в спецификации сказано, что 2 + 2 должно равняться 5? Что будет для программы ошибкой — точное соответствие неверной специфи­кации или отклонение от нее?

Как и все остальные произведения рук человеческих, спецификации часто содержат ошибки. Одни из них случайны (2 + 2 = 5), другие же являются результатами заблуждений проектировщиков. Именно с ошибка­ми проектирования связаны очень многие недостатки пользовательского интерфейса. Но ошибка есть ошибка — и пользователю все равно, на ка­кой стадии разработки она допущена. Поэтому, если программа разработа­на по неверной спецификации, мы говорим, что она неверна.

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

46 Часть I: Основы

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

Основой работы компьютера является логика. Программы пишутся на очень точных языках. Проанализировав логику программы, можно опреде­лить ее состояние в любой точке кода и в любой момент времени.

Конечно, сразу встанут проблемы времени и количества всевозможных условий. Но даже если их не учитывать — что именно можно проверить, анализируя программный код? Только соответствие программы специфи­кации, но никак не правильность самой спецификации.

И еще одно. Доказательства — они ведь тоже строятся человеком, а значит, могут содержать ошибки и упущения. Где гарантия, что логика того, кто анализирует программу, точнее логики ее автора?

Итак, мы описали уже целый ряд проблем. На самом деле их еще боль­ше. Времени всегда слишком мало, а необходимой работы — слишком много.

Если вопрос выполнимости полного тестирования вас заинтересовал, обратитесь к работам Бейзера (Beizer, 1984) и Данна (Dunn, 1984).

Цель тестировщика — проверка правильности программы?

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

• Это определение бессмысленно: невозможно так проверить програм­му, чтобы сделать заключение, что она работает правильно.

• Кроме того, оно ошибочно', программа не работает абсолютно пра­вильно.

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

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

Давайте по очереди разберемся с каждым из этих утверждений.

Невозможно проверить, что программа работает правильно

Как мы с вами уже выяснили, невозможно полностью протестировать ни одну программу (если только она не абсолютно элементарна). Отсюда