Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 256 257 258 259 260 261 < 262 > 263 264 265 266 267 268 .. 426 >> Следующая

программы. Если данные не соответствуют гипотезе, не
игнорируйте их - подумайте, почему они ей не соответствуют, и
сформулируйте новую гипотезу
Вторая наша гипотеза, согласно которой причина проблемы
связана с фамилиями, содержащими дефисы, а не с вводом фамилий
по одной, также первоначально не объясняла правильную
сортировку фамилий при повторном выполнении программы. Однако
она привела нас к более точной гипотезе, оказавшейся верной.
Если первая гипотеза не объясняет все данные, ничего страшного
- улучшайте ее, пока не достигнете этой цели.
Детализируйте тесты, приводящие к ошибке Если вы не можете
найти источник ошибки, попробуйте уточнить уже имеющиеся
тесты. Возможно, изменение какого-нибудь из параметров в более
широком диапазоне или концентрация на одном из параметров
позволит сдвинуть отладку с мертвой точки.
Проверяйте код при помощи блочных тестов Как пра- Перекрестная
ссылка Среды
вило, в небольших фрагментах кода дефекты искать легче,
блочного тестирования
упоми-
чем в крупных интегрированных программах. Используй- н&отся в
подразделе "8страи~
те для изолированного тестирования фрагментов кода блоч- 8айте
6лочны(r)тесты 0
^ тестирования" раздела 22.4.
ные тесты.
Используйте разные инструменты На рынке имеются многочисленные
инструменты, облегчающие отладку: интерактивные отладчики,
строгие компиляторы, инструменты проверки памяти, утилиты
проверки синтаксиса и т. д. Правильный инструмент способен
сделать трудную работу простой. Мне вспоминается случай, когда
одна неуловимая ошибка заставляла одну часть программы
перезаписывать память другой части. Традиционные методики
отладки не помогли в поисках ошибки: программист не мог
определить, какой именно фрагмент перезаписывал память. Тогда
он установил точку прерывания на конкретный адрес памяти.
Когда программа выполнила запись по этому адресу, отладчик
прервал ее выполнение, и виновный код был обнаружен.
Это пример проблемы, которую трудно диагностировать
аналитически, но довольно легко с помощью правильного
инструмента.
Воспроизведите ошибку несколькими способами Иногда полезную
информацию можно получить, выполнив тест, похожий на тесты,
приводящие к ошиб-
534
ЧАСТЬ V Усовершенствование кода
ке, но не идентичный им. Можете рассматривать этот подход как
триангулирование дефекта. Воспроизведя дефект несколькими
способами, вы точнее определите его источник.
Воспроизведение ошибки разными способами помогает
диагностировать причину ошибки (рис. 23-1). Как только вы
решили, что причина дефекта ясна, выполните тест, который сам
не должен вызывать ошибку, но напоминает тесты, приводящие к
ошибке. Если ошибка при этом все же возникает, значит, вы еще
не полностью поняли проблему. Причиной ошибки часто становится
комбинация факторов, поэтому попытка диагностировать проблему
при помощи только одного теста часто не приводит к обнаружению
корня проблемы.
Программа

Программа





Последующие тесты
Третий тест
Рис. 23-1. Чтобы точно определить причину ошибки, попробуйте
воспроизвести ошибку разными способами
Генерируйте больше данных для формулирования большего числа
гипотез
Выберите тесты, отличающиеся от тестов, результаты которых уже
известны. Выполните их, чтобы получить дополнительные данные и
использовать их для выдвижения дополнительных гипотез.
Используйте результаты отрицательных тестов Предположим, что
вы выдвинули гипотезу и запустили тест с целью ее
подтверждения. Допустим далее, что тест опроверг гипотезу, так
что причина ошибки все еще неизвестна. И все же вы узнали
нечто полезное: одно из ваших предположений о причинах дефекта
ошибочно. Это сужает область поиска и уменьшает число
оставшихся гипотез.
Используйте "мозговой штурм" для построения нескольких гипотез
Не
останавливайтесь на первой пришедшей в голову гипотезе, а
попробуйте выдвинуть несколько гипотез. Не анализируйте их
сразу - просто придумайте за несколько минут максимальное
число гипотез. Затем рассмотрите их по очереди и подумайте о
тестах, которые могут их доказать или опровергнуть. Это
упражнение помогает сдвинуть отладку с мертвой точки,
обусловленной слишком сильной концентрацией на одной линии
рассуждения.
Составьте список подходов, которые стоит попробовать Иногда
программисты не могут найти ошибку по той причине, что слишком
долго следовали по пути, ведущему в тупик. Составьте список
подходов, которые стоит попробовать, и, если один из них не
работает, переходите к следующему.
ГЛАВА 23 Отладка 535
Сократите подозрительную область кода Вместо тестирования всей
программы, всего класса или метода протестируйте сначала
меньший фрагмент кода. Используйте для нахождения ошибочного
фрагмента команды печати, запись информации в журнал или
трассировку.
Есть и более эффективный способ сужения подозрительной области
кода: систематически удаляйте части программы и смотрите,
возникает ли ошибка. Если ошибка исчезла, ищите ее в удаленной
Предыдущая << 1 .. 256 257 258 259 260 261 < 262 > 263 264 265 266 267 268 .. 426 >> Следующая