Windows 秘話: 指紋を採取する

コードが適切に動作するかどうかの最終的な責任は、コードを最後に変更した人物が負うことになります。

Raymond Chen

ソフトウェア開発には暗黙の了解があります。それは「コードを最後に変更した人物が、そのコードに起因する問題の責任を負うことになる」というものです。コンマの後にスペースを追加したり、ローカル変数の綴りを 1 つ修正しただけでも、編集した人物の痕跡がコードに残ります。何か問題が発生した場合には、コードの管理者がコードを最後に変更した人物に連絡することになるでしょう。

ほとんどのソース管理システムには、ファイルを最後に変更した人物を自動的に特定するツールが用意されています。また、このツールによって、コードを最後に変更した人物の名前が各コード行に注釈として追加されたファイルが生成されます。

プロジェクトによっては、可能な限り変更を加えないようにしている問題のある機能やコンポーネントが存在している場合があります。プロジェクトの関係者は、そのような機能やコンポーネントのコードを変更した痕跡が残ることで、そのコードに起因する多数の問題について追求されることを恐れています。

置き土産

以前、同じチームで働いていた同僚が、「問題の原因を直感的に最後にファイルを変更した人物のせいにする」という固定観念を利用した置き土産を残して行きました。彼は、私たちのチームを去ってマイクロソフトの別のプロジェクトに参加する前の最後の仕事として、何百ものファイルにまたがる変更を加えました。この変更は、すべての重要なコンポーネントのすべてのファイルに関連するものでした。

この大規模な変更に関するコメントには、"ワイド文字の Unicode に変換する" というタイトルが付けられていました。膨大な量の詳細コメントの中で、彼は "プロジェクトの大部分については変換できたが、一部変換できていないところがある" と詫びていました。また、この作業を完了するために、プロジェクト全体で変更する必要があるコードについての説明も含まれていました。それから、直面する可能性のある課題についてもコメントしていました。

コメントを読めば読むほど、彼がどのような狂気に囚われていたのか疑問に思うでしょう。コメントでは、MAX_PATH などの基本的な定数に対する変更や動的に拡張するスタック バッファーを適宜作成するコンパイラの特別な拡張機能 (その他のすべてのローカル変数をシフトして領域が確保されていました) など、コードに対する奇妙な変更について説明されていました。

彼が変更を加えたファイルを実際に確認してみると、いたずらであることが明らかになりました。変更されたとされるファイルでは、何も変更されておらず、コードは 1 行たりとも変更されていませんでした。ファイルは、変更されたように見せかけるため、変更内容に含められていました。

このいたずらは、タイミングが良かったこともあり、かなり長い間効果がありました。この同僚がこのいたずらを仕掛けてからすぐに、プロジェクト管理チームは、リポジトリの各ファイルの最初の連絡先となる開発者を追跡するデータベースを作成することにしました。このデータベースに最初にデータを設定するにあたり、"ファイルを最後に変更した人物" の規則を採用しました。この同僚が重要なコンポーネントのすべてのファイルを変更したのは、つい最近のことだったため、これらの重要なコンポーネントのほとんどすべてのファイルに彼の名前が登録されることになりました。

それ以降、少なくとも 1 年間は、データベースを参照した人物や自動ツールによって、この同僚が変更を加えたファイルで問題が見つかると、この同僚に電子メールが送信されることになりました。彼は、かつて一緒のチームで働いていた同僚に電子メールを転送し、電子メールを確認してもらい、適切な所有者を照会するようにデータベース エントリを更新してもらう必要がありました。彼は置き土産を残したつもりでしたが、その付けを払うことになりました。

Raymond Chen

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史、Win32 プログラミング、および比喩的な意味での駐車場について扱っています。

関連コンテンツ