Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

テストコードについて最近思ったこと

毎月1エントリごときでつらさを感じてるブロガーだけれど文章書くのは嫌いではないので ポエムみたいなエントリをはさみつつ精神を落ち着かせようと思う。

テストコードは実はビジネスサイドにとってこそ重要なものである、という話。 これはうちの会社のCTOが言っていたから改めて気づいたものでもあるのだけれど、 過去にも思い当たる点があったことを思い出した。

テストコードを書く工数だとか、どの機能に対してどの程度のテストの粒度やカバレッジが必要だとか、 そういった話は基本的にエンジニアが主となって議論されることが多いと思われる。 もちろんプロダクトコードの一行一行を知っているのはエンジニアであるし ある機能に対してのテストをどのように実装し適切な検証をするかという点においては、 エンジニアが考え決定することが妥当である。 しかしながら、どの機能に対してどのくらいの工数をかけてどの程度正しさを担保できるように開発のリソースを割くのかは、 プロダクトコードの実装と同様にビジネスサイドの要件によって決められるべきである。 なぜなら、もしそのテストコードがビジネスにとって不要なものであるなれば、求められていないオレオレ機能を実装していることになるからだ。

こんなことを言うと、「俺のテストコードがこんなに無駄なはずがない」だとか、「つべこべ言わずにちゃんとテストコード書けよ」だとか言われかねない。 そんなわけでもう少し具体的な例を挙げると、ソーシャルゲームの開発ではどうだろうか? 当然バグは無い方が良いしそのための正しいテストコードがあるに越したことはないわけだけれど、 そこには、無いのである。テストコードが。そしてそれを書く理由が。

いや、テストコードを書いているソーシャルゲームの開発現場もたくさんあるだろう。 そして書いていない現場もたくさんある。 テストコードがないのはエンジニアのせいだろうか?テストコードを書かないエンジニアは悪だろうか? その答えは最初に戻る。 テストコードは実はビジネスサイドにとってこそ重要なものである からだ。

長い期間をかけて開発した不具合のほとんどないソーシャルゲームが収益を得られずに死を迎えた時、 あるいは期待されたアプリがバグやサーバーダウンで炎上しまくってそれでも復旧後にApp Storeの売上上位に君臨し続ける時、 これらをみてビジネスサイドにとってそのテストコードは本当に必要と言えるのだろうか。 もしひたすらにテストコードを書いているのなら、それはエンジニアのエゴであるかもしれない。

このポエムはテストコードを書いているエンジニアを批判するものでも、テストコードを書いていないエンジニアを擁護するものでもない。 何が言いたいのかというと、テストコードはビジネスサイドにとってこそ重要なものであり、 ビジネスサイドの人間はそれを理解していく必要があるのと同時に、エンジニアもテストコードの必要性について認識をすり合わせ ていかなければならない。

あるシステムにおいてその振る舞いを担保するテストコードが要件に沿って実装されている場合、 それ以外の全て(プロダクトコードなど)を失ったとしても再実装することでビジネスが継続可能であれば、 そのテストコードはビジネスサイドにとって非常に優先度の高い機能である。 逆に一つ一つの機能の細かい振る舞いをテストコードで担保することよりも、プロダクトコードの重要性が高いのであればビジネスサイドの判断によりテストコードを書かないという選択肢もあり得るのだ。 そのビジネスサイドの判断というのは、 プロダクトに新しい仕様の機能を追加実装する時などと同様なコストや実装の優先度を考える必要がある ことを意味している。

冷静になってみるとこのポエムが書かれたのは、過去の自分たちのプロダクトが売れなかった嫉妬なのか、虚しさなのか、それともテストコードを書けなかった言い訳なのか。詫び石はあげないよ。