ソフトウェア工学特論

ソフトウェア工学特論
第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