【InventoryManagement(DTRAM)の課題】

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


InventoryManagementのDTRAMによる記述についての説明

以下のモデルでは始めに,新規商品登録用のイベントチャンネル,channel ItemRegistraction を宣言しています.
次の channel ReceivingOrShipping(itemId:Str) は,itemId で登録されている商品に対して入荷か出荷を行う用のイベントチャンネルとして宣言しています.

channel ItemRegistration {
	out inventory(itemDB:Map, registerItem(itemId:Str, itemName:Str, quantity:Int)) = insert(itemDB, itemId, {"count": quantity, "name": itemName})
}

channel ReceivingOrShipping(itemId:Str) {
	out inventory.{itemId}.count(prev_quantity:Int, receiveOrShip(quantity:Int)) = prev_quantity + quantity
}
	

モデルの可視化

先ほどのInventoryManagementのモデルのリソースとチャンネルを,DTRAMのモデリングツールを使用して可視化したものを以下の図に示します.


この図がモデルの実行に依らない,リソースを表していることに注意して下さい.
始めに,図の中央にある inventory リソースは商品全体を保管する倉庫を表しており, channel ItemRegistration を流れるメッセージ( registerItem )を受け取ります.
次に,inventory リソースの子リソースとして,inventory.{itemId} リソースが表示されています.
このリソースは,商品IDを表す itemId というパスパラメータを持っているため,一意なリソース(商品)の特定を可能にしています.
最後に,inventory.{itemId} リソースの子リソースとして,itemId で示された商品の在庫数を表す inventory.{itemId}.count リソースが表示されており, channel ReceivingOrShipping(itemId:Str) を流れるメッセージ( receiveOrShip )を受け取ります.


InventoryManagementモデルの仮想実行について

ここでは,InventoryManagementモデルの仮想実行について説明します.この仮想実行で用いるテストケースは次の通りです.

  1. inventoryに新しく取り扱う商品(Asahi)を初期数量100で登録します.
  2. 登録した商品(Asahi)を50個出荷します.

仮想実行の可視化:

仮想実行を,シミュレーションツールを使用して可視化したものを以下に示していきます.
まず,システムの初期状態を可視化したものが以下の図です.


初期状態のため,inventory リソースには何の商品も登録されていない状態になっています.
次に,新商品(Asahi)を登録するので,inventory リソースをダブルクリックします.


inventory リソースに対して,registerItem という商品を登録するためのメッセージが選択できるので,こちらを選択します.


商品IDを表す itemId と商品名を表す itemName ,初期数量を表す quantity を入力できる画面が表示されます.


ここでは,registerItem("@123", "Asahi", 100) を入力します.


次の状態に遷移したので,商品IDが@123という状態の inventory.@123 と 在庫数量が100という状態の inventory.@123.count ,商品名がAsahiという状態の inventory.@123.name の3つのリソースが表示されました.
次に,登録した商品(Asahi)を50個出荷したいので,inventory.@123.count リソースをダブルクリックします.


メッセージを選択する画面が同様に表示されますので,入荷か出荷を行う receiveOrShip というメッセージを選択します.


入荷数量,または出荷数量の入力が可能な画面が表示されますので,ここでは receiveOrShip(-50) と入力して実行します.
ここで quantity が正の値のときは入荷,負の値のときは出荷が行われます.


次の状態に遷移したため,inventory.@123.count リソースの状態が50に遷移したことが確認できました.


課題概要

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

channel ItemRegistration {
	out inventory(itemDB:Map, registerItem(itemId:Str, itemName:Str, quantity:Int)) = insert(itemDB, itemId, {"count": quantity, "name": itemName})
}

channel Receiving(itemId:Str) {
	out inventory.{itemId}.count(prev_quantity:Int, receive(quantity:Int)) = prev_quantity + quantity
}

channel Shipping(itemId:Str) {
	out inventory.{itemId}.count(prev_quantity:Int, ship(quantity:Int)) = prev_quantity - quantity
}

1:


2:


課題アンケート (別タブが開きます)
課題終了後の評価アンケート (別タブが開きます)



【InventoryManagement(DTRAM)】へ