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 のモデルを示します.こちらを適宜参照しながら課題を進めてください.


@@ -29,7 +29,7 @@ Alloy では,商品id の集合を ItemId ,商品名の集合を Name , 商品全体を保管する倉庫の集合を Inventory ,商品の集合を Item で表します.
以下のモデルでは sig を用いて,ItemIdNameInventoryItem の順番にこれらの集合を宣言しています.
- Inventory には,ItemId から Item への対応関係がitemDB フィールドとして定義されています.
+ Inventory には,ItemId から Item への対応関係が itemDB フィールドとして定義されています.
Item の宣言では,商品名を表す nameName のインスタンスとして, 在庫数を表す countInt のインスタンスとして定義されています.

@@ -41,13 +41,13 @@ 次の itemRegistration は,itemId に対応する商品を登録する前の Inventory のインスタンス its と, 登録した後のインスタンス its' の関係を述語として定義しています.
ここで quantity は初期数量,n は商品名を示しています.
- receivingOrShipping ではitemId で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory のインスタンス its と, + receivingOrShipping では itemId で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory のインスタンス its と, 操作後のインスタンス its' の関係を述語として定義しています.
ここで quantity が正の値のときは入荷,負の値のときは出荷を表しています.
最後の execute では,inititemRegistractionreceivingOrShipping を この順で呼び出す操作を定義しています.
run では,execute を呼び出して仮想実行を行います. - この実行の際に,Int で8bitの数字を扱うことができるよう末尾に 8 Int という記述を付け加えています. + この実行の際に,Int で8bitの整数を扱うことができるよう末尾に 8 Int という記述を付け加えています.

@@ -67,27 +67,27 @@ pred itemRegistration[its, its': Inventory, itemId: ItemId, quantity: Int, n: Name] { some it: Item | { - no itemId2: ItemId | its.itemDB[itemId2] = it - its'.itemDB = its.itemDB + itemId -> it - it.name = n - it.count = quantity + no itemId2: ItemId | its.itemDB[itemId2] = it + its'.itemDB = its.itemDB + itemId -> it + it.name = n + it.count = quantity } } pred receivingOrShipping[its, its': Inventory, itemId: ItemId, quantity: Int] { some it': Item | { - no itemId2: ItemId | its.itemDB[itemId2] = it' - its'.itemDB = its.itemDB ++ itemId -> it' - it'.name = its.itemDB[itemId].name - it'.count = plus[its.itemDB[itemId].count, quantity] + no itemId2: ItemId | its.itemDB[itemId2] = it' + its'.itemDB = its.itemDB ++ itemId -> it' + it'.name = its.itemDB[itemId].name + it'.count = plus[its.itemDB[itemId].count, quantity] } } pred execute[] { some disj its, its', its'': Inventory, itemId: ItemId, n: Name | { - init[its] - itemRegistration[its, its', itemId, 100, n] - receivingOrShipping[its', its'', itemId, -50] + init[its] + itemRegistration[its, its', itemId, 100, n] + receivingOrShipping[its', its'', itemId, -50] } } @@ -123,7 +123,7 @@

仮想実行の可視化:

このテストケースはモデル中の execute 述語で実装されています.
- execute の仮想実行を可視化したものを以下に示します. + execute の実行を可視化したものを以下に示します.


@@ -131,10 +131,10 @@

左下にある 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 に変わります.

@@ -144,8 +144,10 @@ 課題概要

+ ここからが課題です.
本課題ではまず,上記にて説明を行った InventoryManagement の仕様に,ある機能を追加した仕様を考えます.
- その仕様のモデルと,仮想実行を可視化した以下の図を見ていただいた上で,2つの設問にお答えいただきます.
+ その仕様のモデルを以下に示します.また,そのモデルの仮想実行を可視化したものをその下に示します.これらの図を見ていただいた上で,2つの設問にお答えいただきます.
+ なお,以下のモデル中にある implies はその前に記述されている条件が成り立っているときは,その後に記述されている論理式または論理式の集合が成り立ち,条件が成り立っていないときは else の後ろに記述されている論理式または論理式の集合が成り立つことを示しています.
設問にお答えいただく際は,必ず設問1,設問2の順番でご解答下さい.以下の図と同じものが設問のページにも記載されているのでこのまま設問のページに飛んでいただいてもかまいません.

@@ -165,9 +167,9 @@ pred itemRegistration[its, its': Inventory, itemId: ItemId, quantity: Int, n: Name] { some it: Item | { - no itemId2: ItemId | its.itemDB[itemId2] = it - its'.itemDB = its.itemDB + itemId -> it - it.name = n + no itemId2: ItemId | its.itemDB[itemId2] = it + its'.itemDB = its.itemDB + itemId -> it + it.name = n it.count = quantity } } @@ -178,20 +180,20 @@ } else { some it': Item | { - no itemId2: ItemId | its.itemDB[itemId2] = it' - its'.itemDB = its.itemDB ++ itemId -> it' - it'.name = its.itemDB[itemId].name - it'.count = plus[its.itemDB[itemId].count, quantity] + no itemId2: ItemId | its.itemDB[itemId2] = it' + its'.itemDB = its.itemDB ++ itemId -> it' + it'.name = its.itemDB[itemId].name + it'.count = plus[its.itemDB[itemId].count, quantity] } } } pred execute[] { some disj its, its', its'', its''': Inventory, itemId: ItemId, n: Name | { - init[its] - itemRegistration[its, its', itemId, 100, n] - shippingOrReceiving[its', its'', itemId, -50] - shippingOrReceiving[its'', its''', itemId, -75] + init[its] + itemRegistration[its, its', itemId, 100, n] + shippingOrReceiving[its', its'', itemId, -50] + shippingOrReceiving[its'', its''', itemId, -75] } } diff --git a/courseA/IM_DTRAM.html b/courseA/IM_DTRAM.html index 3a5f773..1c90aa4 100644 --- a/courseA/IM_DTRAM.html +++ b/courseA/IM_DTRAM.html @@ -19,7 +19,7 @@

ここでは,InventoryManagement の DTRAM による仕様記述に関する課題に取り組んでいただきます.
- 以下に DTRAM で記述された InventoryManagement のモデルを示します.こちらを適宜参照しながらモデルの理解を行ってください. + 以下に DTRAM で記述された InventoryManagement のモデルを示します.こちらを適宜参照しながら課題を進めてください.


@@ -34,8 +34,8 @@ DTRAMでは,InventoryManagement のモデルを以下のようなチャンネル単位で記述していきます.
- ここでは,商品登録用のイベントチャンネルを ItemRegistrationitemId で登録されている商品に対して入荷か出荷を行うためのイベントチャンネルを ReceivingOrShipping(itemId:Str) として宣言しています.
- ItemRegistration チャンネルでは inventory リソースが,メッセージ registerItem(itemId, itemName, quantity) を受け取ると, リソースの状態 itemDBinsert(itemDB, itemId, {"count": quantity, "name": itemName}) に変わることを示しています.
+ 商品登録用のイベントチャンネルを ItemRegistrationitemId で登録されている商品に対して入荷か出荷を行うためのイベントチャンネルを ReceivingOrShipping(itemId:Str) として宣言しています.
+ ItemRegistration チャンネルでは inventory リソースが,メッセージ registerItem(itemId, itemName, quantity) を受け取ると, リソースの状態が itemDB から insert(itemDB, itemId, {"count": quantity, "name": itemName}) に変わることを示しています.
ここで,insert() 関数は,第1引数に渡された写像に対し,第2引数と第3引数の対応を追加した結果得られる写像を返す関数です.
ReceivingOrShipping(itemId:Str) チャンネルでは inventory.{itemId}.count リソースがメッセージ receiveOrShip(quantity) を受け取ると, 遷移前の状態 prev_quantityprev_quantity + quantity に変わることを示しています.
@@ -62,10 +62,10 @@

- この図がモデルの実行に依らない,リソースを表していることに注意して下さい.
+ この図がモデルの実行に依らない,リソースとチャンネルの関係を表していることに注意して下さい.
図の中央にある inventory リソースは ItemRegistration チャンネルから商品を登録するメッセージを受け取ります.
inventory リソースの子リソースである,inventory.{itemId} リソースは商品を表しています.
- リソース名に含まれる itemId は商品IDを表すパスパラメータで,一意な商品の特定を可能にしています.
+ このリソース名に含まれる itemId は商品IDを表すパスパラメータで,一意な商品の特定を可能にしています.
inventory.{itemId} リソースの子リソースである inventory.{itemId}.count リソースはinventory.{itemId} の在庫数を表しており, ReceivingOrShipping チャンネルから入荷もしくは出荷を行うメッセージを受け取ります.

@@ -152,8 +152,9 @@ 課題概要

+ ここからが課題です.
本課題ではまず,上記にて説明を行った InventoryManagement の仕様に,ある機能を追加した仕様を考えます.
- その仕様のモデルと,仮想実行の流れを可視化した以下の図を見ていただいた上で,2つの設問にお答えいただきます.
+ その仕様のモデルを以下に示します.また,そのモデルの仮想実行を可視化したものをその下に示します.これらの図を見ていただいた上で,2つの設問にお答えいただきます.
設問にお答えいただく際は,必ず設問1,設問2の順番でご解答下さい.以下の図と同じものが設問のページにも記載されているのでこのまま設問のページに飛んでいただいてもかまいません.

@@ -175,10 +176,30 @@

1:

-
+

2:

+
+
+

3:

+
+
+
+

4:

+
+
+
+

5:

+
+
+
+

6:

+
+
+
+

7:

+

diff --git a/img/DTRAM/InventoryManagement/DTRAM_kadai_2_VerInventoryManagement.png b/img/DTRAM/InventoryManagement/DTRAM_kadai_2_VerInventoryManagement.png new file mode 100644 index 0000000..d77a59b --- /dev/null +++ b/img/DTRAM/InventoryManagement/DTRAM_kadai_2_VerInventoryManagement.png Binary files differ diff --git a/img/DTRAM/InventoryManagement/DTRAM_kadai_4_VerInventoryManagement.png b/img/DTRAM/InventoryManagement/DTRAM_kadai_4_VerInventoryManagement.png new file mode 100644 index 0000000..0c5a438 --- /dev/null +++ b/img/DTRAM/InventoryManagement/DTRAM_kadai_4_VerInventoryManagement.png Binary files differ diff --git a/img/DTRAM/InventoryManagement/DTRAM_kadai_6_VerInventoryManagement.png b/img/DTRAM/InventoryManagement/DTRAM_kadai_6_VerInventoryManagement.png new file mode 100644 index 0000000..487ab95 --- /dev/null +++ b/img/DTRAM/InventoryManagement/DTRAM_kadai_6_VerInventoryManagement.png Binary files differ