Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
45
Добавлен:
23.03.2015
Размер:
884 Кб
Скачать

184 Глава 9

ирование и отладка

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

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

2. Тестирование программы с п + 1 значением приводит к обнаружению ошибки.

3. Отладка позволяет внести исправления, после которых программа работает с п + 1 значением правильно.

4. Тестирование продолжается со значения п + 2. Такая последовательность довольно неразумна, поскольку су­ществует немалая вероятность того, что внесенные в программу изменения, заставившие работать ее правильно со значением п + 1, могут в то же время привести к ошибочным результатам для значений с 1 по п. При внесении любых, даже небольших изменений необходимо убедиться в том, что программа по-прежнему правильно выполняет выполнявшиеся ранее тесты. Такой метод называется регрессивным тестированием. Регрессивное тестиро­вание удобно только в тех случаях, когда имеются средства, поз­воляющие без больших затрат перезапустить старые тесты.

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

9.4. Отладка

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

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

_ммы, содержащую ошибку. По мере сбора фактов, подтвер-ающих наличие ошибки, формулируется гипотеза и делается пытка подтвердить ее дальнейшим тестированием. Когда нам кется, что причина ошибки установлена, мы просматриваем утветствующий кусок программы, желая найти ошибку и ис-равить ее. В гл. II рассматриваются способы анализа программ, ^легчающие данный процесс.

Ошибки обязаны своим существованием самому программисту. сегда имейте в виду, что отладка отнимает гораздо больше вре-ени, чем программирование. Задача написания изначально эрректной программы вполне оправданна. Поэтому перед за­пуском программы внимательно просмотрите ее текст и .убедитесь 1 том, что вы хорошо понимаете те действия, которые данная Программа должна выполнять. Независимо от ваших способно-п-ей и усилий вероятность того, что программа сразу же станет работать правильно, достаточно мала. По этой причине вы должны вроектировать, записывать и документировать ваши программы Ьтаким образом, чтобы максимально облегчить процесс тестиро-1вания и отладки. Одним из способов является создание относи-1тельно небольших модулей, которые могут быть проверены неза-1висимо от оставшейся части программы. В большой степени это ряожет быть достигнуто в том случае, если вы будете придержи-1ваться рассмотренных ранее соображений. Создавайте структуры ^данных и связывайте с каждой из них инвариант представления 1с максимальными ограничениями. Для каждой из процедур при-г водите связные и понятные спецификации. В этом случае к мо-1рменту их тестирования вы будете четко знать, каковы должны быть ^входные значения и какой результат должен быть получен в от-lbct на каждое возможное входное значение. 1~ Помимо общей стратегии тестирования необходим также тща-

•_ тельно разработанный план поэтапной отладки. Перед началом

работы 'примите окончательное решение о том, что вы хотите сде-глать и как вы собираетесь это осуществить. Вы должны знать, f каковы должны быть исходные данные и какой результат вы со­бираетесь получить. Если вы не обдумали вопрос о входных дан­ных достаточно тщательно, то весьма вероятно, что вы потратите массу времени на бесполезную работу.

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

-. 1. Начинайте с изучения уже доступных данных.

• ' 2. Сформулируйте гипотезу, которая корректна для таких .Данных.

3. Проведите несколько раз эксперимент, который в состоянии подтвердить гипотезу.

. Рассмотрим программу, принимающую на входе положитель-:ное целое число и возвращающую значение true, если число

Соседние файлы в папке POSIBNIK