第 5 章 事例研究
5.3 ObML を用いた仕様確認の実行例
5.3.1
システム全体のシミュレーション実行
分析結果がuse-case にしたがっているかどうかを調べるには,以下の手順によってシ ミュレーションを実行すればよい.
1. 5.2 節で作成したObCLコードを4.1.1 節で述べたObCL →ObML コンバータ に よって ObML コードに変換する.
2. use-caseごとに外部からのイベントを記述したイベントリストを用意する.
3. Standard ML を起動し,インタプリタ上で変換したObMLコードを読み込む.
4. ひき続いて確認したいイベントリストを読み込む.
例えば「use-case通常コピーの場合」について用意するイベントリストは以下に示すリ
ストのようになる.この use-case は,スタンバイ状態でコピースタートキーを押してコ ピーを実行し,コピー終了後再びスタンバイ状態に戻るという,本事例で最も典型的な 動作を表したもので,シミュレータのステップ数にして50ステップ分のスクリプトであ る.ここで,system' 関数がイベントリストを与えてシミュレーションを実行する関数で ある.イベントリストの途中にある[ ]は,外部からはイベントを与えないステップを 表しており,システム内部での処理時間を見込んだものである.また,(* 111 *)はコメ
ント,ppSystem関数はシミュレーション結果を読みやすいかたちに整形して表示する関
数である.
(3スタンバイ → コピースタート → コピー中 → コピー終り → スタンバイ3)
ppSystem ( system [Sys op panel]
[
[], (3シミュレーションシステムの 初期化ステップ 3)
[], (3panelシステムの 初期化ステップ 3)
[("Tm.i400m",[])], (3400ms タイマイベントを与える3)
[], (3Cm.Send3)
[], (3Pp.Send, Tm.o1s Start3)
10 [("Pp.Ack",[("param2",Int 0x01),("param3",Int 0x00),("param4",Int 0x24),
("param5",Int 0x24),("param6",Int 0x24)])],
[], (3Cm.Ack,Tm.o1s Stop3)
[], (3St.Wait,Ms.Size \おまちください"3)
[("Tm.i400m",[])], (3400ms タイマイベントを与える3)
[], (3Cm.Send3)
[], (3Pp.Send, Tm.o1s Start3)
[("Pp.Ack",[("param2",Int 0x02),("param3",Int 0x00),("param4",Int 0x24),
("param5",Int 0x24),("param6",Int 0x24)])],
[], (3Cm.Ack,Tm.o1s Stop3)
20 [], (3St.Standby,Ms.Standby\コピーできます"3)
[], (3Tm.o60s Start,Ms.Count,Ms.Select 3)
[("Key.Start",[])], (3スタートキーを押すイベントを与える3)
[], (3Cm.Send3)
[], (3Pp.Send, Tm.o1s Start3)
[("Pp.Ack",[])],
(3... 省略... 3)
[], (3Cm.Ack,Tm.o1s Stop3)
30 [], (3St.Standby,Ms.Standby,Tm.i200m Stop\コピーできます"3)
[], (3Tm.o60s Start,Ms.Count,Ms.Select 3)
[]
] 100 );
実行結果は以下に示すリストのようになる.実際にはStep:0からStep:50まで,70桁/ 行に表示して1815行の出力である.その各ステップごとに全てのオブジェクトについて の状態と属性値を報告し,各ステップの最後にそのステップで発生したイベントを報告 する.
Step:0
Sys op panel:Initial ()
Step:1
Sys op panel:Parallel [Sys op panelcopyctrl Sys op panel status ctrl
Sys op panel timer ctrl Sys op panelkey if Sys op panel lcd if
Sys op panel comport if Sysop panel cur settings
Sys op panel def settings] ()
Sys op panel copy ctrl:State S ready (key input start ag=0)
Sys op panel status ctrl:State S ready (current paper selectposition=1
10 current paper count=1 default paper select position=1
default paper count=1 tray bottom old=255 tray middle old=255
traytop old=255 copysub status old=0 copystatus old=0)
Sys op panel timer ctrl:Parallel [Sys op panel timer ctrl tm 400m ctrl
Sys op panel timer ctrl tm 200m ctrl
Sys op panel timer ctrl tm 60s ctrl Sys op panel timer ctrl tm 1s ctrl]
()
Sys op panel timer ctrl tm 400m ctrl:State S o ()
Sys op panel timer ctrl tm 200m ctrl:State S o ()
Sys op panel timer ctrl tm 60s ctrl:State S o ()
20 Sys op panel timer ctrl tm 1s ctrl:State S o ()
Sys op panel key if:State S1 ()
Sys op panel lcd if:Parallel [Sys op panel lcdif mess lcd
Sys op panel lcd if psel lcd Sys op panel lcdif pcnt lcd
Sys op panel lcd if jam lcd] ()
Sys op panel lcd if mess lcd:State S1 (nak code=0
message="しばらくおまちください。")
Sys op panel lcd if psel lcd:State S1 ()
Sys op panel lcd if pcnt lcd:State S1 (count=1)
Sys op panel lcd if jam lcd:State S1 ()
30 Sys op panel comport if:State S ready ()
Sys op panel cur settings:State S1 (paper select position=1
paper count=1)
Sys op panel def settings:State S1 (paper select position=1
paper count=1)
Tm.i400m Start Si.CurrentChange(paper count=1 paper select position=1)
Step:2
... 省略 ...
40
Step:50
... 省略 ...
val it = () : unit
0
5.3.2
特定のオブジェクトに着目したシミュレーション実行
特定のオブジェクトの動作だけに着目したシミュレーション結果を得るためには,以下 に示すリストのようなイベントリストを用意すればよい.この例は,copyctrl オブジェ クトに着目した,シミュレータのステップ数にして50 ステップ分のスクリプトである.
ここで,system' 関数がイベントリストを与えてシミュレーションを実行する関数である.
ppSubSys関数は着目したいオブジェクトのリストを受け取り,そのリストに含まれるオ
ブジェクトに関するシミュレーション結果だけを表示する関数である.
(3スタンバイ → コピースタート → コピー中 → コピー終り → スタンバイ3)
(3Sys op panel copy ctrlだけに着目した場合3)
ppSubSys ( system [Sys op panel]
[
[], (3シミュレーションシステムの 初期化ステップ 3)
[], (3panelシステムの 初期化ステップ 3)
[("Tm.i400m",[])], (3400ms タイマイベントを与える3)
10 (3... 省略... 3)
[], (3St.Standby,Ms.Standby,Tm.i200m Stop3)
[], (3Tm.o60s Start,Ms.Count,Ms.Select 3)
[]
] 100 )
[Sys op panelcopy ctrl]; (3 着目するオブジェクトをこのリストに記述する3)
実行結果は以下に示すリストのようになる.実際にはStep:0からStep:50まで,70桁/ 行に表示して262行の出力である.各ステップごとにcopy ctrl オブジェクトにについて 状態と属性値を報告し,ステップの最後にそのステップで発生したイベントを報告する.
Step:0
Step:1
Sys op panel copy ctrl:State S ready (key input start ag=0)
Tm.i400m Start Si.CurrentChange(paper count=1 paper select position=1)
Si.DefaultChange(paper count=1 paper select position=1)
... 省略 ...
Step:50
10 Sys op panel copy ctrl:State S ready (key input start ag=0
current paper select position=1 current paper count=1
default paper select position=1 default paper count=1)
val it = () : unit