<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <style> c1{ color: blue; } c2{ color: red; } </style> <title>【InventoryManagement(DTRAM)】</title> </head> <body> <h1 class="title"> 【InventoryManagement(DTRAM)の課題】 </h1> <p> ここでは,DTRAMを用いて記述したInventoryManagementの課題について説明します.<br> 以下にInventoryManagementのモデルを示します.こちらを適宜参照しながらモデルの理解を行ってください. </p> <hr/> <h2>InventoryManagementのDTRAMによる記述についての説明</h2> <p> 以下のモデルでは始めに,新規に取り扱う商品を入荷する時に使用されるイベントチャンネル,<code><c1>channel</c1></code> <code>ItemRegistraction</code> を宣言しています.<br> 次にある,<code><c1>channel</c1></code> <code>ReceivingOrShipping(itemId:<c1>Str</c1>)</code> は <code>itemId</code> を用いて 登録されている商品に対して出荷か入荷を行う時に使用されるイベントチャンネルになります. </p> <div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333; border-radius: 10px;"> <pre> <c1>channel</c1> ItemRegistration { <c1>out</c1> inventory(itemDB:<c1>Map</c1>, registerItem(itemId:<c1>Str</c1>, itemName:<c1>Str</c1>, quantity:<c1>Int</c1>)) = insert(itemDB, itemId, {"count": quantity, "name": itemName}) } <c1>channel</c1> ReceivingOrShipping(itemId:<c1>Str</c1>) { <c1>out</c1> inventory.{itemId}.count(prev_quantity:<c1>Int</c1>, receiveOrShip(quantity:<c1>Int</c1>)) = prev_quantity + quantity } </pre> </div> <hr/> <h2>モデルの可視化</h2> <p> 先ほどのInventoryManagementを,DTRAMの可視化ツールを使用して,モデルを可視化した図が以下の通りになります.<br> </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM Ver InventoryManagement architecture Visualize.png", class ="before-image-size"><br> </div> <p> まず,始めに商品全体を管理する倉庫を表している <code>inventory</code> というリソースがあります.<br> 次に,その下の階層に <code>inventory</code> リソースを親にしている,<code>inventory.{itemId}</code> という子リソースがあります. この子リソースは,商品を識別するためのIDを表す <code>itemId</code> という パスパラメータがあるので,一意なリソース(商品)を特定することができます.<br> そして,最後に <code>inventory.{itemId}</code> リソースを親にしている,<code>inventory.{itemId}.count</code> という子リソースがあり,特定の商品の在庫数量を表しています. </p> <hr/> <h2>InventoryManagementの仮想実行について</h2> <p> ここでは,InventoryManagementの仮想実行について説明します.InventoryManagementの仮想実行で用いるテストケースは次の通りです.<br> <ol> <li>inventoryに新しく取り扱う商品(Asahi)を100個入荷します.</li> <li>お客様が商品(Asahi)を50個購入してくれたので,在庫数が50個に減少しました.</li> </ol> </p> <h3>仮想実行の可視化:</h3> <p> 先ほどの仮想実行を可視化したものを以下に示していきます.<br> まず,システムの初期状態を可視化したものが以下の図です. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 1 Ver InventoryManagement.png", class ="before-image-size"><br> </div> <p> 初期状態のため,<code>inventory</code> リソースには何の商品も登録されていないという状態になっています.<br> 次に,テストケースの1を実行していくので,<code>inventory</code> リソースをダブルクリックします. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 2 Ver InventoryManagement.png", class ="before-image-size"><br> </div> <p> ダブルクリックすると,<code>registerItem</code> というメッセージが選択できるので,こちらを選択します. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 3 Ver InventoryManagement.png", class ="before-image-size"><br> </div> <p> 次に,<code>inventory</code> リソースに対して,商品のIDを表す <code>itemId</code> と 商品名を表す <code>itemName</code>,入荷数量を表す <code>quantity</code> を入力できる画面が表示されます. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 4 Ver Inventory Management.png", class ="before-image-size"><br> </div> <p> ここでは,<code>inventory</code> リソースに対して<code>registerItem(@123, "Asahi", 100)</code>というメッセージを入力し,実行します. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 5 Ver Inventory Management.png", class ="before-image-size"><br> </div> <p> 実行した結果,次の状態に遷移することができたので,固有のID(@123)の状態を持った<code>inventory.@123</code> と 在庫数量が100の状態を持った<code>inventory.@123.count</code>,商品名がAsahiの状態を持った <code>inventory.@123.name</code> という 3つのリソースが表示されました.<br> 次に,テストケースの2を実行していきますので,<code>inventory.@123.count</code>リソースをダブルクリックします. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 6 Ver Inventory Management.png", class ="before-image-size"><br> </div> <p> ダブルクリックすると,メッセージを選択する画面が先ほどと同様に表示されますので,出荷と入荷の両方を行うことができる <code>receiveOrShip</code> を選択します. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 7 Ver Inventory Management.png", class ="before-image-size"><br> </div> <p> 次に,出荷数量,または入荷数量を入力可能な画面が表示されますので,<strong><code>receiveOrShip(-50)</code></strong> と入力して実行します. </p> <div class="img-center"> <img src="../img/DTRAM/InventoryManagement/DTRAM 9 Ver Inventory Management.png", class ="before-image-size"><br> </div> <p> 次の状態に遷移したため,<code>inventory.@123.name</code> リソースの状態が50に遷移したことが確認できました. </p> <hr/> <h2> 課題概要 </h2> <p> 本課題ではまず,上記にて説明を行ったInventoryManagementに,とある機能を追加した時のモデルと可視化の図を 実験参加者の皆様に見て頂きます.<br> 次に,その2つを見て<strong>どの様な機能が追加されたのか</strong>,また<strong>どの様なシナリオになっているのか</strong>を 考えて頂き,以下のアンケートにお答えください. </p> <div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333; border-radius: 10px;"> <pre> <c1>channel</c1> ItemRegistration { out inventory(itemDB:<c1>Map</c1>, registerItem(itemId:<c1>Str</c1>, itemName:<c1>Str</c1>, quantity:<c1>Int</c1>)) = insert(itemDB, itemId, {"count": quantity, "name": itemName}) } <c1>channel</c1> Receiving(itemId:<c1>Str</c1>) { out inventory.{itemId}.count(prev_quantity:<c1>Int</c1>, receive(quantity:<c1>Int</c1>)) = prev_quantity + quantity } <c1>channel</c1> Shipping(itemId:<c1>Str</c1>) { out inventory.{itemId}.count(prev_quantity:<c1>Int</c1>, ship(quantity:<c1>Int</c1>)) = prev_quantity - quantity } </pre> </div> <div class="img-center"> <img src="../img/Alloy/Alloy_Ver_InventoryManagementCheckMinus.png", class ="before-image-size"><br> </div> <p> <strong> <a href="https://docs.google.com/forms/d/e/1FAIpQLSf5rIUfHnzsLMLPZ_KWnsukn3HcEGBSLN-BxzRPzqszyrlj8g/viewform?usp=sf_link" target="_blank" rel="noopener noreferrer"> 課題アンケート (別タブが開きます) </a> </strong> <br> <strong> <a href="https://docs.google.com/forms/d/e/1FAIpQLSf8Ex1RPzMRvyUYIRkCjcIY69fI74sNXK-m4rNAoAcR6_dm4g/viewform?usp=sf_link" target="_blank" rel="noopener noreferrer"> 課題終了後の評価アンケート (別タブが開きます) </a> </strong> </p> <hr> <br> <a href="IM_DTRAM.html">【InventoryManagement(DTRAM)】へ</a> </body> <style> .title{ text-align: center; } .links-manual-A{ display: flex; flex-direction: column; } .img-center{ display: flex; justify-content: center; align-items: center; } .before-image-size{ max-width: 100%; height: auto; } .after-image-size{ max-width: 100%; height: auto; } </style> </html>