О Windows из первых рук: Пудра для снятия отпечатков пальцев

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

Реймонд Чен

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

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

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

Пока, пока

Один из моих бывших коллег по работе взял себе за привычку обвинять в проблемах с кодом последнего, кто касался файла, и использовал это в своей прощальной шутке. Перед переходом в команду другого проекта в Microsoft он внес изменение, которое касалось сотен файлов. Он «коснулся» каждого файла в каждом критически важном компоненте.

Это массивное изменение сопровождалось комментарием: «Преобразование в широкие символы Unicode». В подробностях он извинялся, что «не смог преобразовать большую часть проекта, а преобразовал только часть». Его комментарий также содержал объяснение, какой код нужно изменить в проекте, чтобы завершить эту работу. Он также указал на несколько подводных камней, на которые можно было наткнуться при выполнении этой задачи.

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

Суть шутки становилась понятной при анализе измененных им файлов. Все измененные файлы не содержали изменений. Он не изменил ни единой строчки кода. Файлы были в наборе измененных файлов просто шутки ради.

Эта выходка имела продолжительные последствия, в основном из-за неудачно выбранного момента. Вскоре после этой выходки моего коллеги руководство проекта решило создать базу данных, в которой бы отслеживалось, какой разработчик является основным контактом для каждого файла в репозитории. Для начального наполнения базы данных применили правило «последний работавший с кодом». Так как мой коллега внес изменения во все файлы критических компонентов, его имя было указано в качестве контактного для этих файлов.

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

Реймонд Чен

Реймонд Чен (Raymond Chen) — его веб-сайт и одноименная книга «Old New Thing», вышедшая в издательстве Addison-Wesley в 2007 году, рассказывает об истории Windows, программировании с использованием интерфейса Win32 и метафорических парковочных местах.