おはようございます。今週は中休みがあったためまた週が始まったような変な錯覚に陥っています。といっても起業家に休みはないんですけどね。
昨日はライブラリでソフトウェアをどう設計するかについて考えていました。参考資料として「正しく学ぶソフトウエア設計」を読んでいたんですが、結構まとまっていて読みやすかったです。
巷にあふれるプログラミングの入門書は言語の使い方やリファレンス的なものがほとんどで本格的なソフトウェアを作ろうと思うととたんにわからなくなってしまいます。
この本ではソフトウェア設計とはモジュール分割して変更に強い構成に組み上げることであるといっています。それは分析、要件定義、実装モデルへの転換などの作業が必要になります。
設計手法は新しい技術と今までの経験から色々考え出されていますが、実際の現場を見るとエンジニアによって品質があまりにも違いすぎる現状は変わっていません。このような状況を見ると私はいまだにIT業界は産業として未熟ではないかと思っています。
IT業界をちゃんとした産業にするためには製造業の手法が参考になるかもしれません。テイラーの科学的管理法というのがあります。1900年代初頭に考え出された工場を運用する手法です。基本的な考え方はある仕事を細かくブレークダウンして各作業を明確にし、かかった時間を計ります。
それまでは請負で工員は親方の弟子となってノウハウを伝授するという方法でしたが、この方法によって未熟な工員でも作業を行うことができるようになりました。これは後にフォードの流れ作業の工場につながっていきます。
熟練したエンジニアがいつも不足しているのはIT業界も同じですよね。ソフトウェア設計にしてもSIにしても担当するエンジニアによって品質がこんなに違ってしまうのはいまだ成熟した産業ではないのでしょうね。
実はこのテイラーの手法は私は知らず知らずのうちに行っていました。システム開発のプロジェクトで最終的なスケジュールを出すときに私が行うのは細かいレベルまで作業内容をリストアップします。そしてそれぞれにかかる工数を割り出して合計すれば全体の工数が割り出せます。
以前は各作業がどれくらいかかるか記録をとっていましたが、経験を重ねると大体わかってしまうので大きく外れることがなくなりました。ただ全く新しい作業を行う場合は当て推量になってしまいますが。
ソフトウェア開発と製造業が違うのは、仕様変更の頻度ではないでしょうか?自動車をラインに流すときそんなに仕様変更は入らないでしょう。最近はセル方式という多品種少量生産を行うための手法が多いようですが。
ソフトウェア開発は基本的にはオーダーメードです。簡単に複製できるため工場のようなラインは必要ありませんが、設計や実装の段階で仕様変更が入るのが当たり前です。したがって設計方法もより変化に対応できるよう考えておく必要があります。このあたりがソフトウェア開発を難しくしている原因だと思います。
この設計方法自体をマニュアル化して未熟なエンジニアでもそこそこの設計ができるような管理手法がこれから必要になると思います。Strutsなどのフレームワークややコード自動生成ツールなどによってある程度はシステム化されてきましたが、問題を分析してモデルを作る部分はまだ属人的です。
現在のIT産業は自動車産業でいうとテイラーやフォードが登場する以前の段階なのでしょうね。IT産業が成熟するまでは職人的なエンジニアの出番もあるでしょうが、その後のことを考えて準備しておいたほうがよさそうです。
正しく学ぶソフトウエア設計 ─オブジェクト指向分析/設計を根本から理解する | |
天野 勝 平澤 章 平鍋 健児 Amazonで詳しく見る by G-Tools |