マインドマップギャラリー 第5章 全体設計
ソフトウェアエンジニアリングの構造化設計 - 全体的な設計を行い、グローバルな視点を持ち、より少ない費用で、複数の考えられるシステム実装計画とソフトウェア構造を比較的抽象的なレベルから分析および比較し、それらから最適な計画とソフトウェア構造を選択して、達成することができます。より低コストで高品質のソフトウェア システムを開発します。
2023-10-31 18:37:17 に編集されました第5章 全体設計
タスク:
基本的な目的は、「要約すると、ソフトウェア システムを実装するにはどうすればよいですか?」に答えることです。
もう 1 つの重要なタスクは、システム内の各プログラムがどのモジュールで構成されているか、およびこれらのモジュール間の関係を決定する、ソフトウェアの構造を設計することです。
必要性:
グローバルな視点を持ち、より少ない費用で複数の可能なシステム実装ソリューションとソフトウェア構造をより抽象的なレベルから分析および比較し、最適なソリューションとソフトウェア構造を選択して、高品質のソフトウェア システムを低コストで開発できます。
5.1 設計プロセス
システム設計段階
1. 代替オプションを検討する 2. 合理的なオプションを選択する 3. 最適なオプションを推奨する
構造設計段階
1. 機能分解 2. ソフトウェア構造の設計 3. データベースの設計 4. テストドキュメントの作成 5. ドキュメントの作成 6. レビューとレビュー
5.2 設計原則
5.2.1 モジュール性
モジュール: モジュールはプログラムの基本的な構成要素です。
モジュール化: プログラムを独立して名前が付けられ、独立してアクセスできるモジュールに分割することです。モジュールを組み合わせて全体を形成すると、ユーザーの要件を満たすように指定された機能を完成させることができます。 。
機能(利点):
1. モジュール化によりソフトウェア構造が明確になり、設計が容易になるだけでなく、読みやすく理解しやすくなります。
2. モジュール化によりソフトウェアのテストと制御が容易になる
3. モジュール化によりソフトウェアの変更が容易になる
4. ソフトウェア開発プロジェクトの組織と管理に貢献する
5.2.2 抽象化
抽象的な:
抽象化とは、物事の詳細を一時的に考慮せずに、物事の本質的な特徴を抽象化することです。ソフトウェア エンジニアリング プロセスの各ステップは、ソフトウェア ソリューションの抽象化レベルをさらに洗練させたものです。
抽象的なアプリケーション:
実現可能性検討段階では、ソフトウェアはシステムの完全なコンポーネントとして使用され、要件分析段階では、全体設計から詳細設計段階への移行において、問題環境内で使い慣れた方法を使用してソフトウェア ソリューションが記述されます。 、抽象化のレベルは徐々に低下し、最終的にソース プログラムが作成されると、最低の抽象化レベルに達します。
抽象化の利点:
抽象から具体へトップダウンで制御を割り当てると、ソフトウェアの設計と実装が簡素化され、ソフトウェアの理解性とテスト容易性が向上し、ソフトウェアの保守が容易になります。
5.2.3 徐々に洗練を求める
意味
主要な問題の解決に集中できるように、問題の詳細についての検討は後回しにしてください。
抽象化と段階的な洗練の違い:
サブトピック
[抽象化と段階的な洗練の違い:
抽象的な:
定義: 複雑な問題を基本的な質問や概念に還元するプロセス
目的: 問題の複雑さを軽減し、理解と処理を容易にする
方法:分類、帰納、一般化など。
徐々に洗練していきます:
定義: 問題を高いレベルから低いレベルに徐々に洗練していくプロセス
目的: 複雑な問題を管理可能な小さな問題に分解して、設計と実装を容易にする
手法: 分解、精製、最適化など。
違い:
抽象化はトップダウンのプロセスですが、段階的な洗練はボトムアップのプロセスです。
問題の全体的な構造に抽象的に焦点を当て、徐々に洗練して問題の具体的な詳細に焦点を当てます。
抽象化では分類と帰納が強調され、段階的な洗練では分解と洗練が強調されます。
抽象化と段階的洗練は相互に補完し合い、複雑な問題を解決するために一緒に使用されます]
5.2.4 情報の隠蔽とローカリゼーション
【情報隠蔽とローカリゼーション
情報隠蔽
意味
システム内部の詳細を非表示にする
必要な情報だけを公開する
アドバンテージ
複雑さを軽減する
セキュリティの向上
保守性の向上
ローカリゼーション
意味
関連する機能やデータをまとめて配置する
依存関係を減らす
アドバンテージ
効率の向上
カップリングを減らす
保守性の向上 ;]
5.2.5 モジュールの独立性
モジュールに依存しない
モジュールの独立性
モジュールの独立性とは、モジュール内の部品間の相互依存性が低く、モジュール間の結合度が低いことを指します。
モジュールの独立性により、システムの保守性と拡張性が向上します。
モジュールの独立性の尺度
モジュールの独立性は凝集性と結合によって測定できます
凝集度は、モジュール内のさまざまな部分間の緊密さを指します。凝集度が高いほど、モジュールの独立性が高くなります。
結合度はモジュール間の相互依存度を指し、結合度が低いほどモジュールの独立性が高くなります。
モジュールの独立性を向上させる方法
情報隠蔽テクノロジーを使用してモジュール内の実装の詳細を隠し、必要なインターフェイスのみを公開します
モジュール設計手法を採用してシステムを複数のモジュールに分割し、各モジュールが特定の機能を担当します
インターフェイス設計手法を使用して、モジュール間の対話型インターフェイスを簡潔かつ明確に設計し、モジュール間の結合を軽減します。
階層化設計手法を採用してシステムを複数のレベルに分割し、各レベルが特定の機能を担当し、モジュール間の結合を軽減します。
モジュールの独立性の重要性
モジュールの独立性はソフトウェア設計の品質を測る重要な指標の 1 つです
モジュールの独立性により、システムの保守性と拡張性が向上し、システムの保守と拡張のコストが削減されます。
モジュールの独立性により、システムの信頼性と安定性が向上し、システム エラーの可能性が低減されます。
可能な限りデータ カップリングを使用し、コントロール カップリングと機能カップリングの使用を減らし、パブリック環境のカップリングの範囲を制限し、コンテンツ カップリングをまったく使用しません。
5.3 ヒューリスティックルール
1. ソフトウェア構造の改善とモジュールの独立性の向上
2. モジュールのサイズは適度である必要があります
3. 深さ、幅、ファンアウト、ファンインが適切である必要があります。
4. モジュールのスコープは制御ドメイン内である必要があります。
5. モジュールインターフェースの複雑さを軽減するよう努めます
6. 入口と出口が 1 つずつあるモジュールを設計します。
7. モジュールの機能は予測可能である必要があります
5.4 ソフトウェア構造を説明するためのグラフィカルツール
5.4.1 階層図とHIPO図
5.4.2 構造図
5.5 データフロー指向の設計手法
構造化されたデザインアプローチ
5.5.1 コンセプト
コンセプト
2種類の情報の流れ
1.交換の流れ
2.物流
5.5.2 変換分析
5.5.3 モノの分析