ソフトウェア開発に統計学的手法は適用可能か

私はタイトルのようなことを数年にわたり悩んでいるが、答えは出ない。ただ、少なくとも現時点ではソフトウェア開発プロセスに統計学的手法を適用することは可能かもしれないが全く効果的ではないように思える。

統計学的手法の適用

たとえば、下記。

ソフトウェア開発における統計的プロジェクト管理手法の導入と実践

富士フイルムの論文。管理図を使ってプロセスの異常を見つけるような手法が紹介されている。定期的に行われる会議での不具合発見回数をプロットし、3σを管理限界と規定してそれを超える状態であれば異常であると判断する。また、各開発ステージと、ステージごとの不具合対応工数から不具合修正時間の予測を行うような手法が紹介されている。

適当にググると他にもいくつかの情報が出てくるが、まあ大体同じようなことを各社やっているようだ。

統計的品質管理手法の開発(住友電工)

わが社でも毎期数多のプロジェクトで同じようなことをやっているが、効果があると思っている人は一人もいない。トップダウンでやれと言われているからやっているだけである。私も懐疑的ではあったが、本気で取り組まないと正当な評価ができないと考え毎度バカ正直にやっている。が、目に見えた効果は表れなかった。

最大の疑問

私が毎回疑問に思うのは、まったく性格の異なるプロジェクトを寄せ集めてそこからパラメータをひねり出したところで、それらを正しく比較できるのか?ということである。たとえば、自社製のパッケージソフトやWordpressか何かをベースにカスタマイズして納入するようなプロジェクトが大量にある場合なら比較することにある程度意味があると思う。それは、業務の流れがかなり定型化されているからである。

しかしながら、毎回ゼロベースで新しいシステムを作り上げることを行っているSIerなんかはそれぞれのプロジェクトにほとんど共通点が無いだろう。その様な状態で十分なサンプルが取れるとは言い難い。そういう状態であっても、一応検定してp値を求めれば統計上は「有意である」と言える程度の値が出てしまうのだが、実運用上、本当に意味があるとは思えない。

私が思うにそういうそれぞれのプロジェクトに共通点が少ないようなソフトウェア開発プロジェクトのプロセスは(客先までを含めた)開発メンバーに大きく依存すると思う。客先担当者の解決したい問題点が明確であり、かつ、担当者自身がこれから開発するシステムに十分な理解があり、また、開発メンバーが優秀な少数の人員で構成されており、適切な手法を用いることができ、かつ、適当な納期、予算が与えられていればそのプロジェクトは成功する気がする。

しかし、客先担当者が何でもかんでも機能を入れ込みたがったり、プロジェクトマネージャがそれをハイハイ聞き入れたり、コーダーがバカで何でもかんでも力技で実装したりとかいうプロジェクトだと、組み合わせ試験以降に未実装やらバグやらが山積みになってリリースが遅れて客先が大変ご立腹、実装担当の上司も特にマネジメントしてなかったくせにその時点になってご立腹、とにかく偉い人は怒れば問題が解決すると思っているので、飲食店で料理が出てくるのが遅いことに対して文句を述べるのと同じノリで怒る、怒る、怒りまくる、そうすると精神を病んで心療内科にメンバーが殺到、うつ病の錦の御旗を振りかざしてごたごた文句を言うやつも出てきたりしてするとまたこれ、精神病への偏見が広がってさらによろしくない、SIerやプログラマはブラックという噂が流れる、という誰も得しない結果になりがちである。

あるプロジェクトがうまく行くかどうか、それは先に述べたようにそれぞれがソフトウェア開発で正しいとされるベストプラクティスに基づいて行動しているか否かが最も重要だと私は思う。そのためにはそれぞれのメンバーにソフトウェア開発やプロジェクト管理の十分で正しい知識と経験が必要だ。

以上のことをざっくばらんに言えば、バカが集まったところでまともなシステムなど作れるはずがない。優秀な技術者が集ったらまともなシステムが出来るということである。この文章だけ抜き出したら暴論だが、しかし、簡潔に説明するとしたらそうとしか言えないと私は思う。

冒頭で述べたような統計学的分析手法はその、プロジェクトメンバーの経験やスキルといった最も重要な要素がモデルに組み込まれていないと私は思うのである。つまり、こうした統計学的な手法では暗にあらゆるプロジェクトで開発メンバーのスキル、経験に偏りがないと仮定していると思う。だから、統計分析をしてもプロジェクトの傾向は理解できるだろうが、成果物の出来の良しあしを左右する決定的なパラメータは見えてこないのではないか?と思うのである。

当たり前のはずの統計分析

以上は実際に統計的手法がソフトウェア開発で役に立たないと主張しているわけではない。実際はソフトウェア開発プロセスへ統計的手法を適用してうまく行ったとか、SixSigmaを適用すると良いよとか教科書(PMBOKとかCMMにもあったと思う)に書いていたりする。それを信用するならば世の中一般ではそうなのだろう。だから、私は具体的にどうやってやってるの?本当に効果があるの?という疑問が生まれる。

その疑問を解決するため、機会があるたび聞いて回っているがいまだに答えは出て居ない。インドに行った時も、インド人なら数学とITに強いから分かるだろうと思って何度か聞いてみたが、納得いく答えは得られなかった。インドで聞いたときは「お前が言ってることは分からんでもないが、実際出来るよ。何か一つのパラメーターにフォーカスすれば問題も簡単になるんじゃない」みたいなことを言われた。

まとめ

結局納得いく答えにはたどりつけていない。私としては統計分析なんて面倒でやりたくない。が、仕事でやれと言われているので嫌々やっている。そうやって疑問を感じたままずっと続けなくてはならないのだろう。非生産的である。