blob: b8fac062031a43791b8e4f4659ca8d934f9c1150 [file] [log] [blame]
<html>
<body>
<h1>Inefficient Project Workflow</h1>
<p>In this example, we'll use XLIA to model a project workflow (used for the creation of a product to be sold to customers on a market).</p>
<p>This example is used to illustrate the use of composite states and the <a href="../3_xliaref/actprimdico/actprim_run_1.html">"@run{...}" activity primitive of states</a> in XLIA. The model itself is not important (on top of being very inefficient).</p>
<h2>The concept</h2>
<p>Three teams are working together :</p>
<ul>
<li>the Engineering Team</li>
<li>the Design Team</li>
<li>the Communication Team</li>
</ul>
<p>Their goal is to create a shippable product. To do so, they follow a strict waterfall design process which is the following :</p>
<ul>
<li>market_study (by the Communication Team)</li>
<li>customer_needs_assesment (by the Design Team)</li>
<li>state_of_the_art_review (by the Engineering Team)</li>
<li>product_design (by the Design Team)</li>
<li>feasibility_assesment (by the Engineering Team)</li>
<li>concept_testing_survey (by the Communication Team)</li>
<li>implementation (by the Engineering Team)</li>
<li>repackaging (by the Design Team)</li>
<li>advertisement_and_vending (by the Communication Team)</li>
</ul>
<p>The project manager needs to keep track of the workloads of each team in order to balance resource allocations.</p>
<h2>The XLIA implementation</h2>
<p>In order to keep track of the workloads, we'll use variables as counters :</p>
<img src="images/inefproj001.png" width=650, border="3">
<p>Because of the waterfall process, the teams cannot work at the same time on the same project. We'll use this at our advantage by using states to model which team is working :</p>
<img src="images/inefproj002.png" width=650, border="3">
<p>We'll then add the subjects on which each team can be working as sub-states, the XTeamWorking state then being an "or" composite state. We'll also add an initial and a terminal state, as well as the transitions between all those states :</p>
<img src="images/inefproj003.png" width=650, border="3">
<p>To simulate the workload for each task, we'll use input from the environment. We'll create an input port 'worload' and a variable 'currentWorkload' to store the values. We'll also connect the port to the environment :</p>
<img src="images/inefproj004.png" width=650, border="3">
<p>Finally, to incorporate this simulated workload into the counters of each team, we'll implement the "@run{...}" activity primitive for the 3 composite states corresponding to the 3 teams :</p>
<img src="images/inefproj005.png" width=650, border="3">
<h2>Exploitation of the model</h2>
<p>The execution graph is the following :</p>
<img src="images/inefproj006.png" width=850, border="3">
<img src="images/inefproj007.png" width=850, border="3">
<img src="images/inefproj008.png" width=850, border="3">
<p>We can observe that the model behaves as we excepted; each task is performed in the order of the waterfall process, and the workloads are correctly updated according to the team that has been working.</p>
</body>
</html>