これまで見てきたソフトウェアライフサイクルは「ウォーターフォールモデル」という開発モデルを前提に説明してきたっす。
ウォーターフォールって、たしか「滝」っていう意味だったよね。何で滝なんだろ?
開発モデルはウォーターフォール以外にもたくさんあるっすよ。今回はそれを勉強していくっす。
目標 | ・代表的な開発手法に関する概要,意義及び目的を理解する。 |
説明 | ・ソフトウェア開発を効率良く行うために,ソフトウェア開発に関する手法や考え方を理解する。 |
オブジェクト指向
オブジェクト指向は、ソフトウェアの開発手法(設計手法)の1つです。プログラムを処理の対象ごとに部品化し、プログラムをこの部品(オブジェクト)の集合と捉えて開発する手法です。
オブジェクト指向設計では、オブジェクトを再利用したり組み合わせたりすることで、効率的な開発や拡張が可能になります。
過去に作ったオブジェクト指向のプログラムを再利用する場合、それがどのように設計されているのかを理解する必要がありますが、従来は様々な表記方法で記載されていたため複雑になっていました。
これを解消するために、オブジェクト指向のソフトウェア開発において、データ構造や処理の流れなどソフトウェアに関連する様々な設計や仕様を図示するための統一表記法であるUML(Unified Modeling Language:統一モデリング言語)が用いられるようになりました。
UMLの代表的なものにユースケースがあります。システムには、どのようなユーザー(利用者)が存在し、 それぞれどういった操作をするのか(システムがどのように振る舞うか)を図にまとめたものです。
主なソフトウェア開発モデル
ウォーターフォールモデル
ウォータフォールモデルは、上流から下流へと流れ落ちる滝のように、ソフトウェア開発の工程を段階的に進めていく開発モデルです。
滝が逆流しないのと同様に、ウォータフォールモデルでは前の工程に遡ったり、工程を飛ばしたりしないことが大原則となっています。そのため、綿密な設計書に従って、工程ごとに厳しいチェックを行いながら開発を進めます。
ウォーターフォールは計画やスケジュールが立てやすく、開発コストが見積りやすいといったメリットがあります。
スパイラルモデル
スパイラルモデルは、システムの機能を分割してシステムの一部分(サブシステム)を開発し、それをユーザに確認してもらって結果をフィードバックし、再度、分析、設計、開発というプロセスを繰り返す開発モデルです。
ユーザと開発者との間の認識のズレを確認しながら開発できるので、要求に変更があった場合などに対応しやすいという特徴があります。
スパイラル(Spiral)には、「螺旋」や「繰り返し」という意味があるっすよ。
プロトタイピングモデル
プロトタイピングモデルは、まず基本的な機能だけを持つ簡易的な試作品(プロトタイプ)を作成し、ユーザからその試作品に対する評価を得ながら、開発を進める開発モデルです。ユーザと開発者との間の認識のズレを解消することが可能になります。
スパイラルモデルと何が違うの?
スパイラルモデルはシステムの一部ずつを作っていく感じっすが、プロトタイピングモデルは簡易的な試作品に肉付けをしたり修正を加えていくっていうイメージっすね。
RAD(Rapid Application Development)とは、少人数のチームでプロトタイプ(試作品)を繰り返し製作し、それを評価・改良することで次第に完成度を高めていくプロトタイピングモデルの代表的な開発手法です。
専用の開発ツール(RADツール)を用い、あらかじめ用意された半製品や部品(モジュール)、雛形(テンプレート)を利用したり、プログラムコードの入力支援や自動生成などの機能を活用して、ゼロからコードを記述していくよりも少ない手順で短期間に開発できます。
リバースエンジニアリング
既存のハードウェアを分解したり、ソフトウェアを解析するなどして、ソフトウェアの構造を分析し、そこから仕様やソースコードなどを調査することをリバースエンジニアリングといいます。
ソフトウェアの修正や保守をする際に、開発者がすでに退職・死亡してしまっていたり、設計図や仕様書の所在が不明だったり、あるいはそもそも最初から作成されていなかったなどの事情により、十分な情報を得ることが不可能な場合があります。
このような場合に、従来のソフトウェア製品をリバースエンジニアリングすることによって、使用されている技術を分析、調査、確認します。
リバースエンジニアリングによるコピー品の開発や販売を行うと、元の製品の知的財産権を侵害する可能性があるので注意が必要です。
アジャイル開発
アジャイル開発は、高品質な製品を素早く作るための考え方・開発手法です。
アジャイル開発は近年注目されている開発モデルで、シラバス上も非常にボリュームが多くなっているため、次のページで詳しく説明していきます。
開発プロセスに関するフレームワーク
共通フレーム
システム開発では、依頼元企業のユーザとベンダー企業の開発者との間で、解釈の違いや誤解などによってトラブルが発生してしまうことがあります。このようなことがないように、双方が共通して利用する用語や作業内容を標準化するために作られたガイドラインが共通フレームです。
ソフトウェア開発とその取引の適正化に向けて、システムの開発や保守の各工程の作業項目を一つ一つ定義し、標準化した共通フレームとしてソフトウェアライフサイクルプロセス(Software Life Cycle Process: SLCP)があります。
共通フレーム(Software Life Cycle Process)は、明確化した作業範囲や作業項目をそのまま利用するのではなく、必要に応じて修整して利用することを推奨しています。
能力成熟度モデル
能力成熟度モデル(Capability Maturity Model:CMM)は、組織のソフトウェア開発プロセスを成熟度という基準で評価し、改善することで、組織がソフトウェア開発の能力を強化し、より高いレベルの成熟度を達成するのに役立つ指針を体系化したものです。
なお、CMMを発展させたもので、開発プロセス以外のプロジェクト管理、ITサービス提供、人材開発なども評価の対象としたものを能力成熟度モデル統合(Capability Maturity Model Integration:CMMI)といいます。
CMMIでは、ソフトウェア開発組織及びプロジェクトのプロセスを改善するために、レベル1からレベル5までの5段階でその組織の成熟度レベルを段階的に定義します。
レベル | 成熟度 | 能力 |
---|---|---|
レベル1 | 初期状態 | 場当たり的で一貫性がない |
レベル2 | 管理された状態 | 管理および計画された方法で実行される |
レベル3 | 定義された状態 | 文書化された基準と手順に従って実行される |
レベル4 | 定量的に管理された状態 | 統計的および定量的手法を使用して測定および制御される |
レベル5 | 最適化している状態 | フィードバックとイノベーションに基づいて継続的に改善および適応される |
確認○×問題
ソフトウェア開発モデルには、ウォータフォールモデル、スパイラルモデル、プロトタイピングモデル、RADなどがある。ウォータフォールモデルの特徴の説明として適切なものはdである。
a | 開発工程ごとの実施すべき作業が全て完了してから次のエ程に進む。 |
b | 開発する機能を分割し、開発ツールや部品などを利用して、分割した機能ごとに効率よく迅速に開発を進める。 |
c | システム開発の早い段階で、目に見える形で要求を利用者が確認できるように試作品を作成する。 |
d | システムの機能を分割し、利用者からのフィードバックに対応するように、分割した機能ごとに設計や開発を繰り返しながらシステムを徐々に完成させていく。 |
(出典:平成28年度秋期分 問46一部改変)
答え:×
a.ウォータフォールモデル | 開発工程ごとの実施すべき作業が全て完了してから次のエ程に進む。 |
b.RAD | 開発する機能を分割し、開発ツールや部品などを利用して、分割した機能ごとに効率よく迅速に開発を進める。 |
c.プロトタイピングモデル | システム開発の早い段階で、目に見える形で要求を利用者が確認できるように試作品を作成する。 |
d.スパイラルモデル | システムの機能を分割し、利用者からのフィードバックに対応するように、分割した機能ごとに設計や開発を繰り返しながらシステムを徐々に完成させていく。 |
ウォータフォールモデルで開発を行うプロジェクトにおいて、システム要件定義の不具合を後続の工程で発見した。不具合を発見した「システム設計」「プログラミング」「テスト」「ソフトウェア受入れ」の工程のうち、不具合の修正や修正に伴う手戻りが最も少なく済む工程は「システム設計」である。
(出典:平成27年度秋期分 問43一部改変)
答え:〇
ウォータフォールモデルは、「システム要件定義」→「システム設計」→「プログラミング」→「テスト」→「ソフトウェア受入れ」の順で作業を進め、手戻りしないことが原則です。
そのため、「システム要件定義」に不具合があった場合、そのあとの工程が進めば進むほど雪だるま式に不具合の影響が大きくなります。逆に言うと、工程が浅いほど影響は少なくなります。
「システム設計」「プログラミング」「テスト」「ソフトウェア受入れ」のうち、工程が最も上流にあるのは「システム設計」なので、不具合の修正や修正に伴う手戻りが最も少なく済む工程は「システム設計」となります。
図のように、改良及び機能追加を繰り返すことによって利用者の要求の変動に柔軟に対処したシステム開発を行う開発モデルはプロトタイピングモデルである。
(出典:平成26年度秋期分 問42一部改変)
答え:×
設問の開発モデルはスパイラルモデルです。
ユーザの要求を定義する場合に作成するプロトタイプは、ユーザとシステムのやり取りを記述した図である。
(出典:平成28年度春期分 問49一部改変)
答え:×
ユーザとシステムのやり取りを記述した図はユースケース図です。ユーザの要求を定義する場合に作成するプロトタイプは、「ユーザの要求を理解するために作成する簡易なソフトウェア」です。
運用中のソフトウェアの仕様書がないので、ソースコードを解析してプログラムの仕様書を作成した。この手法をリバースエンジニアリングという。
(出典:令和5年度春期分 問39一部改変)
答え:〇
既存のハードウェアを分解したり、ソフトウェアを解析するなどして、ソフトウェアの構造を分析し、そこから仕様やソースコードなどを調査することをリバースエンジニアリングといいます。
共通フレーム(Software Life Cycle Process)とは、「ソフトウェア開発とその取引の適正化に向けて、基本となる作業項目を定義し標準化したもの」である。
(出典:平成28年度秋期分 問45一部改変)
答え:〇
設問の通りです。
共通フレーム(Software Life Cycle Process)の利用に関して、明確化した作業範囲や作業項目をそのまま利用することを推奨している。
(出典:平成29年度秋期分 問41一部改変)
答え:×
共通フレーム(Software Life Cycle Process)は、明確化した作業範囲や作業項目をそのまま利用するのではなく、必要に応じて修整して利用することを推奨しています。
システム開発組織におけるプロセスの成熟度を5段階のレベルで定義したモデルをCMMIという。
(出典:平成24年度春期分 問38一部改変)
答え:〇
CMMを発展させたもので、開発プロセス以外のプロジェクト管理、ITサービス提供、人材開発なども評価の対象としたものを能力成熟度モデル統合(Capability Maturity Model Integration:CMMI)といいます。
CMMIでは、ソフトウェア開発組織及びプロジェクトのプロセスを改善するために、レベル1からレベル5までの5段階でその組織の成熟度レベルを段階的に定義します。