プログラム再構成に関する 特許申請について

ソフトウェア工学
第四回
知能情報学部
新田直也
構造化分析と
データフローダイアグラム




構造化分析は,オブジェクト指向以前の標準的な分析手法.
構造化プログラミング(ダイクストラ)から発展した.
 システムをトップダウンに構造化(段階的詳細化).
構造化分析の結果はデータフローダイアグラム(data flow
diagram, DFD)として記述され,構造化設計に引き継がれ
る.
データフローダイアグラムの構成要素:
①入出力
入力名
/ 出力名
②データの流れ
③データの処理
④データの蓄積
データ名
処理名
ファイル名
データフローダイアグラムの例(1)

酒屋の在庫問題(付録参照):

階層化して図式化される.最上位の図を全体文脈図(コ
ンテキストダイアグラム, context diagram)という.
出庫指示書
倉庫係
積荷票
出庫依頼
依頼者
倉庫係
受付係
システム
在庫なし連絡
依頼者
酒屋の在庫問題のDFD(コンテキストダイアグラム)
データフローダイアグラムの例(2)

酒屋の在庫問題の続き:
積荷票
倉庫係
出庫指示書
在庫ファイル
在庫不足リスト
出庫依頼
依頼者
倉庫係
入庫処理
在庫なし連絡
出庫処理
酒屋の在庫問題のDFD(受付係システム)
依頼者
データフローダイアグラムの例(2)

酒屋の在庫問題の続き:
出庫指示書 出庫指示書
作成処理
倉庫係
空予定コンテナ
在庫あり
出庫依頼
在庫ファイル
出庫依頼
依頼者
在庫不足リスト
不足判定
処理
在庫なし
出庫依頼
在庫なし
処理
酒屋の在庫問題のDFD(出庫処理)
在庫なし
連絡
依頼者
設計



要求分析の結果(何を作ればよいか)に基づいて,如何に作
るべきかを考えること.
主にシステム全体をどう分割するかを決定する.
設計は,実装作業の分担,効率,システムの再利用性,保
守性,信頼性に大きく関わる.




分割がうまくできていれば,部品ごとに独立に実装できる.
よくできた部品は,他のシステムでも再利用できる.
分割がうまくできていれば, 1つの不具合は1つの部品の修正だけで
対処できる.
うまく設計できるか否かは設計者の技能によるところが大き
い.
情報隠蔽(information hiding)
1970年にD.L.パルナス
 オブジェクト指向の原型となった.
 情報隠蔽とは?
システムを複数のモジュールに分割する.そのとき,
互いの独立性を高めるように,モジュール内の不必
要な情報を他のモジュールに対して隠そうという考
え方.



そのモジュールを利用する人間が知っておくべき情報の
みを公開し,それ以外は隠蔽される.たとえば,ある処理
内部の具体的な手続き,具体的なデータ構造などは隠蔽
される.
他のモジュールの情報が隠蔽されることで,実装者は自
分の担当モジュールの実装に専念できる.
構造化設計(1)

DFDを基にモジュール分割を行う.(出庫処理を例
に…)
出庫指示書 出庫指示書
作成処理
倉庫係
空予定コンテナ
在庫あり
出庫依頼
在庫ファイル
出庫依頼
依頼者
在庫不足リスト
不足判定
処理
在庫なし
出庫依頼
在庫なし
処理
酒屋の在庫問題のDFD(出庫処理)
在庫なし
連絡
依頼者
構造化設計(2)

データの流れから関数(サブルーチン)呼出しのイン
タフェースを決める.


分岐がある場合は,分岐先を下位の処理にする.
合流がある場合は上位に戻る.
出庫依頼
在庫なし
連絡
出庫指示書,
空予定コンテナ
不足判定処理
在庫なし
出庫依頼
在庫なし
連絡
在庫なし処理
在庫あり
出庫依頼
出庫指示書,
空予定コンテナ
出庫指示書
作成処理
結合度と凝集度



結合度:
モジュールの独立性を評価する基準.結合度が低いほど独
立性は高い.結合度の低い順に,無結合,データ結合,スタ
ンプ結合,制御結合,共通結合,内容結合という基準が設定
されている.たとえば,内容結合は他のモジュールの内部を
直接参照している場合に相当し,データ結合はデータ構造を
持たない引数のやりとりのみが存在する場合に相当する.
凝集度:
あるモジュール内部の機能の関連性の高さを評価する基準.
凝集度が高い順に機能的強度,逐次的強度,通信的強度,
手続き的強度,時間的強度,論理的強度,偶発的強度という
基準が設定されている.
モジュール間の結合度が低く,凝集度が高い方がよい設計
ということになる.
仕様変更と設計変更

仕様変更:




ビジネス要因の変化に応じて,作るものを変えなければ
ならない.
顧客自身が何を作りたいか定まっていない.
顧客と開発者の意思疎通が不十分であった.
設計変更:



仕様変更に伴う設計の変更.
実装途上で設計の不備に気づく.
そもそも実装前に設計が必要か?
→オブジェクト指向とそれに基づく分析,設計法
本日のまとめ
要求定義と設計の重要性.
 構造化分析,構造化設計を中心に説明.
 決定的な手法は存在しない.



本質的には開発者の技能による.
僕の私見:



要求分析は工学に頼るな!
要求分析は開発者のコミュニケーション能力が重要.
今から勉強(研究)するなら設計法を.今後発展が見込ま
れる分野.
付録:酒屋の在庫問題
ある酒類販売会社の倉庫では,毎日数個のコンテナが搬入され
てくる.その内容はビン詰めの酒で,1つのコンテナには10銘柄ま
で混載できる.扱い銘柄は約200種類ある.倉庫係は,コンテナ
を受け取りそのまま倉庫に保管し,積荷票を受付係へ手渡す.ま
た受付係からの出庫指示によって内蔵品を出庫することになって
いる.内蔵品は別のコンテナに詰め替えたり,別の場所に保管す
ることはない.空になったコンテナはすぐに搬出される.
さて受付係は毎日数十件の出庫依頼を受け,そのつど倉庫係へ
出庫指示書を出すことになっている.出庫依頼は出庫依頼票また
は電話によるものとし,1件の依頼では,1銘柄のみに限られてい
る.在庫がないか数量が不足の場合には,その旨依頼者に電話
連絡し,同時に在庫不足リストに記入する.そして当該品の積荷
が必要量あった時点で,不足品の出庫指示をする.また空になる
コンテナを倉庫係に知らせることになっている.
受付係の仕事(在庫なし連絡,出庫指示書作成および在庫不足リ
スト作成)のための計算機プログラムを作成せよ.