開発技術(2)
ソフトウェア開発管理技術
ソフトウェア開発プロセス・手法
ソフトウェア開発手法
ソフトウェアの開発手法とはソフトウェアの開発工程の進め方のこと。複数の種類があり、下記のような手法が知られている
構造化手法
プログラム全体を、段階的に細かな単位へ分割して処理する手法。「構造化プログラミング」とも呼ばれる。分割されていることによって、動作検証や修正といったテストや保守をする上でもメリットがある。現在では広く普及している開発手法
オブジェクト指向 (OOA)
システム全体を、データと役割を持つオブジェクトの集まりとして扱うのが特徴
ソフトウェアを効率的に開発する(プログラムの開発や拡張、保守を楽にする)ために考え出された技術
現在のオブジェクト指向による開発には、標準化した統一モデリング言語(UML)が用いられることが多い
オブジェクト:物体を、属性(データ)と操作・処理(メソッド)の集合として定義し、コンピュータで扱えるようにしたもの
エージェント指向
オブジェクト指向の発展形。オブジェクト指向におけるオブジェクトを、エージェント(ユーザの意図を理解して自律的な判断に基づいた処理を実行する機能)と呼ばれるモジュールに置き換えたもの。エージェント同士が状況に応じて自律的に連携、協調できるようになることを目指している
データ中心アプローチ (DOA)
業務で扱うデータの構造や流れに着目し、システム設計を行う手法。業務で扱うデータ全体を正規化してデータベースを作成、それぞれのシステムはこのデータベースを中心に設計。統一的なデータベースを中心にして各部署のシステムが設計されるため、データの整合性・一貫性が保たれ、システム間のやりとりが容易になる。また、業務内容の変更によりシステム改変が必要になった時も、データベースの構成が定まっているため改変が容易
プロセス中心アプローチ (POA)
業務プロセスや業務上の処理に着目してシステム設計を行います。業務内容に合わせたシステム設計となるため、変更があった場合はシステムを大幅に改変する必要がある
3つの技法の違い
|
ソフトウェア開発モデル
高品質のソフトウェアを効率的に開発するために用いられる開発モデル
企業理念・企業目標

古くから利用されているシステム開発モデルの一種。各開発工程を見渡した一連の流れを、段階的に流れ落ちる滝のように見立て、開発プロジェクトを時系列に、「要求定義」「外部設計(概要設計)」「内部設計(詳細設計)」「開発(プログラミング)」「テスト」「運用」などの作業工程(局面、フェーズ)に分割し、原則として前工程が完了しないと次工程に進まない(設計中にプログラミングを開始するなどの並行作業は行わない)事で、前工程の成果物の品質を確保し、前工程への後戻り(手戻り)を最小限にする。通常は「線表(ガントチャート)」を使用してスケジューリングする
スパイラルモデル

システムをいくつかのサブシステムに分割し、サブシステムごとに「要件適宜」「システム設計」「開発」「テスト」のサイクルを繰り返しながら、システムの完成度を高めていく開発モデル。「繰り返し型モデル」とも呼ばれる。独立性の高いシステムの開発に利用される。サブシステムごとに利用者が検証し、次のサイクルで利用者の要求を取り入れることができる。そのため、利用者の満足度は高くなるが、開発工程の管理が複雑になるという特徴がある

プロトタイピングモデル
システム開発工程の早い段階で,試作品(プロトタイプ)を作成し,ユーザに評価してもらう(試用してもらう)ことによって「ユーザの要求と合っているか?」「使い勝手はどうか?」など,認識が合っているかどうかをチェックして,場合によってはプロトタイプを修正しながら,要求仕様を確定していく。この手法はシステム開発の初期段階での誤りを発見し,開発期間の短縮やコストの低減を狙ったものですが,開発を進めていくにあたって,ユーザ側の要求仕様が変わったり,拡張や変更時に問題が発生したり,進め方によっては逆に開発期間が延長してしまったりする
RAD (Rapid Application Development)
プロトタイピングモデルと同じく試作機を用いて開発を進める手法。高速アプリケーション開発などと訳す。情報システムの仕様分析、設計、開発からテストに至る全工程を、エンドユーザーを含む少人数の開発者からなるチームで一貫して担当し、開発期間を短縮する手法。 RADによる開発では一般に、スパイラルアプローチと呼ぶ方法を採用する。まず、プロトタイプと呼ばれる、大まかではあるものの実際に稼働するプログラムを作成する。それをエンドユーザーに見せて仕様を確認しながら、設計・開発・テストというサイクルを繰り返して完成品に近づけていく。無制限に設計・開発・テストのサイクルを繰り返さないように、「タイムボックス」と呼ぶ一定の開発期間をあらかじめ設定しておく。一定の期間が来たら、次の工程に強制的に移る。注意点としては,必ず実現項目ごとに優先順位をつけて,その優先順位の高い順に構築すること
インクリメンタルモデル(段階的モデル)
システムを独立性の高いいくつかのサブシステムに分割して、サブシステムごとに順次開発、リリースしていくプロセスモデル。サブシステムの開発が並列進行する点が、スパイラルモデルと異なる。最初にシステム全体の要求定義を行い,要求された機能を幾つかに分割して段階 的にリリースするので,すべての機能がそろっていなくても,最初のリリースか らシステムの動作を確認することができる。この方法は、繰り返しの単位となるN回目、N+1回目で対象となるソフトウェア構造がまったく異なるものや、依存関係のないものに適しており、繰り返しの単位の独立性が保てるので非常に分かりやすいというメリットがある。もし、N回目、N+1回目の中に、共通するソフトウェア構造が含まれていた場合は、共通部分を別々に開発してしまうことになり、ソフトウェアの保守性に問題が出る
エボリューショナルモデル
システム全体のプロトタイプを最初に作り、それをバージョンアップしていく。スパイラルモデルは、部分毎にプロトタイプ、バージョンアップとしながら全体を作っていくので、この点で異なる
共通フレーム
コンピュータ・システムの開発において、システム発注側(ユーザー)と受注側(ベンダ)の間で相互の役割や業務の範囲・内容、契約上の責任などに対する誤解がないように、双方に共通して利用できるよう用語や作業内容の標準化するために作られたガイドライン
システム構築・運用の受発注において、契約上のトラブル防止、作業内容の確認、役割分担の明確化、社内作業標準の策定や人員計画、見積もり精度の向上、品質確保などに利用される
代表的なものがSLCP(ソフトウェアライフサイクルプロセス)
SLCP(ソフトウェアライフサイクルプロセス)
日本では、1996年7月にISO 12207を日本語化したものがとしてJIS規格となっている。また、情報処理推進機構(IPA)がJIS X 0160:1996に日本独自の事情を織り込んだガイドラインである「SLCP-JCF」(Japan Common Frame:共通フレーム)を策定している。1998年に共通フレーム98が、2007年に共通フレーム2007が発行されている
リバースエンジニアリング
既存のソフトウェアを解析し、その仕組みや仕様などを明らかにすること。モジュール間の関係の解明やシステムの基本仕様の分析といった行為を含む。また、セキュリティホールやバグの発見につながるなど、システム保守やセキュリティ強化の面で役立つこともある
フォワードエンジニアリング
リバースエンジニアリングによって既存のシステムから解析された仕様をもとに、新規のシステムを開発すること
 

