marble log

Webエンジニアの技術ブログです

「コードは資産ではなく負債」である

単体テストの考え方/使い方」と「Googleのソフトウェアエンジニアリング」にコードは負債であると明言されており、印象に残った。それぞれの本の文脈とともに残しておく。

単体テストの考え方/使い方

単体テストの考え方/使い方には、1.2.1 なぜ、単体テストを行うのか?のコラムに「コードは資産ではなく負債」と太字で強調されている。

コラムはテストコードがもたらすコストについて、「エンジニアのなかには、プロダクトコードと異なりテストコードは所有するコストが低いと考える人がいるが、それは誤りである」と言及している。テストコードもプロダクトコードと同様に保守が必要であり、最低限に保つに越したことはない。不必要なテストケースを削減する大きなモチベーションだ。

Googleのソフトウェアエンジニアリング

Googleのソフトウェアエンジニアリングにも、9.1 コードレビューのフローに「コードとは債務である」というコラムが掲載されている。この本にはGoogle培ったソフトウェアエンジニアリングの知見や哲学が、文化、プロセス、ツールの観点からまとめられている。9章はコードレビューについて書かれていて、「コードとは債務である」というコラムはこれに含まれる。

コラムは特にコードの重複がもたらすコストについて言及している。「Google規模のコードベース内なら、これから実装しようとするコードをきっと誰かがすでに実装しているはずであり、コードの重複を見つけコードベースへの混入を防ぐことが望ましい」という。Googleにはこれらを検出するツールもあると後の章で紹介されている。 このコラムはコードレビューの文脈で語られているため、ここではコードだけでなく、レビューの重複も問題視していると考えられる。レビューも工数に含め、工数最適化の対象にする点は勉強になる。

ただしGoogleはコードベースが超大規模という特殊な事情がある上に、むやみに重複を消すとかえって依存関係の問題をもたらす可能性もあるため、鵜呑みにすることは避けたい。

事業にとって資産になり得るのはコードではなくプロダクト

コード(負債)は存在するだけで保守作業(利子)が発生する。同じ振る舞いを実現する2つのコードがあるのであれば、少ない方がよい(もちろん可読性は高ければならない)。

事業にとって資産になり得るのはコードではなくプロダクトである ― コードをビルドし、デプロイし稼働させたプロダクトであり、プロダクトが利益をもたらす。借り入れを少なくし、利益を生み出すように心がけたい。