Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

9

Поиск ошибок

Отладка: что делать, когда дела идут плохо

В этой главе:

Откуда берутся ошибки?

Какие бывают ошибки?

Технология отладки: поиск и исправление

Инструменты отладки

Я не терпел поражений. Я просто нашел 10 000 способов, которые не работают.

Томас Эдисон

Недостатки есть у каждого. Кроме меня, по% жалуй. Целый день я должен сидеть и разби% раться со скучными проблемами в чужом ко% де. Наш отдел тестирования обнаружил, что наше программное обеспечение дает сбой, когда выполняет то#то и то#то. Поэтому я копаюсь в системе, нахожу код, в котором программист Федя напортачил три года на% зад, исправляю его, отправляю тестерам, а они обнаруживают новый сбой.

Конечно, сам%то я никогда бы таких элемен% тарных ошибок не сделал. Мой код абсолют% но надежен. Безупречен. Никакого жира и холестерина. Я и строчки не напишу без тщательного планирования, не буду считать оператор готовым, пока не проверю все осо% бые ситуации, и я печатаю так аккуратно, что мне никогда не случалось набрать = вме% сто == в операторе if.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

212m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

Я абсолютно надежен. Без всяких сомнений.

Хотя, может быть, это не совсем так.

Реальные факты

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 9. Поиск ошибокClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Не думаю, что кто%нибудь усаживает студентов%программистов и объ% ясняет им, как устроена жизнь: «Видишь ли сынок, есть птички и пчелки. Ах да, забыл про жучков.» «Жучки», или «баги», – это неиз% менная мрачная сторона создания программ, неизбежная реальность. Печально, но это так. Существуют целые отделы, даже специальности, поставленные на борьбу с ними.

Всем известно, как множатся сбои в выпущенном ПО. Почему ошибки обнаруживаются с такой ужасающей регулярностью и в таких количе% ствах? Это обусловлено человеческой природой. Программы пишутся людьми. Люди ошибаются. Вольно или невольно ошибаются по ряду причин. Ошибаются, потому что недостаточно хорошо разобрались в системе, над которой работают, или неправильно поняли, что им нужно реализовать, но чаще всего делают ошибки по невнимательно% сти. Большинство ошибок делается по глупости. Однажды я встретил% ся с очень простой иллюстрацией этого факта. Сыграйте в такую игру:

Дерево, вырастающее из желудя, называется…

Звук, издаваемый лягушкой, называется…

Пар, поднимающийся над костром, называется…

Белок яйца называется…

Желтком, правильно? А теперь подумайте. Если вы не попались на эту удочку, то, возможно, лишь потому, что были настороже, т. к. я вас пре% дупредил. (Все равно можете засчитать себе очко.) Но кто станет преду% преждать вас всякий раз перед тем, как вы соберетесь написать строку кода с ошибкой? Если бы такой человек существовал, ему следовало бы присудить сразу мешок очков, которых ему хватило бы на всю жизнь.

Все мы, программисты, достойны осуждения за плохое качество про% грамм, которые мы пишем. Мы все виновны. Так и жить с вечным чув% ством вины или можно что%то предпринять? Ответов может быть два. Первый: это не ошибка, а функция. Придумайте объяснение и не об% ращайте внимания. При появлении сбоя отвечаем словами великого философа Барта Симпсона: «Это не я. Кто%нибудь видел, как я это де% лал? Вы все равно ничего не докажете!» (Simpsons 91). Возлагать вину можно на что угодно – на странности компилятора, ошибки ОС, ред% кие климатические явления и своенравность компьютеров. Или, как я отмечал в начале главы, можно обвинять коллег. Хорошо програм% мировать, когда тебе все как с гуся вода.

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