ソフトウェア工学
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ソフトウェア工学(ソフトウェアこうがく、Software engineering)は、コンピュータのソフトウェアの開発方法を研究対象とする情報工学の一分野である。 具体的には、高度かつ安全なコンピュータのソフトウェアを短期間で設計するための研究などを行なう。難易度の高い大規模ソフトウェアの開発に焦点を当てることが多い。
ソフトウェア工学では、通常、開発対象となるソフトウェアの開発を思いついた時点から、実際に動くソフトウェアが完成し、使用されるまでを、いくつかのフェーズに分けて考察する。これらフェーズごとに典型的な課題が存在し、課題に立ち向かう方法を明確にしようとする。 このため、ソフトウェア工学の対象は広範囲にわたる。
また、他分野とクロスオーバーしていたり、もしくはソフトウェア工学の1分野だったものが独立して別分野を形成したり(例:データベース設計)、別分野で培われた技術や概念がソフトウェア工学の対象となることもある(例:オブジェクト指向技術)。
目次 |
[編集] ソフトウェア開発方法論
ソフトウェア工学の成果は、ソフトウェア開発方法論にまとめられることがある。
対象物をどのように人間が把握し、設計し、プログラムとして実現するかという視点からは、ソフトウェア開発方法論には次のような分類がある。
- 構造化技法 (構造化プログラミング)
- オブジェクト指向開発方法論
開発プロジェクトをどのように運営するかに焦点を当てる場合は、特に「開発プロセスモデル」と呼び、以下の二種類に分類できる。ただし、以下の二種類は組み合わせて利用されることもある。
- ウォーターフォール・モデル
- スパイラル・モデル(アジャイルソフトウェア開発を含む)
またオープンソースなどのプロジェクトにおいて、開発者の参加基準などの観点からは、以下の二種類に分類できると言われる。(エリック・レイモンド「伽藍とバザール」) [1]
[編集] 開発フェーズ
開発フェーズは、開発着手から終了まで次のように分けられることが多い。ただし用語や詳細な定義は開発方法論ごとにさまざまである。
- 要求分析
- 着想したソフトウェアがどのような機能を持つべきかを検討し、必要に応じて文書化する。
- 設計
- 機能がソフトウェアとしてどのように実装されるべきかを検討し、必要に応じて仕様化する。
- コーディング
- 仕様に従ってプログラムを書く。
- テスト
- 作成されたプログラムが機能的な要求を満たしていることを実証する。
- 運用・保守
- ソフトウェアを使用したり、新たな要求に応じて機能を追加・変更する。
プロセスモデルにおいては、開発フェーズをどのように定義・配置するかが各モデルを規定する重要な要素となる。例えばウォーターフォール・モデルでは、要求分析からテスト-運用までを順に、1度ずつ行うことを想定している。スパイラル・モデルでは開発期間を短く分け、短期間に各開発フェーズを行い、それを繰り返す。
アジャイルソフトウェア開発のいくつかの開発手法 (エクストリーム・プログラミングなど) では、例えばコーディング前に(あるいは同時に)テスト用のコードを書き、コーディングはそのテストに通過することを目標にして行う (テスト駆動開発、テストファースト) など、順序や各フェーズの意味づけを大きく変更している。
[編集] 脚注
[編集] おもな研究分野
- プログラム意味論
- ソフトウエア検証論
- ソフトウエア開発環境