ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第21回は、ソフトウェア開発における見積もり作業の全体像を説明する。カギは「KKD」にあり!
山浦恒央の“くみこみ”な話の連載第170回から、入門者をターゲットとして、「イチから全部作ってみよう」というシリーズを始めました。このシリーズでは、多岐にわたるソフトウェア開発の最初から最後まで、すなわち、要求仕様の定義、設計書の作成、コーディング、デバッグ、テスト、保守までの「開発フェーズ」の全プロセスを具体的に理解、経験することを目的にしています。
興味がある方は、連載第170回からバックナンバーをご覧ください。
今回は、「箸休め」的な「1話完結」の話題を取り上げます。本コラムを読んでいる人は、学生、社会人の違いはあれど、工学(エンジニアリング)系ですね。世の中には、本連載で取り上げているソフトウェア工学だけでなく、橋を架けたり、地下鉄を造ったりする土木工学、タンカーを造る船舶工学、自動車を設計する機械工学、電気機器を造る電気電子工学など、いろいろな工学の分野があります。
全ての工学系で追求するのが「コスト、品質、製造期間(納期)」の3つで、工学系の学術論文は、必ず、これら3つのどれかを新たに改善する方法や技法を議論しています(それ以外、例えば、当該技術分野の歴史をテーマにした論文は新規性がなく、「学術論文」とはみなしません)。これら3つの要素は、吉野家の牛丼のキャッチフレーズ「安い、うまい、早い」とそのままつながっているところが面白いと思います。
例えば、新規開発で携帯電話機のソフトウェアを開発する場合、まずは、開発期間とコストを決めねばなりません。他の工学系に比べ、ソフトウェア開発では、これら2つを見積もるのが非常に大変で、見積もりミスが頻発します(見積もりミスとは、実際に必要なコストや開発期間よりはるかに少ないコスト、短い期間で開発することであり、その逆は見積もりミスとは言いません)。2倍、3倍の誤差は当たり前、10倍、100倍も乖離(かいり)することもあります。
なぜ、これほどひどい見積もりミスが起きるのでしょうか? 例えば、ダムを造ったり、地下鉄を通したりする場合、セメント、鉄骨、砂利などの材料費が全コストの70%前後(少なくとも半分以上)を占め、人件費は残りの30%程度なので、大きく見積もりミスをすることはありません(各工学分野で、大変なことはあると思いますが……)。
一方、ソフトウェア開発は、基本的に材料費がゼロであり、人件費が100%と考えます(高価な人件費に比べると、開発用のPCの購入費やネットワークの課金費用はほぼ無視できます)。ソフトウェア開発は、工学系の中でも、作曲や小説の執筆のように材料費がかからず、「紙と鉛筆があれば物を作れる世界」なのです。2階建ての家屋を造るコストや建設期間を見積もるより、1冊500ページの小説を第1巻から100巻まで執筆するコストと執筆期間を見積もる方が圧倒的に大変です。かくして、現実と大きく乖離した見積もりミスにより、土日も出勤してデバッグをせねばならない「デスマーチ・プロジェクト」が誕生します。
ソフトウェア開発で、要求仕様フェーズ以前に、最初に決めるべき重要事項が、「予算」と「納期」です。例えば、「来年の12月までに3000万円でECサイトを構築してほしい」「予算もないので、300万円で何とかしてほしい」など、発注側の要望は多岐にわたります。これらの要望に応じて費用を算出し、提案を行う作業が、「見積もり」です。見積もるタイミングでは、要求仕様は固まっておらず、これでは、精度の高い見積もりができる訳がありません(でも、無理やり、見積もっているのが現状です)。
見積もりをしないと、どれだけの人員を、どれだけの期間で割り当てるべきか判断できず、プロジェクトを進行できません。また、精度の高い見積もりができないと、「1年で完成すると思って見積もったが、実際は3年かかった」のように、会社の業績に大きな影響を及ぼします。見積もりは、単なる準備作業ではなく、事業そのものの成功に直結する極めて重要な要素です。
今回は、見積もり作業の全体像を説明し、見積もりも含めたソフトウェア開発工程への理解を深めましょう。
Copyright © ITmedia, Inc. All Rights Reserved.