ソフトウェア工学とは(主に学部生を対象とした説明)

ソフトウェア工学とは,一言で言うと,

品質の高いソフトウェアを低コスト期限通りに開発し,効率よく保守するためのさまざまな技術を扱う学問分野

です.

ソフトウェア工学の起こり

はじめてソフトウェア工学(Software Engineering)という言葉が使われたのは,1968年のガルミッシュ•パルテンキルヘン(当時の西ドイツ)で開催されたNATO(北大西洋条約機構)の科学委員会です.
言葉が生まれてからまだ半世紀も立っていない若い学問分野です.
そのためソフトウェアをうまく開発・保守するための方法論が確立されていません.

知識の積み重ねが他の学問に比べてあまりないために,新しいアイディアを思いつけばそれが直接大きな成果につながることも期待できます.

ソフトウェア開発の難しさ

ソフトウェアの開発が難しい例として,ソフトウェア開発はしばしば建築と比較されます.
家を建てたい場合は,ハウスメーカーや工務店に建てたい家の要望を伝えます.
例えば,南向きのバルコニーがほしい,二階にもトイレが欲しい等.依頼先はその要望を受け,図面などを作成した上で,どのような間取りの家になるのか,費用はいくらくらいか,工期はどれくらいか,を依頼主に伝えます.
依頼主は依頼先が提示した内容に納得するのであれば契約成立となります.

ソフトウェアも同様の過程を経て開発されます.

新しいソフトウェアを必要とする企業はソフトウェアベンダに開発を依頼します.
ベンダは依頼主からの要求に基づき,開発費用,開発期間を提示し,依頼主が納得すれば契約成立となります.
建築の場合は,当初予測した費用と工期が実際のそれと大きく外れることはまずありません.
しかし,ソフトウェアの場合は頻繁に起こりえます
たとえば,日経コンピュータ2008年12月11日号の記事によると,品質,費用,工期のすべてについて計画通りだったのは全体の31.1%だけでした.

ITProject

(http://www.projectcartoon.com/gallery/ University of London Computer Center Newsletter, No.53, March 1973 (Pre- 1970 cartoon; origin unknown) )

この図はソフトウェア開発プロジェクトの実態をパロディ化した図です.
依頼主が本当に欲しいものは図の右下のようなブランコですが,実際に依頼主が説明した内容は図の左上のようなブランコになっています.
ソフトウェアを開発する前は依頼主はどのようなソフトウェアが欲しいかを自分でもしっかりと理解していることは少なく,また理解していたとしてもそれをベンダにうまく説明できるとは限りません

また,より良い保守設計検証のためにはプロジェクトのコンピュータ処理可能な書類も重要なのですが,現場では往々にしてそれが作られていないという課題もよく表してしていると思います.

さらに,建築では図面を元に構造計算をする必要もあります.
ソフトウェア開発の場合は,UMLなどで記述した設計図に対して、「設計そのものが正しいか」,「実装したプログラムが設計に一致しているか」を検証する作業に相当しています.
建築でもし検証を行わなかったら大問題ですが,ソフトウェア開発現場では残念ながら無視されがちです.

ソフトウェア工学による問題解決

このように,ソフトウェア開発は困難なものです.
これらの状況に対処すべく,ソフトウェア工学が発展してゆきました.

例えば,前述した「顧客が望んでいた物と異なる物を作ってしまう」問題.
これに対して,「顧客の要求を正しく理解する」事で解決するための,要求工学という専門の分野があります.

「しっかりとした書類が作られない」問題.
これに対し,プログラムコードから設計書類を逆に生成する技術や,それに関する研究がなされています.

「検証が行われない」問題.
検証作業は,いくつかの制約のもと,ある程度自動化が可能です.
しかし本質的には計算不能な問題であり,また導入にあたり高度な技術と教育が必要です.
この技術を現場レベルでも適用できるようにモデル検査器などのツール開発や,有効な検証プロセスの開発など多くの研究が世界レベルで精力的になされています.

このように,考えられる「ソフトウェア開発の問題点」に対し,解決策を提供する学問がソフトウェア工学であると言えるでしょう.

近年のソフトウェア工学

昨今は特にソフトウェアの規模が大きくなり,ソフトウェアが大量の個人情報や,多くの人の命を預っています.
そのような状況のもと,「品質の高いソフトウェアを低コスト期限通りに開発し,効率よく保守する」 事がますます重要になってきています.
このように,ソフトウェア工学は実社会において高い重要性を持っています.

楠本研の研究内容

楠本研ではソフトウェア工学の中でも特に下記の事柄について重点的に研究を行っています.

実証的ソフトウェア工学
クラウド・教育支援
ソースコード解析