Rails勉強会@東京 第30回の懇親会の席で話していて、 id:takahashim さんがハッとすることを言った。バグバグなコードは負債であると。

バグバグなコードは、それだけでメンテに定常的な出費を産む。書き直せばそのコストはいらないのに。バグバグなコードはあらゆる危険性を産む。なまじモノがあるだけについコードを無条件に資産と見なしてしまいがちだが、実は怪しいコードは負債であると。

そして、でっち上げのコードが必要な場合も確かに存在するのだ、とも。「無借金経営だけが経営じゃない」そうだ。なるほどね。

ここで、自動化されたテストケースが存在しないことをもって負債と見なす、と基準を定めよう。テスト可能性が担保されていればそのコードはそれなりに安全であるわけだし、差し換えもローコストなわけなので。「レガシーコード = テストが存在しないコード」という定義は『 Working Effectively with Legacy Code 』による。

するってーと、レガシーコードを書くのは経営判断ってことになるよな。実は以前、「リリース予定のコードをテストケースなしで書くには部長の決済が必要」って仕組みを運用したことがある。試行錯誤段階の「研究、試験実装コード」はテストは要らないけど、リリースするつもりで書くなら必ずテストを書けよ、と。どうしても必要なときに、部長を説得できるなら書類で申請した上でレガシーコードを書いても良いよ、と。

この仕組みは「面倒だからテストを書かない」に対する心理的対抗策として「テストを書かない方が面倒」な制度を作るのが目的だった。でも、経営っていう観点からもこれは正しかったことになるかな。経理担当者が勝手に会社の名前で借金するなよ、ってことで。

いっそのこと、これは就業規則に盛り込むべきかもしれない。「許可なくレガシーコードを書いた場合は懲戒解雇とする。退職金は支払われない」とか。