Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.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

 

 

 

 

 

501Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Когда же настанет совершенное, тогда то, что отчасти, прекратится.

1 Коринфянам 13:10

Мы пока не рассматривали вопрос о том, какой код может пройти ре% цензирование, а какой может провалиться. В задачи данной главы не входит описание того, каким должен быть хороший код, – важные сто% роны высококачественного кода описаны в первых 15 главах книги. Когда мы ищем в коде недостатки и ошибки, постоянно возникает ряд вопросов. Рецензируемый код должен быть:

Свободен от ошибок

Ошибки – это наш враг и бич разработки хороших программ. Нам нужна уверенность в качестве результатов своего труда, и ошибки должны быть выявлены на возможно раннем этапе разработки. Чем раньше мы станем их искать, тем раньше обнаружим и испра% вим, и тем меньше убытков и неприятностей они нам причинят (см. врезку «Экономика ошибок» на стр. 216).

Корректен

Код должен отвечать всем действующим стандартам и требовани% ям. Проверьте правильность типов всех переменных (например, чтобы не возникло числового переполнения). Комментарии долж% ны быть точными. Код должен соответствовать требованиям к па% мяти и производительности (особенно важно для встроенных плат% форм). Проверьте правильность параметров функций и обращений к библиотекам.

Код должен быть проверен на соответствие спецификациям требова% ний и функциональности. Считается, что спецификации были со% ставлены корректно, если же нет – задача значительно осложняется! Иногда комментарии в рецензии на код касаются спецификаций (например, если они не вполне понятны), но это не входит в задачи рецензирования – не отвлекайтесь на дискуссии относительно пра% вильности спецификаций; секретарь должен зафиксировать про% блему в протоколе, и рецензирование должно быть продолжено.

Полон

Код должен полностью реализовывать функциональную специфика% цию. Он должен быть удовлетворительным образом интегрирован и отлажен и пройти все тесты. Комплект тестов должен быть полным.

Хорошо структурирован

Убедитесь, что реализация разумно спроектирована, код легко по% нять, дублирования и избыточности в коде нет. Проверьте, напри% мер, что нет бросающихся в глаза образцов программирования пу# тем копирования и вставки.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

502m

 

 

 

 

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

 

 

 

 

 

Глава 20. Рецензия на отстрелClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Предсказуем

В коде не должно быть чрезмерной сложности и неожиданных сюр% призов. Код не должен модифицировать себя сам, не должен основы% ваться на неопределенных начальных значениях и не должен вызы% вать подозрений в возможности бесконечных циклов или рекурсий.

Надежен

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

Контролирует ошибки

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

Легок в сопровождении

Программист разумно применяет комментарии. Код хранится в сис% теме управления версиями. Имеются необходимые данные о конфи% гурации. Форматирование кода отвечает внутрифирменным стан% дартам. Код успешно компилируется без вывода многочисленных предупредительных сообщений.

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

За пределами рецензирования кода

Процесс рецензирования – важный элемент выпуска любого продукта высокого качества, поэтому его применение не ограничивается разра% боткой исходного кода. Аналогичная процедура рецензирования при% меняется при создании спецификаций, перечней требований и т. п.

Резюме

Проще критиковать, чем не ошибаться самому.

Бенджамен Дизраэли

Рецензирование кода – важная часть процедуры разработки программ% ного обеспечения, которая помогает обеспечить высокое качество кода. Подобно тому как подмастерье осваивает ремесло благодаря передавае%

 

 

 

 

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

 

 

 

 

 

503Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Пишите код в расчете на рецензирование. Помните, что читать его бу% дете не только вы сами; другие люди должны иметь возможность его сопровождать. Автор всегда отвечает за качество своей работы. Хоро% ший программист более заботится о создании отличного кода, чем об удовлетворении своего чувства гордости.

Хорошие программисты…

Плохие программисты…

Стремятся к рецензирова% Боятся рецензирования своего кода

нию своего кода, будучи уверены в его качестве

Прислушиваются к мне% нию других и извлекают из него уроки

Способны деликатно и точ% но прокомментировать чу% жой код

и чужих оценок

Плохо воспринимают критику: зани% мают оборонительную позицию и лег% ко обижаются

Пользуются рецензированием для демонстрации своего превосходства над менее способными программи% стами; их комментарии излишне рез% ки и неконструктивны

См. также

Главы с 1 по 15

Во всех начальных главах книги описываются разные аспекты пра% вильно написанного кода.

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

Описание типов ошибок, которые могут встретиться в коде.