プログラム設計技術

「経営情報学会 情報システム工学研究部会」
「プログラム設計技術」
-ソフトウェアの要求定義から設計まで2006年11月25日
玉井 哲雄
(東京大学大学院総合文化研究科)
1
概要
„
„
„
„
„
ソフトウェアプロセス
要求分析
モデル化技術
オブジェクト指向モデル
アーキテクチャ設計
「酒屋問題」を例として要求分析から設計まで
の流れを解説する
2
ソフトウェアプロセス
3
プロセスとプロダクト
„ プロダクト: 中間製品を含めたすべ
ての生産物
プロセス: プロダクトを産み出す工程
„ ソフトウェアの開発プロセスを単にソ
フトウェアプロセスという.
4
ソフトウェアのライフサイクル・モデル
„ 標準的なソフトウェア開発手順を定
め開発作業をガイド
„ 開発プロジェクトの管理モデルとして
使用
„ 開発方法論,ツールと開発環境,文
書体系などを定める基盤
5
ライフサイクル・モデル
„ 落水型ライフサイクル・モデル
分析
設計
プログラ
ミング
テスト
運用
保守
6
V-モデル
受入れ
分析
テスト
運用
保守
システム
テスト
設計
プログラ
ミング
単体
テスト
7
落水型モデルの強調点
„ フェーズ間の明確な区切りときちんと
した文書による受け渡し
„ フェーズの手戻りの最小化
„ 管理のし易さ
8
他のライフサイクル・モデル
„ プロトタイピング型モデル
„ 逐次進化型モデル
„ 再利用モデル
„ 並行開発プロセス
(concurrent engineering)
„ 軽快な(agile)プロセス
z 極端(extreme)プログラミング(XP)
9
プロトタイピング型モデル
プロトタ
イピング
分析
設計
プログラ
ミング
テスト
運用
保守
10
逐次進化型モデル
分析
設計
プログラ
ミング
テスト
運用
保守
11
極端プログラミング(XP)
„ ソフトウェア公開の予定をまず決め,それに従っ
„
„
„
„
て開発計画設定
公開は小さな単位で頻繁に
開発プロジェクトを小さい作業の繰り返しに分割
まずテストケースを作る.テストケース=仕様
再構成(refactoring)の徹底
12
プロセスの評価
„ プロセスの成熟度評価モデル
z SE-CMM (Capability Maturity Model for
Software)
‹ CMU-SEIで開発
‹ 元来は米国国防省のソフトウェア調達先の評
価用モデル
‹ CMMIに統合
„ ISOにおけるプロセスモデルの標準化
13
何を作るか?
- 要求分析 -
14
要求工学
„ システム/ソフトウェアへの要求を系統的
に抽出し,整理し,定義し,分析し,追跡
する方法
„ 1970年代半ばに提唱
„ 1990年代半ばから要求工学国際会議
‹ 2004年に京都で開催
15
要求分析の考え方
„ 要求抽出型
z 要求を持つユーザの存在を仮定
z 代表的な手法: シナリオ作成
z ○顧客指向 ×散漫になりがち
ニーズ
意図
抽出
要求
16
要求分析の考え方(2)
„ 目標指向型
z システム開発が目指す目標を展開し
ていく.
z ○系統的, ×目標に特化した解
分解
統合
目標
葉の
収集
目標木
要求
17
要求分析の考え方(3)
„ 領域モデル型
z 対象領域を写像してモデルを作る.
z オブジェクト指向モデルなどを使用
z ○要求変化に柔軟,×システムイメー
ジが見えにくい
写像
問題領域
モデル
対象世界
18
酒屋倉庫管理の目標展開
顧客満足度の向上
よい注文対応
迅速な出荷
速やかな
出庫指示
在庫コストの減少
よい商品
出荷間違い
の防止
多様な銘柄
の仕入れ
-
過剰在庫
の圧縮
商品の
品質維持
商品の滞留
時間短縮
在庫切れ
防止
在庫状況の
正確な把握
入庫後
即時登録
先入れ
先出し
19
要求の種類
„ 機能要求
„ 非機能要求
z 性能
z 使いやすさ
z 安全性(security)
z 保守性
z 可搬性(portability)
z 組織文化,法律などからくる制約
20
要求仕様
„ 要求を厳密に定義,記述したもの
„ 通常は形式的/非形式的言語表現
„ 「いかに(how)」でなく「なにを(what)」
21
仕様記述の難しさ
„ 対象とする問題領域の非論理性
„ ユーザが要求を意識していないか,表現
„
„
„
„
できない
開発者が,ユーザの言葉を理解できない
利害関係者の多さ
ユーザの意図や外部条件が変化する
対象となる問題領域が大きく複雑すぎ
て,記述方法が分からない
22
仕様を読む人
„ ソフトウェアの発注者,
利用者,操作者
„ ソフトウェアの開発者
„ 検査者
„ 書く人は?
z 開発者が利用者に聞きながら,また
資料を分析して,記述することが多い
23
モデル化技術
24
モデル化技術
„ モデルとは
z 構造を持った対象を,その性質や動作
を理解するために抽象化したもの
„ モデル構築の目的
z 対象世界(領域)の把握 → 分析
z 開発するシステムの表現 → 要求仕様
25
UML記法
„ Unified Modeling Language
„ G. Booch, J. Rumbaugh の合流に
I. Jacobsonが後から参加
„ 1995年5月 Unified Method (暫定版)
„ 1997年11月 OMGよりUML1.1
„ 2003年3月 UML1.5
„ 最新版 UML2.0 (2004年10月)
26
UMLの位置付け
„ オブジェクト指向モデル記述言語
„ これまでの分析や設計ノウハウを図
を中心に集大成
„ グラフ構造を持つモデル表現法のカ
タログ
27
UMLの図式
„
„
„
ユースケース図
クラス図
振舞い図
z
z
z
z
状態図
活動図
系列図
協調図
„ 実装図
z コンポーネント図
z 配備図
28
共通問題ー酒屋問題
ある酒類販売会社の倉庫では,毎日数個のコンテナが搬入
されてくる.その内容はビン詰めの酒で,1つのコンテナに
は10銘柄まで混載できる.扱い銘柄は約200種類ある.倉庫
係は,コンテナを受け取りそのまま倉庫に保管し,積荷票
を受付係へ手渡す.また受付係からの出庫指示によって内
蔵品を出庫することになっている.内蔵品は別のコンテナ
に詰め替えたり,別の場所に保管することはない.
空になったコンテナはすぐに搬出される.
積荷票: コンテナ番号(5桁)
搬入年月,日時
内蔵品名,数量(の繰り返し)
29
さて受付係は毎日数十件の出庫依頼を受け,その都度倉庫
係へ出庫指示書を出すことになっている.出庫依頼は出庫
依頼票または電話によるものとし,1件の依頼では,1銘柄
のみに限られている.在庫がないか数量が不足の場合には,
その旨依頼者に電話連絡し,同時に在庫不足リストに記入
する.また空になるコンテナを倉庫係に知らせることにな
っている.倉庫内のコンテナ数はできる限り最小にしたい
と考えているからである.
出庫依頼:
品名,数量
送り先名
30
受付係の仕事(在庫なし連絡,出庫指示書作成および在庫不
足リスト作成)のための計算機プログラムを作成せよ.
出庫指示書: 注文番号
送り先名
コンテナ番号
品名,数量
空コンテナ搬出マ-ク
在庫不足リスト: 送り先名
品名,数量
(の繰り返し)
• なお移送や倉庫保管中に酒類の損失は生じない.
• この課題は現実的でない部分もあるので,入力
データのエラー処理などは簡略に扱ってよい.
31
酒屋問題の全体文脈図
空コンテナ
コンテナ
倉庫係
注文品
出庫指示書
依頼者
積荷票
空予定コンテナ
出庫依頼書
不足連絡
受付係
在庫不足リスト
32
オブジェクト指向モデル
33
オブジェクト指向分析/設計
„ オブジェクトとオブジェクト間の静的・
動的関係を捉える.
„ 分析→設計→実装が継ぎ目な
し(seamless)に進むことを唱う.
„ 種々の図式表現の提案
→ UML(Unified Modeling Language)
に統合の方向
34
オブジェクト指向の源流
„ シミュレーション(SIMULA67)
„ 抽象データ型(CLU(1976), Alphard(1976),
„
„
„
„
EUCLID(1977))
知識表現(フレーム(1975),KRL(1977),
KL-ONE(1985))
意味データモデル(ER(1976))
動的プロセスモデル(ACTOR(1977))
マルチメディア(Smalltalk(1977))
35
オブジェクトの抽象化
„ カプセル化
z 静的な特性(属性,状態)と動的な特性(動作,操
作,メッセージ受発信)を単位化
z 情報隠蔽
„ クラス階層
z 汎化/特化(継承)
z クラス/インスタンス
„ 多相性(polymorphism)
„ オブジェクト間の関係
z 静的関係: 集約,関連
z 動的関係: メッセージ交換
36
統合プロセス(Unified Process)
„ UMLを記法とした開発プロセス
„ I. Jacobsonのユースケース法を中心
にOMTやBooch法を統合
„ ユースケース重視はある意味で機能
要求に基づくモデル化への回帰.そ
れだけに実践的.
37
統合プロセスの概要
„ ユースケースの記述
„ クラスの同定
„ クラス図の作成
„ 協調関係の記述
„ 状態遷移図の作成
„ パッケージ化
38
ユースケース
„ I.Jacobsonが提唱した手法
„
„
„
UMLでも採用
ユースケースとは利用者がシステムを使
う際のシナリオ
ユースケースとそれを使う役割(アクタ)の
関係を示すのがユースケース図
要求を分析し,必要なオブジェクトを定め
るために用いる.
39
コンテナ搬入
《include》
倉庫係
出庫指示
《include》
アクタ
受付係
注文受付
《extend》
在庫不足
ユースケース
ユースケース図
40
ユースケース(2)
„ 記述項目
z ユースケース名
z アクタ
z 事前条件
z 基本系列
z 事後条件
z 代替系列
41
クラスの同定
„ インターフェース・クラス
z アクタとシステムのインターフェース
„ 実体クラス
z ひとまとまりのデータを包含するもの
„ 制御クラス
z ユースケースを実行するための制御
的役割を果たすもの
42
所有者
クラス図
氏名
年令
住所
エンジン
1
排気量
1
関連
(association)
*
自動車
モデル
年式
汎化
(generalization)
トラック
積載量
1
集約
(aggregation)
1
1
車体
サスペンショ
ン方式
車輪
*
直径
乗用車
何人乗り
多重度
43
酒屋問題のユースケース図
コンテナ搬入
<<include>>
出庫指示
倉庫係
<<include>>
注文受付
<<extend>>
受付係
在庫不足
44
酒屋問題
ユースケース名:コンテナ搬入
アクター:倉庫係,受付係
事前条件:
基本系列:
1. 倉庫係は,搬入されたコンテナの内容と積荷票を
照合し,積荷票を登録する.
2. システムは,在庫不足として登録されている注文
で,この入荷により在庫不足が解消されたものがあ
れば,それを受付係に知らせる.
3. 在庫不足が解消された注文があれば,受付係はそ
れらにつき出庫指示ユースケースを実行する.
„
事後条件: 搬入されたコンテナの持つ内蔵品のデータ
が,参照可能である.出庫があった場合は,それに応
じて在庫データが更新されている.
„
„
„
45
ユースケース名:注文受付
„
„
„
„
アクター: 受付係
事前条件:
基本系列:
1.
受付係は,顧客から注文を受ける.
2.
受付係は,その注文についての在庫状況をシステムに問い
合わせる.
3.
システムは注文に応ずることができる在庫があることを受付
係に伝える.
[代替系列] 在庫が不足している場合は,在庫不足ユース
ケースへ
4.
受付係は,この注文につき出庫指示ユースケースを実行す
る.
事後条件: 出庫に応じて在庫データが更新されている.
46
ユースケース名:出庫指示
アクター: 受付係,倉庫係
事前条件: 当該の注文に対して在庫が存在する.
基本系列:
1. 受付係はシステムに出庫指示書を作成するよう指
示する.
2. システムは出庫指示書と,空きコンテナが生じる場
合はその空きコンテナ番号を,倉庫係に示す.
3. システムは,在庫データを更新する.
„
事後条件: 出庫に応じて在庫データが更新されてい
る.
„
„
„
47
ユースケース名:在庫不足
アクター: 受付係
事前条件: 指定された注文の在庫が不足している.
基本系列:
z システムは注文に応じた在庫がないことを受付係
に知らせる.
z 受付係は,顧客に在庫不足連絡を行う.
z システムはこの注文を,在庫不足により未出荷で
あるものとして登録する.
„ 事後条件: 当該注文が在庫不足で未出荷であることが
登録されている.
„
„
„
48
酒屋問題のクラス図
受付
倉庫
注文受付(注文)
在庫不足注文の検索(品名):注文の集合
1
1
1
コンテナ登録
在庫充足?(注文):論理値
出庫指示(注文):出庫指示書,空コンテナ
1
*
注文
受付年月日
品名
数量
納入年月日
受付状況:在庫不足/在庫あり/出庫済み
在庫不足登録( )
出庫済登録
顧客
住所
名前
在庫不足連絡(注文)
1
注文者
*
保管する
*
コンテナ
搬入年月
日時
在庫確認(品名):数量
出庫指示(品名,数量)
搬出可能?:論理値
1
積荷内容
*
内蔵品
品名
数量
49
注文受付(在庫有りの場合)の系列図
受付
倉庫
コンテナ
注文
注文受付(注文)
在庫充足?(注文)
集計
在庫確認(注文. 品名)
数量
…
充足
出庫指示(注文)
在庫更新
出庫指示(品名,数量)
…
出庫指示書,空コンテナ
出庫済登録
50
注文の状態遷移図
受付済み
在庫確認済み[在庫有り]
在庫確認中
出庫待ち
在庫確認済み
[在庫無し]
出庫完了
出庫済み
記録抹消
コンテナ搬入
在庫不足中
51
アーキテクチャ設計
52
酒屋問題のアーキテクチャ
„ 問題: 入庫情報はコンテナ単位
注文は品目単位
„ アーキテクチャ設計上の判断
z 情報をコンテナ単位に保持.品目単
位のデータは必要に応じ抽出
z 情報を品目単位に保持.コンテナが
入庫するたびに,それを品目単位に
変換
53
酒屋問題のクラス図
受付
倉庫
注文受付(注文)
在庫不足注文の検索(品名):注文の集合
1
1
1
コンテナ登録
在庫充足?(注文):論理値
出庫指示(注文):出庫指示書,空コンテナ
1
*
注文
受付年月日
品名
数量
納入年月日
受付状況:在庫不足/在庫あり/出庫済み
在庫不足登録( )
出庫済登録
顧客
住所
名前
在庫不足連絡(注文)
1
注文者
*
保管する
*
コンテナ
搬入年月
日時
在庫確認(品名):数量
出庫指示(品名,数量)
搬出可能?:論理値
1
積荷内容
*
内蔵品
品名
数量
54
注文受付(在庫有りの場合)の系列図
受付
倉庫
コンテナ
注文
注文受付(注文)
在庫充足?(注文)
集計
在庫確認(注文. 品名)
数量
…
充足
出庫指示(注文)
在庫更新
出庫指示(品名,数量)
…
出庫指示書,空コンテナ
出庫済登録
55
品目クラスの導入
56
酒屋問題のクラス図
品目クラス導入版
57
注文受付の系列図
品目クラス導入版
58