diff --git a/courseA/IM_Alloy.html b/courseA/IM_Alloy.html index c64ca9b..858e131 100644 --- a/courseA/IM_Alloy.html +++ b/courseA/IM_Alloy.html @@ -19,7 +19,7 @@
ここでは,InventoryManagement の Alloy による仕様記述に関する課題に取り組んでいただきます.
- 以下に Alloy で記述された InventoryManagement のモデルを示します.こちらを適宜参照しながらモデルの理解を行ってください.
+ 以下に Alloy で記述された InventoryManagement のモデルを示します.こちらを適宜参照しながら課題を進めてください.
ItemId
,商品名の集合を Name
,
商品全体を保管する倉庫の集合を Inventory
,商品の集合を Item
で表します.sig
を用いて,ItemId
,Name
,Inventory
,Item
の順番にこれらの集合を宣言しています.Inventory
には,ItemId
から Item
への対応関係がitemDB
フィールドとして定義されています.Inventory
には,ItemId
から Item
への対応関係が itemDB
フィールドとして定義されています.Item
の宣言では,商品名を表す name
が Name
のインスタンスとして,
在庫数を表す count
が Int
itemRegistration
は,itemId
に対応する商品を登録する前の Inventory
のインスタンス its
と,
登録した後のインスタンス its'
の関係を述語として定義しています.quantity
は初期数量,n
は商品名を示しています.receivingOrShipping
ではitemId
で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory
のインスタンス its
と,
+ receivingOrShipping
では itemId
で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory
のインスタンス its
と,
操作後のインスタンス its'
の関係を述語として定義しています.quantity
が正の値のときは入荷,負の値のときは出荷を表しています.execute
では,init
,itemRegistraction
,receivingOrShipping
を
この順で呼び出す操作を定義しています.run
execute
を呼び出して仮想実行を行います.
- この実行の際に,Int
で8bitの数字を扱うことができるよう末尾に 8
Int
という記述を付け加えています.
+ この実行の際に,Int
で8bitの整数を扱うことができるよう末尾に 8
Int
という記述を付け加えています.
このテストケースはモデル中の execute
述語で実装されています.
- execute
の仮想実行を可視化したものを以下に示します.
+ execute
の実行を可視化したものを以下に示します.
左下にある Inventory2($execute_its) は execute
述語中の変数 its
で参照される Inventory
のインスタンスであり,init
述語を満たしているため,
まだ何の商品(Item)も登録されていない状態になっています.
- 次に,1番上の段の左にある Inventory1($execute_its') は変数 its'
で参照されるインスタンスで,
- its
で参照されるインスタンスに対して,itemId
で参照される Item
のインスタンスを初期数量100個で登録したインスタンスになっています.
+ 次に,1番上の段の左にある Inventory1($execute_its') は変数 its'
で参照される Inventory
のインスタンスで,
+ its
で参照される Inventory
のインスタンスに対して,Item
のインスタンス Item1(itemRegistration_it) を初期数量100個で登録したインスタンスになっています.
Inventory1 の右にあるInventory0($execute_its'')は少し複雑です.
- まず,Inventory1 において,ItemId
で参照される Item のインスタンスは Item1 です.このインスタンスに対して50個出荷した後の Item
のインスタンスは Item0 になります.
+ まず,Inventory1 において,ItemId
で参照される Item のインスタンスは Item1 です.このインスタンスに対して50個出荷した後の Item
のインスタンスが Item0 になります.
ここで Item0 の在庫数が50個に減少していることに注意して下さい.
ItemId
で参照される Item
のインスタンスが Item1 から Item0 に変わるので,Inventory
のインスタンスも Inventory1 から Inventory0 に変わります.
+ ここからが課題です.
本課題ではまず,上記にて説明を行った InventoryManagement の仕様に,ある機能を追加した仕様を考えます.
- その仕様のモデルと,仮想実行を可視化した以下の図を見ていただいた上で,2つの設問にお答えいただきます.
+ その仕様のモデルを以下に示します.また,そのモデルの仮想実行を可視化したものをその下に示します.これらの図を見ていただいた上で,2つの設問にお答えいただきます.
+ なお,以下のモデル中にある
はその前に記述されている条件が成り立っているときは,その後に記述されている論理式または論理式の集合が成り立ち,条件が成り立っていないときは
の後ろに記述されている論理式または論理式の集合が成り立つことを示しています.
設問にお答えいただく際は,必ず設問1,設問2の順番でご解答下さい.以下の図と同じものが設問のページにも記載されているのでこのまま設問のページに飛んでいただいてもかまいません.