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

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

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

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

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

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

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

Global, Gary $1,666
Many-Loop, Mavis $8,889
Modula, Mildred $10,788
Statement, Sue Switch $4,000
Whileloop, Wendy $7,860
После ввода записи Fruit-Loop, Frita, которая появляется в
неверной позиции, вы вспоминаете, что запись Modula, Mildred
также была введена непосредственно перед отображением
некорректного списка. Что необычно в этих случаях, так это то,
что записи были введены по отдельности. Как правило, данные
вводятся сразу для нескольких сотрудников.
Итак, можно предположить, что проблема как-то связана с вводом
одной новой записи. Если это так, то при следующем запуске
программы запись Fruit-Loop, Frita должна занять правильное
место. Ну-ка, проверим:
Formatting, Fred Freeform $5,877
Fruit-Loop, Frita $5,771
Global, Gary $1,666
Many-Loop, Mavis $8,889
Modula, Mildred $10,788
Statement, Sue Switch $4,000
Whileloop, Wendy $7,860
Правильная сортировка списка соответствует выдвинутой
гипотезе. И все же для ее окончательного подтверждения следует
добавить несколько новых записей по одной за раз и посмотреть,
выводятся ли они в неверном порядке при первом запуске
программы и изменяется ли их порядок при втором.
532 ЧАСТЬ V Усовершенствование кода
Определение источника ошибки
Определение источника ошибки также призывает к использованию
научного метода. Так, вы могли бы заподозрить, что дефект
является результатом конкретной проблемы, такой как ошибка
занижения или завышения на 1. Для проверки этой гипотезы вы
могли бы присвоить параметру, который предположительно
вызывает проблему, значение, равное граничному условию, а
также два значения, отличающихся от граничного условия на 1.
В нашем примере причиной проблемы может быть занижение или
завышение на
1 при добавлении одной новой записи, но не двух или более.
Однако изучение кода не приводит к нахождению очевидной ошибки
занижения или завышения на 1. Тогда вы обращаетесь к плану Б и
добавляете в БД одну новую запись, чтобы увидеть, вызовет ли
это проблему. Вы добавляете запись Hardcase, Henry и пред-
полагаете, что она займет неправильное место. При запуске
программы выводится:
Formatting, Fred Freeform $5,877
Fruit-Loop, Frita $5,771
Global, Gary $1,666
Hardcase, Henry $493
Many-Loop, Mavis $8,889
Modula, Mildred $10,788
Statement, Sue Switch $4,000
Whileloop, Wendy $7,860
Список отсортирован правильно, а значит, первая гипотеза
ошибочна. Добавление одного нового сотрудника не является
причиной проблемы. Проблема имеет или более сложную, или
совсем другую природу.
При более внимательном изучении выходных данных теста можно
заметить, что только записи Fruit-Loop, Frita и Many-Loop,
Mavis включают дефисы. Сразу же после ввода запись Fruit-Loop
занимала неверное положение, но с записью Many-Loop все было в
порядке, ведь так? Хотя распечатки результатов самого первого
запуска программы у вас нет, вы помните, что вас смутило место
записи Modula, Mildred, но она располагалась по' соседству с
Many-Loop. Возможно, ошибочным было положение записи Many-
Loop, а не Modula.
Вы выдвигаете новую гипотезу: причина проблемы связана с
фамилиями, содержащими дефисы, а не с фамилиями, которые
вводятся по одной.
Но как это объясняет тот факт, что проблема возникает только
при вводе записи? Вы изучаете код и замечаете, что в программе
используются два разных метода сортировки: один вызывается при
вводе записи, а второй - при ее сохранении. Более тщательный
анализ первого метода показывает, что он и не должен сорти-
ровать список полностью. Вставляя новую запись, он лишь
приблизительно определяет ее положение для ускорения
сортировки, которую выполняет второй метод. Так что проблема в
том, что данные печатаются до их сортировки. Фамилии,
содержащие дефисы, располагаются в неправильном порядке из-за
того, что метод примерной сортировки не обрабатывает подобные
тонкости. Теперь вы можете выдвинуть еще более точную
гипотезу: фамилии, содержащие знаки пунктуации, правильно
сортируются только во время сохранения.
ГЛАВА 23 Отладка 533
Далее вы подтверждаете эту гипотезу при помощи дополнительных
тестов.
Советы по поиску причин дефектов
После стабилизации ошибки и уточнения вызывающих ее условий
поиск ее может быть как тривиальным, так и трудным: это
зависит от того, насколько хорошо написан код. Если найти
причину дефекта не удается, возможно, это обусловлено низким
качеством кода. Каким бы неприятным ни был такой вывод, ничего
не поделаешь: это правда. В подобной ситуации вам помогут
следующие советы.
Формулируя гипотезу, используйте все имеющиеся данные Выдвигая
гипотезу об источнике дефекта, постарайтесь учесть как можно
больше данных.
В нашем примере вы могли бы обратить внимание на неверное
место записи Fruit- Loop, Frita и предположить, что неверно
сортируются все фамилии, начинающиеся на букву "F". Гипотеза
неудачна: она не объясняет неправильное место записи Modula,
Mildred и правильную сортировку записей при втором запуске
Предыдущая << 1 .. 255 256 257 258 259 260 < 261 > 262 263 264 265 266 267 .. 426 >> Следующая