品質を測定するとは?
技術的負債、という言葉を知っていますか? 技術的負債とは、“何らかの理由により、必ずしも最善とは言えないが、実現が容易な手法を選択した結果生じる、将来の追加コスト” のことです。コード品質の世界にも技術的負債はあります。例を挙げれば、“納期に追われて安易にコードをコピペしちゃう”、とかですね。その場は切り抜けられるかもしれませんが、そのコピペに関連する様々な不具合を将来にわたって負債として引き受けることになります。
さて、この負債。負ってしまったらどうしましょう? 真面目な方はすぐ返済したくなるかもしれませんが、負債の大きさが許容範囲内であれば、とりあえず利息だけ払って借り続けるという選択もありえます。コード品質の負債も、無理にコードを直して返済しない方がよいことがあります。コードを直すのにも費用がかかるので、開発予算や開発スコープなどと天秤にかけると、そのままにして将来にわたって注意を払うだけ(これが利息です)にする方がよいこともありえます。
技術的負債を返済するにせよ借り続けるにせよ、行き当たりばったりはいけません。どちらにするか、意識的に「制御」しなくてはなりません。「測定できないものは制御できない」よく引用される名言です。私も何度もこの言葉を聞く機会がありました。企業戦略論の大家、ピーター・ドラッカーがそのように述べたというのが通説になっていますが、どうも出自ははっきりしないようです(Who said "You can't manage what you can't measure"?)。
ソフトウェア工学分野で有名なトム・デマルコも、同様の発言をしたとして引用されることが多いようです。もっともデマルコは2009年に「“測定できないものは制御できない”は誤りだった」と述べているそうですが(An Idea whose Time Has Come and Gone?)。
コード品質についての技術的負債も制御が必要[1]です。制御するにはコード品質を「測定」しなければなりません。現在のプロジェクトのコード品質に対し、今すぐ改善の手を打つべきか、あるいは現状をキープし他のことを優先するのか、その決断の拠り所がメンバーの肌感覚というのでは、なんとも心許ないと思いませんか。特に組織の中で開発している場合、チームとしての決断を周囲に承認してもらうためにも、品質を定量的に測定することが必須となってきます。
[1] 最新の研究では、全米で低品質ソフトウェアのコスト(Cost of Poor Software Quality)は2020年から2022年の2年間で16%増加し、313兆円(2.41 Tririon USD)と試算されています(米国における低品質ソフトウェアのコスト)。問題となっているもので影響の大きいものとしては、以下が挙げられています。
- 既存ソフトウェアの脆弱性に起因するサイバー犯罪の被害額の急増
- 基盤となるサードパーティ・コンポーネント(特にオープンソース・ソフトウェア)に関するソフトウェア・サプライチェーン問題の増加
- 既存のコードベースに変更を加える際に障害となる、技術的負債の増大
このうち3つ目の技術的負債が、試算された「低品質ソフトウェアのコスト」の半分以上を占めています。これだけ大きなコストになっているのですから、測定せずに見て見ぬ振りはできません。