そろそろ、呼び出しコストが無視できなくなってきた。

今の不況下ではコストと品質と納期を考慮すると、システム開発における手法の選択肢が少なくなってきている。

システム構築という機能があったとして
それを実現するためのメソッドが下記とする。


1.要件定義
2. 設計
3. 製造
4.テスト


で、1から順に呼び出して行くのだが、1から2を呼ぶためにはそれなりの引数を渡す処理を記述しないといけない。また、2から3を呼ぶ為にも同じように引数を渡す処理をしないといけない。引数を渡す処理というのは記述することも手間だが、ちゃんと順番通りに渡さないと機能しないため、メソッド引数の順番についても調査を要する。


上記のように、呼び出しコストが納期と品質を圧迫しており、これを軽減するためには最適化しかない。

最適化はくり返し処理の圧縮としてフレームワークの導入、不要な手続き(一部の検印等)としてデッドコード削除、2、3、4のメソッドを1に含有するインライン展開などがあげられる。


最適化を実施するためには1から4を縦断的にかつ深く知っていなければならず、そのような性能が良いコンパイラが必要になる。逆にただのおかざりPMは最適化できずコストも納期も品質も満たせないシステム構築となってしまうのは仕方が無い。




次にアジャイルウォーターフォールについて。

システム開発の品質というのは実はユーザー満足度が大部分を占めている。極端に言うとユーザーが満足すればバグがあっても良いのである。実際はそういうケースはあまりないが。


そこでユーザーが満足するためのシステム構築を下記のような関数で表してみる。

X^3 + X - 2 = 0


ユーザーが理想とする結果が1だとするとそれを満たす為のXを算出する、解が無い場合でもそれを近似するXを算出することが最終的にユーザー満足度の向上に貢献できる。

上記の関数における解の一つは1であるが、この1を求める為にどのような方法をとるかというのがシステム開発手法の選択となるのである。

ウォーターフォールの場合は下流に行けば行くほど上流でのミスの影響が大きい、つまり、上流において徹底的にシステム構築のイメージを具体化する必要がある。具体化の為、つまり論理的に漏れが無いように分析を行う必要があるだろう、それはX^3+X-2に対して因数分解を行い、解を求めることになる。
3次関数の因数分解は理解されてるのだろうか? これが3次ならよいが、さらに4次、5次となってきたときはもっと大変になる。ただ、奇麗に因数分解できた場合は
きっちりとユーザーの満足度を満たす解を1度で得られるだろう。


アジャイルの場合は最初にこのX^3+X-2に対し任意のXを代入してみる。
そして、得られた数から、より結果1に近づくためのXを考え、修正したXを入れこんでいき、これを何度も繰り返し最終的に結果1を得られるXを特定するという方法だ。


ウォーターフォールアジャイルも解を得るためには時間がかかる可能性を含んでいる。しかし、ウォーターフォール因数分解が解けないと結果が出せないが、アジャイルであるならば、解けなくてもそれなりに近い値を出す事ができる。


システムは長くメンテナンスしていくものだと考えれば、とりあえず近似でアウトプットしておき、その後もちょっとずつ改善していけば良い。その場合に、因数分解に時間をかけるのか、それとも任意のXにおけるパターン網羅(ノウハウの蓄積)に時間をかけるほうが良いのか自ずと見えてくる。この、ノウハウの蓄積をもっと有用に使う事を今後のアジャイルが進化するポイントになると私は考えている。

そして任意のXを代入して値を得る為のアジャイルには仕様を理解でき、近似解を満たすXを提案でき、プロトタイプのプログラムを構築できるような縦断的知識が求められる。