Commit c8d1eca8 authored by Saad bin Abid's avatar Saad bin Abid
Browse files

process constraints documentation

parent afbc0dd1
......@@ -15,8 +15,957 @@
<title>FOCUSer - Making an AutoFOCUS3 (AF3) Aware of Modelling Processes</title>
</head>
<body>
<h2><font color="#336699">4. List of implemented constraints</font></h2>
This part of the documentation discusses the developed constraints that the user can manually activate in IDE for building the model development process (i.e., <a href="process_definition.html">Making use of FOCUSer during model development</a>). The implemented constraints resides in various packages in AF3 plug-ins.
<td valign="center">
<table width="98%" align="center" cellpadding="0" cellspacing="0" border="0" bordercolor="#7290AA" style="border-style:solid; border-collapse:collapse; border-spacing:0">
<tr>
<td valign="top"><table width="98%" align="center" cellpadding="0" cellspacing="0" border="1px" bordercolor="#7290AA" style="border-style:solid; border-collapse:collapse; border-spacing:0">
<tr>
<td width="2%" align="center" bgcolor="#C7D2DC"><h2>Nr.</h2></td>
<td width="20%" align="center" bgcolor="#C7D2DC"><h2>Constraint to Manually Activate on IDE</h2></td>
<td width="30%" align="center" bgcolor="#C7D2DC"><h2>Description/Purpose</h2></td>
<td width="10%" align="center" bgcolor="#C7D2DC"><h2>Location (AF3 Package Name + Java Class)</h2></td>
<td width="10%" align="center" bgcolor="#C7D2DC"><h2>Applies to ECore Model Element</h2></td>
</tr>
<tr>
</td>
<td align="left">
<p style="margin-left:10px"> 1</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have an author"</p>
</td>
<td>
<p style="margin-left:10px"> To ensure the Author field of the requirement is not empty or null. </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.AuthorConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">2</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements are reviewed as per the checklist"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that each element in the provided checklist (in Checklist Tab) of the requirement is set to "To Be Approved" </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.CheckListReviewConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px"> 3</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All component packages has at least one component"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the of a component package contains components. </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.ComponentExistsConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> ComponentArchitecture</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">4</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements should not have words \"and/or\" in their description"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the description of the requirement does not contain certain words "and/or" </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.DescriptionAndOrConstraint.java </p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">5</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have a description"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the description of the requirement is not empty or null. </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.DescriptionConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px"> 6</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All functional requirements should have at least one non-functional aspect defined"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that a functional requirement has at least one non-functional aspect. </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.FunctionalReqsHaveOneNonFunctionalReq.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px"> 7</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements having glossary terms that are fully defined"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that all of the glossary terms used in the description of the requirement are fully defined.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.GlossaryTermsDefinitionConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">8</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have an id"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the requirement has an id.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.IDConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">9</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All functional requirements should have \"input(s)/output(s)\" defined"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the functional requirement has input/output defined.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.IdentifiedInputOutputDefinedConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">10</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements should have only one aspect"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that each requirement has one or more aspects (either functional or non-functional)
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.MultipleAspectsConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">11</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have a name"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the requirement has a name.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.NameConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">12</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All non-functional requirements should have exactly one functional aspect defined"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure the non-functional requirement has exactly one non-functional aspect.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.NonFunctionalReqsHaveExactlyOneFunctionalReq.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">13</p>
</td>
<td align="left">
<p style="margin-left:10px"> "Only one requirement should define an safety level"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that only one requirement defines a safety integrity level.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.OnlyOneSILConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">14</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements with parameters that have a type"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the parameterType of a constraint is non-empty and set to an appropriate type.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.ParameterTypeConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">15</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have a rationale"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the rationale of a requirement is non-empty.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.RationaleConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">16</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have a test suite"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the requirement test-suite is non-empty.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.RequirementContainsTestSuiteConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">17</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirement packages have at least one requirement"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the requirements folder has at least one requirements.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.RequirementExistsConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> RequirementsContainer</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">18</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All components having traces to requirement are correct"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the component implementing the requirement is checked by the user if the trace to requirement exists and the check-box "Requirement Impl Correctly" is selected.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.RequirementImplementedCorrectlyConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">19</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have signals that are uniquely defined" </p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the signal has a unique name among all the signals defined.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.SignalConstraints.java (UniqueSignalNameConstraint)</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">20</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements with signals defined have a type" </p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the signal has a defined type (integer/boolean).
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.SignalConstraints.java (SignalTypeConstraint)</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">21</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements with signals should have initial value set and between ranges (i.e., [From,To]) for int data type and true/false for boolean data type" </p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the signal has a initial value set based on the type of the Signal.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.SignalConstraints.java (SignalInitialValueConstraint)</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">22</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements have a source" </p>
</td>
<td align="left">
<p style="margin-left:10px">To ensure that the source of the requirement is set and non-empty.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.SourceConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">23</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements traces are up to date." </p>
</td>
<td align="left">
<p style="margin-left:10px">To ensure that all traces are up-to-date.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.TraceConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Trace</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">24</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All requirements are implemented" </p>
</td>
<td align="left">
<p style="margin-left:10px">To ensure that the requirement has traces to the artifacts.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.TraceNotEmptyConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Requirement</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">25</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All components should have a meaningful name" </p>
</td>
<td align="left">
<p style="margin-left:10px">To ensure that the of a component has a meaningful name (i.e., No default names like "Component" or "Component1", "Component2").
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.ComponentNameMeaningfulConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Component</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">26</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the of a component has a trace to the requirement.
</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All components should have a trace to requirement" </p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.mira.constraints.ComponentToRequirementTraceExistsConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Component</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">27</p>
</td>
<td align="left">
<p style="margin-left:10px"> "Port values are within their bounds" </p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that the the bounds (or "ranges") of the ports provided in all components are within bounds by performing the "port bound analysis" (Reference: <a href="bound_check.html"> Bound_Check_Analysis</a>).
</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.specification.constraint.BoundsConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> Component</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">28</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All OCRA contracts satisfied"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure all OCRA contracts are satisfied.</p>
</td>
<td align="left">
<p style="margin-left:10px"> org.fortiss.af3.specification.constraint.ContractConstraint.java</p>
</td>
<td align="left">
<p style="margin-left:10px"> ContractContainer</p>
</td>
</tr>
<tr>
<td align="left">
<p style="margin-left:10px">29</p>
</td>
<td align="left">
<p style="margin-left:10px"> "All state automata are deterministic"</p>
</td>
<td align="left">
<p style="margin-left:10px"> To ensure that all states in the state automata in the current project are reachable by running the determinism analysis (Reference: <a href="non_determinism_analysis.html"> Non_Determinism_Analysis</a>).
</p>