4.0 第4部序論:コードと品質の指標
第2部と第3部は、仕事がどう動くか、そしてそれを生み出す人々がどうしているかを測定しました。このパートは成果物そのもの、つまりコードへと向かい、ある指標がその品質について何を教えてくれて何を教えてくれないかを扱います。コードの品質指標は、本書のどの指標の家系よりも長い歴史を持ち、サイクロマティック複雑度は1976年にさかのぼります。そしてそれに合わせて最も長い誤用の歴史も持っています。このパートはその歴史を真剣に扱います。各トピックは本物に有用な信号を、それが目標になった瞬間にその信号がどう操作されるかという具体的でよく文書化された方法と並べて名指しします。
これら六つのトピックをつなぐ一貫した筋は、単一のコード指標がそれだけで品質を捉えることはなく、最も人気のあるもののいくつかは孤立して追求されると積極的に誤解を招くということです。高いテストカバレッジの割合は、意味のあることを何も検証しないテストと共存できます。低い複雑さのスコアは、技術的には単純だが概念的に首尾一貫しないコードと共存できます。このパートの各トピックは、それぞれの見出しとなる指標を、その具体的な死角を捉える補完的なチェックと対にします。保守可能性の文脈を伴う複雑さ、ミューテーションテストを伴うカバレッジ、ホットスポット分析を伴うチャーン、人間の判断を伴う静的解析、そして永遠に成長し続ける愛されないバックログではなく優先順位づけられた是正を伴う技術的負債です。
大規模なチームにとって、コードと品質の指標は、どの一人の頭の中にも収まらないほど大きなコードベースを管理することを可能にするものです。5人のチームは、システムのどの部分が脆いかについての共有された暗黙知に頼ることができます。数十のサービスにまたがる500人のエンジニアの組織は、その脆さを体系的に見つけるために計装された信号を必要とします。しばしば数年ではなく数十年で測られるコードベースを抱える企業や政府の組織は、限られた保守投資がどこで最も良い効果をもたらすかを優先順位づけるために、このパートの指標に依存しています。
本パートの各トピック
- 4.1 コードの複雑さの指標: サイクロマティック複雑度とその親戚、それらが実際に何を予測するか、そしてそのよく文書化された操作のリスク。
- 4.2 テストカバレッジとテストの有効性: なぜカバレッジの割合だけでは見かけよりも少ないことしか教えてくれないのか、そしてミューテーションテストがどうその隙間を埋めるか。
- 4.3 コードチャーンとホットスポット分析: コードベースの不均衡な割合の欠陥と保守コストの原因となっている、具体的で小さな部分を見つけること。
- 4.4 静的解析とコードの臭いの指標: 自動化されたコード品質の信号、その本物の価値、そして人間の判断に対するその限界。
- 4.5 技術的負債の測定: 見えず非公式にしか議論されない負債を、可視化され優先順位づけられ、管理可能なポートフォリオに変えること。
- 4.6 文書化と知識の指標: 文書化が単に存在するかどうかではなく、実際に役立っているかを測定すること。
各トピックのつながり
これら六つのトピックは、コードの最も小さな単位から外側へと積み上がります。トピック4.1は単一の関数やメソッドのレベルから始まり、トピック4.2はテストがその単位の振る舞いを実際に検証しているかを問い、トピック4.3はコードベース全体にわたってどのファイルやモジュールが最初に注意を払う価値があるかを見つけるために視野を広げ、トピック4.4はそのすべてを継続的に走査する自動化されたツールの層を加え、トピック4.5はこれら四つから蓄積された発見を、散漫で対処されない心配ではなく、管理され優先順位づけられたバックログに変え、トピック4.6は、これらすべてを安全に維持するために必要な知識が実際に文書化され発見可能かどうかを測定することでこのパートを締めくくります。
このパートは第2部の安定性指標に直接つながっています。変更失敗率(トピック2.10)は、大部分において、このパートが上流で測定するコードの品質の下流の結果です。また、第5部の製品指標にも前方につながっています。なぜなら、流出欠陥(トピック5.1)は、このパートがそれらが本番にまったく到達する前に表面化させるように作られている、まさに複雑さのホットスポットとカバレッジの隙間にしばしばたどれるからです。