開発言語と、通販対応配送センターERPの開発者の視点を中心としたコラムです。

大規模ソフトウェア開発でもコーディングに人海戦術は必要ない

»

 皆さんこんにちは、起業もできるコンピュータ言語開発者を目指している株式会社i3planetの飯塚です。

 自分は、もともとは、大規模開発に関わるSEでした。そして、ソフトウェアをチームで開発する時には、必ず会議が必要になります。

 もう、10年近くも前のことなので、時効だと思い、打ち明けてしまいますが、会議のたびにいつも思っていました。「これ、11人とか2人で作った方が早くできるのではないか?」と。

■会議が無駄過ぎる

 とにかく、会議というものが無駄の塊でした。それぞれが、連携の仕方についての議論をして、それで各役割などを決め、持ち帰って検証して、また会議にかけます。この繰り返しです。

 当然、毎回、議論をしていくわけですが、全体を把握している人がいないので、前回決まったことがどんどんまたひっくり返り、また、元に戻っていくわけです。

■会議から生まれる無駄

 毎回ころころ仕様が変わることによってものすごい無駄が生まれます。皆さんもご存じのとおり一度作成したソフトウェアの仕様が変わる度に再テストです。しかも、「これ、またテストしてもまた変わるんだろうなあ」と思いながらの再開発は、本当に苦痛でした。

 それならば、「テストは仕様が決まってからにすればよいではないか」と思うかもしれませんが、進捗管理上、根拠のないスケジュールが敷かれているのでやらないわけにはいかないのです。

■理想は会議がいらない人数での開発

 この時から思っていたのですが、理想は、会議が必要ない人数での開発だと思っていました。そうすることによって、無駄な繰り返しが少なくなります。分からないことが発生しても、次の会議までまとめる必要もなく、その場で聞けばいいですし、一人が把握している部分が大きくなるので、全体が把握しやすくなります。

 しかし、人数が少ないと人海戦術が行えなくなるというデメリットもありますので、そこを補わなくてはいけません。

■コードを書くのに人海戦術はいらないがテストに工夫が必要

 人海戦術が必要なのは、ソフトウェアのテストの部分です。コードを書く部分は人海戦術は必要ありません。

 自分の例になってしまいますが、自分が開発したAlinous-Coreは、本体のサーバもeclipseプラグインとしての部分も自分一人で開発をしていますし、Alinous-Coreで開発したECサイト構築から配送センター業務まで対応している大規模ソフトウェアも、零細企業である弊社だけで作りました。

 ただし、これらのソフトウェアを作る上での大きな壁が一つありました。それは、ソフトウェアテストです。こればっかりは、手動で行っていたら人海戦術が必要になります。

 しかし、近年は、seleniumという自動テスト化支援ソフトウェアがあり、ブラウザを意のままに操れるので非常にテストが自動化しやすく、大変に重宝しています。これがなければ、今の開発はできていないと思うくらい役に立っています。

■一度作っておくと楽

 seleniumで筆者はJavaでテストプログラムを書いています。最初は、本当に大変で面倒くさくて心が折れそうになりましたが、コツをつかむととてもスムーズです。

 特に、大規模ソフトウェアの場合、データベースの中の状態で、再現できる事象が違うため、その状態をボタン一発で作ってくれるというメリットは本当に大きいです。大規模になると、昔自分で作ったプログラムの仕様を時々忘れてしまうので、たまには自分でチェックのために手動で使いやすさなどをチェックする事も大事です。

 seleniumでソフトウェアを書くときのコツは、各機能ごとの画面の流れについて、ライブラリを丁寧に一度作ってしまうことです。

 例えば、筆者のソフトウェアの場合、配送センターへの入庫の機能があったら、そこに登場する画面操作に対して一式のライブラリをセットで作ってしまうことです。

 そうすることによって、後でテストするときは、テストケースでそのライブラリを呼び出すだけで様々な業務パターンが検証でき、画面を変更した時にも、ライブラリの共通部分を直せば、他のテストケースもスムーズに動くようになります。

■これからはクラウドの時代

 今後、クラウドというインフラがどんどん普及していくと、どんどん、大規模なハードウェアなども必要なくなり、われわれのような零細企業も大規模ソフトウェアのビジネスを行うチャンスが大いに出てきます。

 そんな中、自分が注目しているのは、PostgreSQLの外部データラッパと言う機能です。この機能では、データベースのテーブルを、テーブルごとにネットワーク上の他のサーバ上のリソースに分散できます。更新系がまだのようですが、これも近い将来できるようになる可能性が高いです。

 クラウドを利用すれば、簡単にサーバが用意できますから、パフォーマンス面でのスケーラビリティをサーバ構成で容易に出すことができます。

 これからの大規模開発がどうなっていくか、非常に楽しみです。

Comment(0)

コメント

コメントを投稿する