フレームワークごとの生産性の違いを定量的に計算する方法があったらいいのにな
アーキテクトの重要な仕事の一つに、フレームワークの選択があります。そこで上流の方から毎回必ずと言っていい程求められるのは、選択肢となるフレームワークごとの生産性の違いがどのくらいあるか「定量的に」教えてほしいというものです。たとえば、Strutsの工数を100とした場合、Spring MVCなら70になるというようなことを事を答えとして求めてくるわけです。今、あるプロジェクトの提案書作成の支援をしているのですが、元請のマネージャーから提案書に生産性比較の定量的な評価を載せたいと言われてしまいました。まあ、いつものことですけれどね。
この業界では理科系の発想のできる人は少ないと言われていますが、なぜか数値化や定量化だけは良いことと信じられており、数字なら信じてしまう、(あるいは数字しか信じない)という人が多いようです。もちろん、性能の見積もりにしても、DBの容量見積もりにしても、定量化できる対象であれば、概算であっても見積もりを行うことはエンジニアとして当然の仕事です。しかし、フレームワークの違いによる生産性の比と簡単に言われても、実際に意味のある数値をはじき出すことは極めて難しいと思いますね。
第一、「生産性」が何を意味するのかということをはっきりさせなくてはなりません。単位時間辺りに生産可能なプログラムのステップ数やクラス数を元に定量化したらコピペコードが最大の生産性で、逆にスマートな設計は生産性が低いということになってしまいます。
逆に、実装すべきユースケースを固定した場合に、作成すべきコードや設定ファイルの分量の比から生産性を求めることもできます。この場合、たとえば、Spring MVCならStrutsよりコード量や設定ファイル記述量が70%になりますよということはある程度予測可能です。でも、記述すべきコード量が半分になったから開発期間も半分になるかというとそんな単純な仮定は成り立ちません。つまらない配管コードなら自動生成なども可能ですし、頭をあまり使わなくても記述できるわけですから、頭を使うコードよりも短い時間で作成できます。良いフレームワークを使って残った部分が頭を使うコードであったら、結局そこがボトルネックになってしまい生産性の差はあまりないということにもなってしまいます。
しかし、私の経験上、プロジェクトの生産性は単純にコードを書き下す時間ではなくて、むしろ以下のような要素によって決まることがほとんどであると思います。
- バグを埋め込む確率が低いほど生産性が高い
- バグを埋め込んでから発見するまでの期間が短いほど生産性が高い
- 機能追加や変更に強い設計は修正コストが低いから生産性が高い
このように生産性の違いといった場合、長い目で見たバグ修正や変更のコストの違いもスコープに入れて考慮すべきです。実際、XPのプラクティスにあるような継続的結合とか試験の自動化というのは結局上記のような要素を最適化するものです。ハイスキルのPGは10倍生産性が高いといった場合、最近のプログラミング技術を知らない人は他人より10倍の分量のコードを記述するような超人PGを想像するかもしれませんが、実際はそんなことはないですよね。10倍の差と言っているのは結局いかに無駄なコードを書かないか、それによってバグの発生確率を減らし、無駄な再試験コストをなくし、変更に強い設計にするかということが本質であって、ステップ数とかクラス数といった単純な分量の問題を言っているのではないのです。だから、フレームワークやツールの違いでどうこうという議論はナンセンスであり、結局アーキテクトやPGのスキルによっていかに無駄のないアーキテクチャーや開発環境を構築するかというところが重要になってくるのですし、そのための開発プロセスというものが必要なのです。
結局、開発生産性というのは
- 開発者のスキル
- そもそもの業務の本質的複雑性
- 設定ファイルや配管コードの量(偶発的複雑性)
- 開発環境の快適さ(PCの性能、画面の広さ)
- ガイド類、Wiki、ペアプロによるノウハウの共有
- インターネット接続の有無などによる調査にかかる時間の差
- バグ発生率
- バグ発生から修正までの間隔
- ビルド、デプロイの間隔
などさまざまなパラメーターが非常に複雑に絡み合って決まるものであり、単純な多項式とか初等関数で解析解が簡単にきまるようなものではないと思います。そういう複雑系の世界で演繹的に生産性の違いを求めるというのは原理的に不可能なのではないでしょうか?
もちろん、統計的にどのくらいの差になるかというのを求められなくはないですが、そもそも同じ要件で同じ条件の開発者で複数のフレームワークを使って十分な量の開発を行わなくては統計的に意味のあるサンプルを得ることはできません。
こうした生産性の見積もりの参考になる研究の成果があれば、非常に良いのですが、私が知る限り、フレームワークの違いによる定量的な生産性の差という話で科学的根拠のあるものは聞いたことがありませんね。