diff --git a/courseA/IM_Alloy.html b/courseA/IM_Alloy.html index de4a6b2..a964da4 100644 --- a/courseA/IM_Alloy.html +++ b/courseA/IM_Alloy.html @@ -18,35 +18,35 @@ 【InventoryManagement(Alloy)の課題】
- ここでは,InventoryManagementのAlloyによる仕様記述の課題に取り組んでいただきます.
+ ここでは,InventoryManagementのAlloyによる仕様記述に関する課題に取り組んでいただきます.
以下にAlloyで記述されたInventoryManagementのモデルを示します.こちらを適宜参照しながらモデルの理解を行ってください.
sig :
以下のモデルでは始めに,商品IDの集合を表す ItemId と商品名の集合を表す Name を宣言しています.
次に,商品全体を保管する倉庫の集合を表す Inventory を宣言しています.Inventory には,ItemId から
商品情報を表す Item への対応関係がitemDB フィールドとして定義されています.
- 最後の Item では,商品名を表す name が Name のインスタンスとして,
- 在庫数を表す count が Int
+ Item の宣言では,商品名を表す name が Name のインスタンスとして,
+ 在庫数を表す count が Int
pred :
最初の述語として記述されている init は,Inventory の
- インスタンスである its が初期化されているという条件を満たしていることを示しています.
- 次の,itemRegistration は itemId で示された商品を登録する前の Inventory のインスタンス its と
+ インスタンスである its が初期化されていることを示しています.
+ 次のitemRegistration は,itemId に対応する商品を登録する前の Inventory のインスタンス its と,
登録した後のインスタンス its' の関係を述語として定義しています.
ここで quantity は初期数量,n は商品名を示しています.
- receivingOrShipping ではitemId で登録されている商品に対して
- 入荷か出荷を行った際の操作前の Inventory のインスタンス its と操作後のインスタンス its' の関係を述語として定義しています.
+ receivingOrShipping ではitemId で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory のインスタンス its と,
+ 操作後のインスタンス its' の関係を述語として定義しています.
ここで quantity が正の値のときは入荷,負の値のときは出荷を表しています.
最後の execute では,init ,itemRegistraction ,receivingOrShipping を
この順で呼び出す操作を定義しています.
- runexecute を呼び出して実行を行います.
- この実行の際に,Int で8bitの数字を扱うことができるよう末尾に という記述を行っています.
+ runexecute を呼び出して仮想実行を行います.
+ この実行の際に, で8bitの数字を扱うことができるよう末尾に という記述を付け加えています.
- 先ほどのInventoryManagementのモデルの構造を,Alloyの可視化ツールを使用して,可視化したものを以下の図に示します.
+ 先ほどのInventoryManagementのモデルの構造を,Alloyの可視化ツールを使用して可視化したものを以下の図に示します.

Inventory が,ItemId のインスタンスを Item のインスタンスに対応させる itemDB という
フィールドを持っており,Item が Name のインスタンスを参照する name フィールドと,
- Int のインスタンスを参照する count フィールドを持っていることがわかります.
+ Int のインスタンスを参照する count フィールドを持っていることがわかります.
- ここでは,InventoryManagementモデルの仮想実行について説明します.InventoryManagementの仮想実行で用いるテストケースは次の通りです.
+ ここでは,InventoryManagementモデルの仮想実行について説明します.この仮想実行で用いるテストケースは次の通りです.

- 左下にあるInventory2($execute_its)は execute 述語中の変数 its で参照される Inventory のインスタンスであり,
- init 述語を満たしているため,まだ何の商品(Item)も登録されていない状態になっています.
+ 左下にあるInventory2($execute_its)は execute 述語中の変数 its で参照される Inventory のインスタンスであり,init 述語を満たしているため,
+ まだ何の商品(Item)も登録されていない状態になっています.
次に,1番上の段の左にあるInventory1($execute_its')は変数 its' で参照されるインスタンスで,
- its で参照されるインスタンスに対して itemId で参照される Item のインスタンスを初期数量100個で登録したインスタンスになっています.
- そして,Inventory1の右にあるInventory0($execute_its'')はitemId で参照される Item のインスタンスを50個出荷したインスタンスになっているため,
- 在庫数が50個に減少しています.
- ここで出荷前の Item のインスタンス(Item1)と出荷後のインスタンス(Item0)が別々のインスタンスになっていることに注意して下さい.
+ its で参照されるインスタンスに対して,itemId で参照される Item のインスタンスを初期数量100個で登録したインスタンスになっています.
+ Inventory1の右にあるInventory0($execute_its'')は少し複雑です.
+ まず,Inventory1において,ItemId で参照されるItemのインスタンスはItem1です.このインスタンスに対して50個出荷した後のItemのインスタンスはItem0になります.
+ ここでItem0の在庫数が50個に減少していることに注意して下さい.
+ ItemId で参照される Item のインスタンスがItem1からItem0に変わるので,Inventory のインスタンスもInventory1からInventory0に変わります.
- 本課題ではまず,上記にて説明を行ったInventoryManagementに,ある機能を追加したモデルとその仮想実行を可視化した以下の図を見ていただき,
- 2つの設問に答えていただきます.
- 必ず設問1,設問2の順番でご解答下さい.
- 以下の図は設問のページにも記載されているページにも記載されているのでこのまま設問のページに飛んでいただいてもかまいません.
+ 本課題ではまず,上記にて説明を行ったInventoryManagementの仕様に,ある機能を追加した仕様を考えます.
+ その仕様のモデルと,仮想実行を可視化した以下の図を見ていただいた上で,2つの設問にお答えいただきます.
+ 設問にお答えいただく際は,必ず設問1,設問2の順番でご解答下さい.以下の図と同じものが設問のページにも記載されているのでこのまま設問のページに飛んでいただいてもかまいません.