ウェブシステムの自動テストの経済性小話

ウェブシステムの自動テストのコスト感覚について書いてみます。 内容は抽象的な概念論で、かつ、ソフトウェアの世界では遠い昔から言われてきたことの繰り返しにすぎません。

次の図は、ウェブシステム開発における自動テストの価値とコストの関係を表しています。 想定としては、テストコンポーネントが含まれたフルスタックのフレームワークを使った開発をイメージしています。

自動テストの価値とコスト

横軸は「追加開発の量」で縦軸は「金額」です。

ここで、「価値」というのは「書かれた自動テストがもたらす手間削減」を、「コスト」は「自動テストを書くための手間増加」を意味しています。 厳密に言うとどちらもコストなのですが、ここでは区別を付けた方が議論しやすいのであえて区別しています。

ポイントは以下のとおりです。

  • 自動テストの価値に最も大きく影響する要因は「追加開発」の量である。全体の開発規模も影響するが、それ以上に「いったん完成したシステムに手を加える」取り組みである追加開発の量の影響が大きい。イメージは、追加開発の量が増える → テストの実施回数が増える → テスト自動化のインパクトが大きくなる。
  • 自動テストの価値は追加開発の量が増えると二次関数的に大きくなる。
  • 自動テストのコストは追加開発の量が増えると直線的に(一次関数的に)大きくなる。
  • 追加開発の量が少ない場合は、コストが価値を上回る。つまり、自動テストよりも手作業でのテストの方が経済的に有利である。
  • 追加開発の量が増えるとどこかで損益分岐点がやってきて、自動テストが手作業でのテストよりも経済的に有利になる。

(私の私的経験に基づく認識では)一般的なウェブサイト制作では複雑なロジックの作り込みが必要になる場合は少ないので、サイトの規模がある程度大きかったとしても追加開発の量が少なければ自動テストの経済的メリットは薄いと言えます。 例えば、クライアントの予算の考え方として「一度サイトを作ったらその後は保守費用以外にお金は出さない」という形はよくありますが、そのような場合は追加開発は一切発生しないためサイトの規模がある程度大きくなっても手作業でのテストで通した方がよい場合が多いでしょう。 ただし、追加開発は一切発生しないと思っていたら担当が変わって後から追加開発が発生したなんてこともあるので、見極めが難しいところです。

また、 TDD (テスト駆動開発)については、「テストを書くコストが非常に少ないとき」にかぎり取りうるオプションだと思います。 TDD 原理主義が貫ける環境はそれはそれでうらやましいと感じますが、例えば、古めの CMS を使う場合はテストを書くコストが大きかったりするので、現実問題「実装してから、テストは手作業で」がよい場合は多いです。

次の図は、フレームワークではなく古めの CMS を使った場合の自動テストの価値・コストのイメージです。

自動テストの価値とコスト

上の図と同じく、横軸は「追加開発の量」、縦軸は「金額」です。

ポイントは以下のとおりです。

  • 古めの CMS の場合、自動テストがスムーズにできる道具が十分に揃っていないので、自動テストのコストが大きい。
  • そのため、フレームワークの場合に比べて、コストの直線が上に移動する(図中 1 )。
  • 結果、損益分岐点は右に移動する。つまり、自動テストの価値がコストを上回るために必要な追加開発の量が大きくなる(図中 2 )。

CMS での自動テストといえば私には Drupal での経験しかありませんが、おそらく 2000 年代の( 2010 年以前に誕生した) CMS であればどの CMS でも状況は共通していて、自動テストを「すばやく」「快適に」できる道具が揃っていない場合が多いのではないかと考えます。

とはいえ、追加開発の量が多くなれば自動テストの価値が大きくなるのは CMS の場合でも同じです。 最初は自動テストを書かずに始めたプロジェクトでも、追加開発が増えてきたときには、自動テストの比率を高めていかないと開発が進むにつれて開発効率(「ベロシティ」)はどんどん遅くなっていきます。

世間一般的には、 CMS ベースでウェブ制作を行う企業はソフトウェアテストの十分な知識・経験を持っていないことが多いので、このあたりは CMS でよくある「初期コストが安いけど、追加開発コストがえらい高い」という現象が発生する一因にもなっています。

ということで、ウェブサイト・ウェブシステムの自動テストの経済分析のお話でした。

さまざまな種類のテストをいっしょくたに語るのは乱暴な気もしますが、「 自動テストのコストは直線的に伸びて、価値は二次関数的に伸びる 」という基本の考え方はわりと普遍性のあるところではないかと思います。

今よりも技術が進んだり私の知識・経験が増えてきたりしたら、「ウェブ開発ではいついかなるときでも自動テストを書くのがいいよ」「ウェブ開発は TDD 無しではありえないでしょ」と言うようになる日が来るかもしれません。 ただ、「ウェブ制作といえば CMS ベースでの開発」な 2018 年時点では、その日はまだまだ遠い先になるだろうなという見通しです。 5 年後ぐらいには変わっているでしょうか。