# 1.2 要求分析・設計手法 ###### tags: `SD25` `授業ノート` ### 1.フローチャート(流れ図)  処理手順を統一された記号で図式化したもの * システム流れ図 * プログラム流れ図 さらにプログラム流れ図について言えば * 概括フローチャート * 詳細フローチャート と分けられることもある ### 2.構造化チャート 1. **NSチャート** 制御構造を図式化する 2. **PAD** アルゴリズムの論理構造を図式化 問題分析図とも呼ばれる 3. **SPD (Structured Programming Diagram)** 木構造でアルゴリズムの論理構造を図式化 PADとは図式が違う 4. 5. **木構造チャート** ### 3. デシジョンテーブル(決定表) 論理構造における分岐条件の網羅を簡潔に把握できるようにするための図式手法 ## 設計手法 | P.30 1. **構造化分析・設計** * 構造化分析 システムの機能と、機能間のデータの流れに着目する ドキュメントとしては、以下の3つがある 1. DFD ドキュメントの流れを表現、階層的記述が可能 1. データ辞書 DFDに出てくるデータの構造を定義 1. ミニスペック 各機能ごとの具体的処理内容 * 構造化設計 分析結果を具体的にモジュールに分割、設計する 1. **プロセス中心設計** * 機能を中心に分析を行う * 重複した機能を設計することも生まれる * 業務を中心として捉えた手法 1. **データ中心設計** * 分析の主眼をデータにおいて行う * データをどう処理するのかという点から分析を行う * データ分析から入っていく 1. **オブジェクト指向設計** * データ中心設計をさらに推し進めた手法 * データ中心をベースに、各機能を持ったモジュールを(部品)を考える 1. 概念 * データ中心をベースに、各機能をもったモジュール(部品)を考える * 「物」の「状態(属性、データ)」「振舞い(メソッド、処理)」を考えてシステム設計に生かす手法 * 「状態」と「振舞い」を一体化する→カプセル化 1. オブジェクト/クラス/インスタンス * オブジェクト・・実体のあるもの * クラス   ・・実体のあるものを作るためのもの * インスタンス・・クラスを基に作られる、実体のあるものを作るもの * クラスは.. <span style="color: red">属性(扱うデータ)を持ち、 属性から結果を生み出す処理(メソッド)を持つ</span> 1. メッセージ * オブジェクトに対して指示することができる唯一の手段 * 関数に対する引数(パラメータ)と考えることもできる 1. インヘリタンス(継承・相続) * 主に上位クラスの属性や処理を引き継ぐことをいう * 上位クラスを「スーパークラス」という * 下位クラスは「サブクラス」 * 継承を活用することで、効率的な開発が可能になる * 各サブクラスにおいて共通する項目を、スーパークラスとして定義することを「凡化(凡用化)」 * スーパークラスから細分化してサブクラスに分けることを「特化」するという 1. ポリモフィズム(多様性、多相性) * 同一メッセージであっても、受け取る側のオブジェクトにより動作が異なること 1. 複合オブジェクト * 複数のオブジェクトを組み合わせて作ったオブジェクト * こういう構造を「集約・分解構造」と言います。 1. クラスライブラリ * クラスを標準化しておき、再利用可能なものとして整備されたもの 5. **モジュール設計** * 要求仕様に基づき機能分割を行う * 分割された機能をプログラムとして定義 * モジュール分割 1. モジュールとは * 一つのまとまった機能 * 独立してコンパイル可能 * 他のモジュールから呼び出されることがある * 分割の基準は独立性を高くする 1. 得られる効果 * モジュール群が構造化されわかりやすい * 変更・修正の影響が限定化できる * 高品質ソフトウェア作成指針 1. 独立性の判断基準 * 強度 → モジュール内の構成要素同士の関係性の強さ * 結合度 → モジュール間の関連・連携の強さ(弱いほど良い) 6. **画面設計** * UI * 使いやすさ → 評価に影響 1. 画面設計とは * GUI基本(CUIはコマンドプロントみたいな) * GUI→直感的操作 1. 手順と作業内容 * 1.全体像の作成 * 2.標準化 * 3.画面フロー設計 * 4.表示方法の検討 * 5.具体的レイアウト設計 1. 具体的手順 1. 全体像の作成 * 必要な全ページを洗い出す * 構成図(P.39 図表1-2-28) 1. 標準化 * 表示位置 * 表示方法(レイアウト、色彩、語句統一) * 入力方法(選択式、直接入力など) 1. 画面フロー設計 * 画面フローは処理フローにもなる 1. 表示方法の検討 * CUIかGUIかであったり * GUIであれば、どういうフォーム部品を利用するのか? * 検討の際には、利用対象となるユーザーについても十分に考慮するとが必要 * 見やすい、わかりやすい、間違いにくいということに配慮してやること 1. レイアウトの設計 * 具体的な各ページのレイアウトを設計 →これをもとにページ作成 1. **報告書設計** * 開発者・ユーザー双方にとってわかりやすい報告書とすることが重要 1. 報告書の設計とは * 様式(フォーマット)、提供方法などから検討し、ページレイアウトなどを設計す 1. 手順と作業内容 * 出力に関する検討 * 出力方式・媒体の決定 * レイアウトの作成 1. 具体的手順 * 報告書を作成する目的・時期について検討する * 検討項目としては * 報告書タイトル * 使用目的 * 作成周期・時期 * 期限 * 配布先 * 数量 * 形式 * 出力項目の位置 1. 出力形式・媒体の決定 * 表示・印刷・電子データ 1. レイアウト作成 * 実際の物理レイアウト作成 1. **コード設計** * コード : 情報を効率よく管理するためのもの 1. コード設計とは * 目的 * データの識別・分類・配列が用意 * 単なるコード化はあまり意味がない * コードに意味をもたせすぎるのは拡張性や変更の際の制限となる * コードの変更は、システムの大幅な変更にもつながるので、設計は慎重に * 機能 * 識別機能(一意性・ユニーク性) * 分類機能 * 配列機能(整列) * チェック機能(チェックデジット) 1. 設計上の留意点 1. 使用範囲と使用期間 * 適用範囲 * 使用期間 1. わかりやすさ * 扱いやすい(短く簡潔、単純) * 体系化(グループ分けしやすい) * 明瞭性(数字を原則) 1. 手順と作業内容 * 対象の選定 * 目的の明確化 * 使用期間とデータ量の予測 * 利用範囲 * コード化作業とコード表作成 * コード表作成 ※p46:a~eを良く読んでおいて 1. よくあるコードの例 * 連番、区分、10進、桁別、表意、チェックデジット * 各コードタイプごとの特徴は、p49:図表1-2-40を良く読んで 1. チェック法 * チェックデジット法・・・誤り発見 → 特定の計算式で得た値をコードに付け足す * 誤り訂正方式としてはECCがある :man_and_woman_holding_hands: * チェックデジットの計算方法例はP50参照 1. **ユーザーインターフェース設計** * 現在では画面設計と同様の意味