失敗したこと その5 「Springに頼りすぎたこと」

機能拡張を容易に行えるという要件があった。さまざまなサーバ間連携を実現する通信ミドルなので、各種通信方式をプラガブルにサポートすることが求められた。要件定義・基本設計の段階で、各連携先と通信方式を確定できずにいた。正確には決定はしていたが、いつ、お客様要件で変更が入っても対応するという条件の下での決定だったため、確定とは程遠い状態だった。これに対応するために、通信方式をプラガブルに切り替えられるよう、APの軸となるAP基盤機能、サーバ間連携の軸となるメッセージ変換、各サーバとの通信の軸となる通信機能やトランザクション管理機能をすべてプラグイン形式とし、各主要機能をSpringにて結合するという方式を採用しようとした。
構想はよかった。でも現実は、各機能に閉じた依存関係すら、Springで結合するという方式になってしまっていたことだ。SOAPで通信するときには、SOAP系のクラスしか利用しないし利用できないにも関わらず、SOAP系のクラスの依存関係すらSpringで解決しようとしてしまっていた。その結果として、Springの設定ファイルが膨大なものとなってしまった。さらに悪いことに、Springの設定ファイルを記述するというWBSを起こし忘れたため、結合試験開始時に慌てて作成することとなった。
その結果、どうなったか。本来であれば二週間で終わる予定だったSpringの設定に対する試験が、丸々1か月延伸した。
なぜそんなことになったか。それまでは数クラス程度の連携しか試験していなかったにも関わらず、Springの設定に対する試験の段階で、100以上のクラスを一斉に連携させての試験となってしまった。そして、故障が発生するたびに、Springの記述の誤りか、Javaの記述の誤りかを毎回切り分けねばならず、故障改修に手間取り、しかも修正後の再試験が膨大となってしまった。馬鹿じゃないの?死ぬの?>俺
自社フレームワークがSpringに依存しすぎているから設定ファイルのバグを生みやすい、と火消し資料を作っていた時代に戻りたい。餅を絵にかくことすら忘れてたんです。ごめんなさい。

とりあえず、今日はここまで。
失敗ネタばかりだと気が滅入るから、こんどは成功ネタでも書きたい。