Comments
Description
Transcript
ソフトウェア工学特論
ソフトウェア工学特論 第6回 2005年10月20日 湯川 高志 1 ソフトウェア工学特論 第6回 2005-10-20 今回の内容 構造化チャート | HCPチャートの詳細 | | 2 レポート課題 ソフトウェア工学特論 第6回 2005-10-20 構造化チャート フローチャートから構造化チャートへ | 構造化チャート | 基本制御構造を図式として表現できる z 段階的詳細化に基づいてプログラムの 設計を進めることができる z 実行制御の順序が一方向 z チャートの組合せに対応 z 3 ソフトウェア工学特論 第6回 2005-10-20 構造化チャート (続き) | | | | | | 4 NSチャート(Nassi-Shneiderman chart):IBM DSD(Design Structured Diagram): 英国標準 PAD(Problem Analysis Diagram): 日立 HCP(Hierarchical and ComPact description chart): NTT SPD(Structured Programming Diagram): NEC YAC(Yet Another Control chart): 富士通 ソフトウェア工学特論 第6回 2005-10-20 NSチャート | | 連接 選択 処理1 条件 処理2 Y 条件1 条件 処理1 N 処理2 処理1 条件2 処理2 条件3 処理3 DO WHILE(条件) | 処理 繰返し 処理 REPEAT UNTIL(条件) 5 ソフトウェア工学特論 第6回 2005-10-20 NSチャートの例 初期設定 入力データを1件読む DO WHILE(入力データがある限り) 入出庫区分が入庫 Y N 入庫処理をする 出庫処理をする 出力領域を編集する 入出庫リストに出力する 次の入力データを読む 終了処理 6 ソフトウェア工学特論 第6回 2005-10-20 NSチャートの特徴 完全なプログラムの構造化: GO TO文 に対応するものがまったくない | 全体構造を設定するとき,BOXの大きさ をどれくらいにするかむずかしい | 条件文や繰返しの階層が深くなりすぎる と書きづらい | 大きさが固定されてしまうため,一部分 の変更,修正がしづらい | 7 ソフトウェア工学特論 第6回 2005-10-20 PADチャート | 木構造チャートの一種 連接 処理1 処理1 条 件 処理2 処理2 処理3 選択 処理1 条件 処理2 8 繰返し WHILE 条件 処理 ソフトウェア工学特論 第6回 ULTIL 条件 処理 2005-10-20 PADチャートの特徴 | | | 完全な構造化 制御構造が,上から下,左から右へと展開され ているため,見易くなる(繰返しのネストなど) 設計だけでなく,プログラミングとテストに対す る方法論も提示(TREE WALK) z z | 9 上から下,左から右へたどりながらコーディング プログラムの網羅検査が容易 表現に融通性があり,変更,修正がしやすい ソフトウェア工学特論 第6回 2005-10-20 HCPチャート | 木構造チャートの一種 連接 処理1 処理2 選択 複合選択 条件 条件 Y 処理1 状態1 N 処理2 状態2 処理1 処理2 状態n 処理n 10 ソフトウェア工学特論 第6回 2005-10-20 HCPチャート(続き) 繰り返し(後判定) 繰り返し(前判定) …をする 11 …をする (脱出条件) 処理をする 処理をする (脱出条件) ソフトウェア工学特論 第6回 2005-10-20 HCPチャートの例 入出庫リストを作成する 初期処理をする 初期設定 入力データを1件読む 明細を出力する 入力ファイルを全件読む (EOF) 入出庫区分が入庫の時 Y 入庫処理をする 12 ソフトウェア工学特論 第6回 N 出庫処理をする 2005-10-20 HCPチャートの特徴 | 構造化+制限付きGO TO(ループからの途中脱出) | 機能要素に対応させながら処理手順を記述すること ができ,WHATとHOWを同時に把握できる | 入出力データと機能処理の関連が明確となる ∼を…する(WHAT) 処理手順(HOW) 13 基本線 ソフトウェア工学特論 第6回 2005-10-20 HCPチャート | | データと制御の両者を同一のチャートに記述 段階的詳細化 z | プログラム単位を1ページのチャートに z | 1ページに納まらない場合は,詳細化の際に ページを分割 構造化 z 14 左→右に詳細化 限定的なGO TOの使用 ソフトウェア工学特論 第6回 2005-10-20 データの記号 データの型 | | | | | 基本データ 繰返し型データ z 列データ,配列,リスト構造 データなど 選択型データ z 選択的な値,構造をとるデータ 参照型データ z <>内に参照先を記述する 被参照 z データの型を表す記号の右側 に「*」をつけて表す XXX XXX XXX XXX <xxx> * <xxx> YYY 15 ソフトウェア工学特論 第6回 2005-10-20 データの記号 データ間の関係 | 階層関係 z 構造体 などの 階層を 持つ データ | 順序関係 | 独立関係 | 選択関係 z xxxは選 択のた めの条 件 16 ソフトウェア工学特論 第6回 (xxx) 2005-10-20 基本データ データ名 [属性] "値" | 例 品名 [文字列] "りんご" | 良い例 社員名 | 悪い例 name 17 ソフトウェア工学特論 第6回 2005-10-20 繰り返し型データ データ名 [属性] 値 | 例 日付の列 [配列] "1... 31" | 正しい例 データファイル ←繰り返し型データ データレコード ←繰り返される要素 | 誤った例 データファイル データレコード 18 ソフトウェア工学特論 第6回 ←繰り返し型データ ←繰り返される要素 2005-10-20 選択型データ データ説明 | 例 読込み状態 ”読込み中|読込み中でない|異常” | 下位階層を持つ場 合の例 読込み状態 (ファイルアクセス中) 読込み中 (読込み前 or 読込み正常終了) 読込み中でない エラー状態 19 ソフトウェア工学特論 第6回 2005-10-20 参照型データと被参照 データ説明 <参照先> * <参照元> データ説明 品名テーブル * <real name> 品名実体 品名長 品名種別 品名実体 <real name> 属性 品名 20 ソフトウェア工学特論 第6回 2005-10-20 順序関係 | データ間に順序関係があるときに,それらを上 から下に並べて線で連結する 入出庫情報 品名 入出庫別 個数 21 ソフトウェア工学特論 第6回 2005-10-20 独立関係 | 各データ要素に順序関係がなく,各々独立な 関係にあるデータのまとまり 品名 りんご みかん バナナ 22 ソフトウェア工学特論 第6回 2005-10-20 データの記号 データの入出力/データフロー | 入力データ | 出力データ | 更新データ | データフロー z 23 矢印の向きは データの流れ の向き ソフトウェア工学特論 第6回 2005-10-20 処理と制御の記号 処理 | 基本型処理 | 選択処理 z #LL XXX | z ( )内のaaa, bbbは 選択条件 は「その他の 場合」を表す #LL XXX 繰返し処理 (aaa) #LL XXX (bbb) 24 ソフトウェア工学特論 第6回 2005-10-20 処理と制御の記号 処理(続き) | モジュール呼出し XXX | 別ページ参照 XXX 25 ソフトウェア工学特論 第6回 2005-10-20 処理と制御の記号 制御 | 開始 | 終了 | レベル開始 | 例外条件 26 ソフトウェア工学特論 第6回 2005-10-20 処理と制御の記号 制御(続き) | 27 飛越し z Nは脱出するレベル(1は 省略可) z #LLLは脱出する処理ラベ ルの名称 #LLL z LLLは「goto #XXX」, 「return」などの脱出方法 LLL ソフトウェア工学特論 第6回 N 2005-10-20 制御の移行パターン { statement; statement; } または : func(10); : int func(int i) { statement; statement; } 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 28 ソフトウェア工学特論 第6回 2005-10-20 制御の移行パターン while( cond ) { statement; } 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 29 ソフトウェア工学特論 第6回 2005-10-20 制御の移行パターン(続き) for(i=0; i<10; i++) { statement; } 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 30 ソフトウェア工学特論 第6回 2005-10-20 制御の移行パターン(続き) switch(exp) { case c1: statement; break; case c2: statement; break; default: exit(); } 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 31 ソフトウェア工学特論 第6回 2005-10-20 制御の移行パターン(続き) statement; while(1) { if (cond) goto PP_OUT; while(1) { if (cond) goto OUT2; statement; } statement; } OUT2: statement; PP_OUT: 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 32 ソフトウェア工学特論 第6回 2005-10-20 制御の移行パターン(続き) Cではうまく書けない | C++の場合 try { statement; if (cond) { throw ...; } statement; } catch ( ... ) { statement; } | 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 33 ソフトウェア工学特論 第6回 2005-10-20 HCPチャートのレイアウト 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 34 ソフトウェア工学特論 第6回 2005-10-20 HCPチャートの記述例 長野 宏宣 監修,浅見 秀雄,忠海 均 共著 「HCPチャート – 階層化プログラム設計図法」 電気通信協会 より 35 ソフトウェア工学特論 第6回 2005-10-20 HCPチャート作成の手順 1. 2. 3. 4. 5. 6. 36 モジュールの機能を明らかにする インタフェースデータを書く 処理を書く 内部データを書く データフロー線を書く 捕捉説明を書く ソフトウェア工学特論 第6回 2005-10-20 1.モジュールの機能を 明らかにする | そのモジュールは どういうデータを入力して z どんな処理をして z そのようなデータを出力するか z | 37 1枚のHCPチャート=プログラミング言語 上での1つの関数や手続き,となるのが 理想的 ソフトウェア工学特論 第6回 2005-10-20 2.インターフェースデータ を書く | | そのモジュールが取り扱うデータ項目まで詳細 化 例: ファイル内の情報を扱うプログラム z そのモジュールが • レコード単位でデータを扱う • レコードの中身までは関知しない z z 38 「ファイルはレコードの並びかならなる」 もしも,そのモジュールがレコードの中身まで操 作するならば,レコードの中身までの詳細度で 記述 ソフトウェア工学特論 第6回 2005-10-20 3.処理を書く 処理は階層的に記述 | レベルごとに書く | z 39 一つの処理だけの詳細化を先に進めて はいけない → 各処理のバランスが悪く わかりにくいHCPチャートになる可能性 あり ソフトウェア工学特論 第6回 2005-10-20 処理を書く 第2レベルまで書く ファイルをコピーする | 前処理 コピーする | 第1レベルを書き,第2 レベルを前処理,本 処理,後処理の順に 書く 各処理の詳細化が楽 なように,処理の間に スペースを取って置く 後処理 40 ソフトウェア工学特論 第6回 2005-10-20 処理を書く 前処理と後処理を書く ファイルをコピーする 前処理 入力ファイルを開く 出力ファイルを開く | 前処理と後処理 が定型的な処理 で,かつ対をな す事が多いので, 先に書く コピーする 後処理 入力ファイルを閉じる 出力ファイルを閉じる 41 ソフトウェア工学特論 第6回 2005-10-20 処理を書く 本処理を書く ファイルをコピーする 前処理 入力ファイルを開く 出力ファイルを開く コピーする 入力ファイルから1レコード読む (ファイル終り) 後処理 出力ファイルに1レコード書き込む 入力ファイルを閉じる 出力ファイルを閉じる 42 ソフトウェア工学特論 第6回 2005-10-20 4. 内部データを書く 処理を書きながら必要の都度記述して 行く | 詳細化の度合は処理の詳細化の度合と 合せる | 43 ソフトウェア工学特論 第6回 2005-10-20 5. データフロー線を書く 処理とデータを入出力関係に応じて線で つなぐ | データの流れに沿って処理を追い,処理 やデータに誤りがないか確認 | 44 ソフトウェア工学特論 第6回 2005-10-20 6. 補足説明を書く | 読む人の立場にたって わかりにくいところ z 詳細な説明が必要なところ z を補足 45 ソフトウェア工学特論 第6回 2005-10-20 ソフトウェア工学特論 レポート(中間期)課題 46 ソフトウェア工学特論 第6回 2005-10-20 レポート(中間期)課題 | N元連立1次方程式の解を求めるプログラムを 設計しHCPチャートに表せ a11 x1 + a12 x 2 + L + a1NxN = b1 a 21 x1 + a 22 x 2 + L + a 2 NxN = b 2 L aN 1 x1 + aN 2 x 2 + L + aNNxN = bN | 47 N,a,bはファイルから与えることとする ソフトウェア工学特論 第6回 2005-10-20 留意点 Nは自然数,a,bは実数をとる | 不定,不能の判定も行うこと | z 不定の場合は単に「不定」と出すだけで 良い(変数の関係式のよる解は出さなく て良い) 連立1次方程式の解法を知らないプログ ラマがプログラムを書ける程度まで詳細 化すること | ヒント: 掃出し法 or ガウスの消去法 | 48 ソフトウェア工学特論 第6回 2005-10-20 スケジュール | 第7回目の講義(10月27日)は,若干の 補足を行った後,レポート作成時間 z レポート用紙(A4)を持参のこと 時間内にできた者は,その場で提出 | 時間内にできなかった者は,第8回目の 講義(11月10日)の際に提出 | 49 ソフトウェア工学特論 第6回 2005-10-20