- これは
- 3. ソフトウェア工学の意義と方法
— はじめに
— 1. ソフトウェア工学とは
—– (1) ソフトウェア工学の定義
—– (2) ソフトウェア工学の特徴
—– (3) 関連分野
— 2. ソフトウェア工学の歴史
—– (1) ソフトウェア工学の誕生
—– (2) その後の展開
—– 1) 1970 年代: 構造化の時代
—– 2) 1980 年代: 管理技術へのシフト
—– 3) 1990 年代: オブジェクト指向
—– 4) 2000 年代: 分析技術の高度化
— 3. ソフトウェア工学を構成する諸分野
—– (1) ソフトウェア工学の知識体系
—– (2) 本講で取り上げるソフトウェア工学
—– 1) ライフサイクルに沿った分野
—– 2) ライフサイクルを横断する分野
— 4. ソフトウェア工学の活動状況
—– (1) 学界
—– (2) 産業界
— 参考リンク
これは
放送大学大学院文化科学研究科の「ソフトウェア工学」という授業で使われる「ソフトウェア工学」という教材書籍を自分なりにまとめたものです.
第 3 章では, ソフトウェア工学の意義とその方法について, 歴史的な観点を絡めて紹介されていました.
- ソフトウェア工学の特徴として, ソフトウェアという物理的な実体を持たない抽象的なものである為, 製造よりも設計にフォーカスされている
- 1970 年代:構造化の時代において, プログラムの制御構造の簡素化, 明確化に伴って goto 文がディスられているのが印象深い
- 1980 年代:管理技術へのシフトと AI ブームの時代ということで, 2018 年の現在でも AI がホットだと思うんだけど, 実は 30 年くらい前から AI は研究されていたんだなー
- ちなみに, こちらを読むと AI の研究って 1940 年代から行われている
- 1990 年代:オブジェクト指向
- ソフトウェア工学の国際会議 (ICSE) の論文は概要だけでも読んでみたい
尚, 本まとめについては, 以下の Github リポジトリで管理しており, 加筆修正はリポジトリのみ行います.
github.com
3. ソフトウェア工学の意義と方法
はじめに
- ソフトウェア工学は「信頼性の高いソフトウェアをいかに効率的に開発するか」という目的をもって, 1960 年代後半に始められた
1. ソフトウェア工学とは
(1) ソフトウェア工学の定義
- IEEE Std 610-1990 に以下のような記述がある
1) ソフトウェアの開発, 運用, 保守に対する, 系統的で統制され定量化可能な方法. すなわちソフトウェアへの工学の適用
2) 1) のような方法の研究
- 目標
- 「人工物」の開発
- 人工物開発の為に行われる作業として, モデル化, 仕様作成, 設計, 検証, 保守, 組織管理
(2) ソフトウェア工学の特徴
- ソフトウェアという対象が物理的な実態を持たず,抽象的であるところ
- 特徴
- 工学を適用する場面が製造よりむしろ設計であること
- 構造が複雑になるので, 複雑性への対処が工学の中心課題となること
- 物理的な損傷が劣化が生じない為, 保守の意味が異なること
(3) 関連分野
以下, 代表的な関連分野.
- 計算機科学
- 数学
- システム工学
- 認知科学
- プロジェクト管理
2. ソフトウェア工学の歴史
(1) ソフトウェア工学の誕生
- 1968 年 10 月 7 日
- ドイツガーミッシュで Software Engineering という名前の会議が初めて開催された
- 1968 年という時代背景
- 1964 年 に IBM の System/360 とその OS である OS/360 がリリースされた 4 年後
- System/360 は最初の汎用コンピュータ
- COBOL, FORTRAN, LISP, ALGOL は 1960 年くらいまでに作られていたが, COBOL と FORTRAN は汎用コンピュータ上で広く使われていた
- 目的
- 情報システムの信頼性をどう確保するか
- 大規模ソフトウェア開発プロジェクトの納期を守り, 仕様を満たすことが難しい状況にどう対処したらよいか
- ソフトウェア技術者の教育をどうすべきか
- ソフトウェア危機
(2) その後の展開
1) 1970 年代: 構造化の時代
- 1970 年代は「構造化」を合言葉に, ソフトウェア工学を大きく発展させた時代
- 構造化プログラミング
(https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0), 合言葉は「goto 文はダメ」 - 構造化設計, 構造化分析
- goto 文の使用により, プログラムの振る舞いが煩雑になり, エラーが起きやすくなる原因となる
- goto 文の代わりに何を用いれば良いのか…
- 構造化定理 (あらゆる制御構造は
連接
と分岐
と反復
の組み合わせで記述出来る)- 分岐と反復
- 入れ子構造
- プログラムをすっきりと書くことが出来る
- モジュールの抽象化
- プログラムのまとまった意味単位としてのモジュールという概念は以前から提供されていた (サブルーチン, 手続き)
- 抽象データ型は, モジュールという単位の抽象化レベルと高めると共にカプセル化して使いやすくした
- 落水型モデル (ウォーターフォール型モデル)
- ソフトウェアのライフサイクルモデル
2) 1980 年代: 管理技術へのシフト
- 細分化されてきた
- 「大規模複雑化するソフトウェア」の開発に対処するということばが強調されてきた
- 管理技術
- プロジェクト管理
- 要員管理
- 予算管理
- 工程管理
- 品質管理
- 構成管理
- 計算機資源管理
- プロトタイピング (実践に近いところでの成果の 1 つ)
- ソフトウェアの開発にとって最も困難な問題の一つ → ユーザーの要求が曖昧だったり, 不十分なところ
- システムの動作をユーザーが理解出来るように簡単なプロトタイプを手早く作り, それをユーザーに試してもらい要求を明確化し充実させる
- inspection (査閲) と review (見直し)
- 技術革新
- 1980 年代 AI ブーム
- AI (人工知能) の研究はほぼコンピュータの誕生とともに始まった
- 1980 年終わりから 1990 年代前半にかけて CASE (Computer Aided Software Enginnering) も脚光を浴びる
3) 1990 年代: オブジェクト指向
- 1990 年代はオブジェクト指向の時代
- オブジェクト指向言語の元祖 Simula は 1960 年代に作られた
- オブジェクト指向の主要概念であるカプセル化, 継承, 多相性等は 1970 年代に確立されていた
- オブジェクト指向という名称と考え方が広く知られるようになったのは, 1980 年に SmallTalk-80 が公開されたことによる
- オブジェクト指向の記法 UML (Undfined Modeling Language)
- 1997 年 11 月 UML1.1
- 2005 年 7 月 UML2.0
- Java
- 1990 年代半ば
- プラットフォーム非依存, Web 上の応用システム開発, セキュリティを目標
4) 2000 年代: 分析技術の高度化
- プログラムや文書の分析技術の高度化
- オープンソース・ソフトウェアが公開されたこと
- ハードウェアの性能の向上
3. ソフトウェア工学を構成する諸分野
(1) ソフトウェア工学の知識体系
- IEEE (電気電子技術学会) が作成したソフトウェア工学知識体系 (SWEBOK)
- ソフトウェア工学に含まれる知識分野の全容を体系化したもの
- 現在は 2004 年に発表されたものが最新
以下, SWEBOK の知識領域.
* ソフトウェア要求 * ソフトウェア設計 * ソフトウェア構築 * ソフトウェアテスト * ソフトウェア保守 * ソフトウェア構成管理 * ソフトウェア開発管理 * ソフトウェア開発プロセス * ソフトウェア開発ツールと手法 * ソフトウェア品質
- CC2005
- 大学における情報分野の標準カリキュラム作成を目的として整備された体系
- 計算機科学 (CS), 計算機工学 (CE), 情報システム (IS), 情報技術 (IT), ソフトウェア工学 (SE) の 5 分野が含まれる
- J07
- 2007 年に作成された
- 情報専門学科におけるカリキュラム標準
- CS, CE, IS, IT, SE の 5 分野から構成されている
- CC2005 を参考にして作成された日本版 CC2005
以下, J07-SE の知識項目第一カテゴリ.
* コンピュータとソフトウェアの基礎 * 確率統計 * 離散数学 * プログラミング基礎 * 論理と計算理論 * オペレーティングシステム基礎・データベース * ネットワーク基礎 * 工学基礎 * ソフトウェア構築 * モデル化と要求開発 * ソフトウェアアーキテクチャ * ソフトウェア設計 * 検証と妥当性の確認 * 形式手法 * ソフトウェアプロセスと品質 * ヒューマン・ファクター * 開発ネジメント
(2) 本講で取り上げるソフトウェア工学
1) ライフサイクルに沿った分野
- 要求分析
- モデル化技法と UML
- データと制御のモデル
- 動的振る舞いのモデル
- オブジェクト指向開発
- 形式手法
- 設計技法
- 検証技術
- 保守と発展
2) ライフサイクルを横断する分野
- ソフトウェアプロセス
- 開発環境のツール
- プロジェクト管理
4. ソフトウェア工学の活動状況
(1) 学界
- 1975 年にソフトウェア工学の国際会議 (International Conference on Software Engineering, 通称 ICSE) が開催された
- 地域毎
- ESEC (ヨーロッパ)
- APSEC (アジア太平洋地域)
- テーマ別
- 理論を中心とした FSE
- 自動化を中心とした ASE
- 要求を中心とする RE
- テストを中心とする ICST
- 保守を中心とする ICSM
- 日本のソフトウェア工学研究は, 1976 年に発足した情報処理楽界のソフトウェア工学研究会を中心に進められてきた
(2) 産業界
- 国際会議には企業参加よりも大学等の研究機関からの参加者数が圧倒的に多い
- 日本国内の会議では, 欧米より産業界の参加が多い
- 日本の産業界におけるソフトウェア開発体制としては, 1980 年代に「ソフトウェア工場」が世界的に注目された
- バブルが弾けた 1990 年代にソフトウェア生産技術部門の多くは縮小, 廃止となる
- 2000 年代に入って産業界でもソフトウェア工学が徐々に力を取り戻してきた
- 2000 年 4 月に国立情報学研究所, 2004 年 4 月に情報処理推進機構 (IPA) 内にソフトウェア・エンジニアリング・センター (SEC) が創設された
参考リンク
- https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
- https://ja.wikipedia.org/wiki/Simula
- https://www.weblio.jp/content/%E5%A4%9A%E7%9B%B8%E6%80%A7
- http://www.nttdata.com/jp/ja/insights/trend_keyword/2014122501.html
- https://sites.google.com/site/sereadings/icse2017-reading