システム開発のプロセス
システム開発のプロセスとは、システムの開発から運用までの全体的な流れを定義したプロセスのことです。
プロジェクトの目標を達成するために、①システム要件定義、②システム方式設計、③ソフトウェア要件定義、④ソフトウェア方式設計、⑤ソフトウェア詳細設計、⑥プログラミング、⑦テストといったステップを経て、最終的に完成したシステムが利用者に提供されます。
このプロセスを適切に管理することで、品質の高いシステムが効率的に開発されることを目指します。
システム開発のプロセスは以下のとおりです。
この段階では、開発者が実務に精通している利用者と共に、開発するシステムの具体的な利用方法について分析し、文書化します。
分析の対象となるのは以下の内容です。
- システム化の目標、システムの対象範囲(例:対象業務・対象部門)
- システムの機能及び能力(例:システムの応答時間の目標値)、ライフサイクル
- 事業、組織及び利用者の要件
- 信頼性、安全、セキュリティ、人間工学、インタフェース、運用及び保守の要件
- システム構成要件
- 設計制約及び適格性確認の要件
- 開発環境
- 品質、費用と期待される効果
- システム移行の移行要件、妥当性確認要件
成果物:システム要件定義書など
開発者がシステム要件定義で明らかになった内容を元に、システム要件の実現に必要なシステム構成を決定します。
- システムの最上位レベルでの方式を確立する。つまり、それぞれのシステム要件をハードウェアで実現するのか、ソフトウェアで実現するのか、手作業で実現するのかそれぞれ識別し、必要となるハードウェア構成品目、ソフトウェア構成品目および手作業を明確にする。
- 各システム要素の内部及び外部のインタフェースを定義する。
- システム結合のためのテスト要件の定義
成果物:システム設計書など
開発者は、システム方式設計で明確化したシステムを構成する個々のソフトウェア構成品目がどのような機能や性能を持つべきかを具体的に定義し、文書化します。
- a)性能、物理特性及びソフトウェア品目が動作する環境条件を含む機能及び能力の仕様
- b)ソフトウェア品目の外部インタフェース
- c)適格性確認の要件
- d)運用及び保守の方法、環境への影響並びに要員の傷害に関するものを含む安全性仕様
- e)機密情報の漏えいに関するものを含むセキュリティ仕様
- f)人的エラー及び教育訓練に配慮した人間工学仕様。これには、手作業、人間と装置との相互作用、要員への制約及び人の注意を集中させることを必要とする分野に関係するものを含む。
- g)データの定義及びデータベースの要件
- h)運用現場及び保守の現場における納入ソフトウェア製品の導入及び受入れに対する要件
- i)利用者用文書の要件
- j)利用者の運用要件及び実行要件
- k)利用者の保守要件
成果物:ソフトウェア要件定義書など
開発者がソフトウェア要件定義で定義された要件や機能を実装したソフトウェアの設計を行います。
- ソフトウェア構造とコンポーネントの方式設計
- 各インターフェースの方式設計
- データベースの最上位レベルの設計
- ソフトウェア結合テスト要件の定義
成果物:ソフトウェア設計書など
ソフトウェア方式設計に基づき、各ソフトウェア品目についてプログラミング、コンパイル、テストが行えるレベルまでの詳細設計を行います。
- ソフトウェアコンポーネントの詳細設計
- ソフトウェアインタフェースの詳細設計
- データベースの詳細設計
- ソフトウェア単体テスト要件の定義
ソフトウェア詳細設計書をもとに、プログラミング言語を使ってソフトウェアを実際にコード化します。
この段階では、コーディングスタイルや命名規則、コメントなどの品質基準に従って、効率的で保守性の高いコードを書くことが重要です。
- ソフトウェアユニットの作成
- データベースの作成
成果物:プログラム、データベースなど
ソフトウェアの品質特性
ソフトウェアの品質特性とは、ソフトウェアが持つべき特性や性能を評価するための基準です。
主な品質特性には機能性、効率性、使用性、信頼性などがあり、これらを適切に満たすことで、ソフトウェアの全体的な品質が向上します。
機能性 | ソフトウェアが提供する機能がどれだけ正確で完全であるかを示します。つまり、ソフトウェアがユーザーの要求や仕様を満たし、予期された結果を正しく生成することが重要です。 |
効率性 | ソフトウェアがシステムのリソースをどれだけ効果的に利用して目的の性能を達成するかを指します。これは、ソフトウェアが消費するCPU時間、メモリ、その他のリソースの量と、それによって達成される処理速度や応答時間に関連します。 |
使用性 | ソフトウェアがユーザーにとってどれだけ使いやすいかを示します。これには、ユーザーインターフェースの理解しやすさ、学習しやすさ、操作の簡単さ、魅力的なデザイン、ユーザーがソフトウェアを効果的に使用できるかどうかが含まれます。 |
信頼性 | ソフトウェアが特定の条件下で正確かつ一貫して機能する能力です。これには、ソフトウェアの成熟度、故障の頻度、回復性(エラーからの回復能力)、およびデータの整合性や耐久性が含まれます。 |
保守性 | ソフトウェアのバグ修正、アップデート、機能拡張がどれだけ簡単に行えるかを示します。高い保守性を持つソフトウェアは、変更が容易で、将来のニーズに合わせて進化しやすいです。 |
移植性 | ソフトウェアをある環境から別の環境へ容易に移すことができる程度を指します。これには、異なるオペレーティングシステム、異なるデバイス間でのソフトウェアの実行能力が含まれます。高い移植性を持つソフトウェアは、さまざまなユーザー環境に柔軟に対応でき、利用可能な範囲が広がります。 |
関連用語
レビューは、システムやドキュメントなどの成果物を、開発者自身や第三者が検証し、不備や問題点を指摘し改善するプロセスです。主に品質管理のために行われます。
共同レビューは、システムの利用者側と開発者側から複数の関係者が集まり、利用者の視点からシステムやドキュメントなどの成果物を検証し、利用者の要求を満たしているかを確認するプロセスです。利用者と開発者の双方の意見を反映し、システムの品質向上に貢献します。
コーディング規約とは、プログラムを書く際に従うべき一連のルールやガイドラインです。これにより、チーム内でのコードの一貫性が保たれ、可読性や保守性が向上します。
コーディング規約には、命名規則(変数や関数の名前の付け方)、インデント(字下げ)スタイル、コメントの書き方、コードの構造などが含まれます。
各チームやプロジェクトごとに独自のコーディング規約を設定することがありますが、一般的なプログラミング言語では標準的な規約が提案されていることもあります。