list of dots Digital Research Alliance of Canada logo  NSERC logo  University of Ottawa logo / UniversitĂ© d'Ottawa

User Manual    [Previous]   [Next]   

Requirement Quality Classes

A requirement can be tagged with the quality language, which marks it as a non-functional requirement characterised by a set of named quality classes. Each class represents a discrete level or option for the property being described (for example High / Medium / Low for speed, or Perfect / SlightlyRisky / Weak for security).

Syntax:

req <ReqIdentifier> quality {
  <QualityClassName> {}
  <QualityClassName> {}
  ...
}

Quality classes are declared with empty bodies. Non-empty bodies are currently accepted by the parser but produce warning 403 and have no effect on generated output.

An implementsReq statement can reference a specific quality class using parenthesised arguments, and several bindings can be combined in a single statement:

implementsReq Speed(High);
implementsReq Speed(High), Security(Perfect);

When alternative designs (typically different mixsets) are each tagged with quality classes referring to the same set of quality requirements, the designs can be compared on a common set of criteria. See Requirement Quality Comparison Table for the generated output, and Requirements for the general requirement-statement syntax.


Basic quality requirement declaration

// Quality requirements introduce named quality classes
// (discrete levels of a non-functional property) that can
// later be bound to alternative designs via implementsReq.

req Speed quality {
  High {}
  Medium {}
  Low {}
}

req Security quality {
  Perfect {}
  SlightlyRisky {}
  Weak {}
}

      

Load the above code into UmpleOnline

 

Binding quality classes to alternative mixsets

// implementsReq binds a requirement (and optionally a specific
// quality class) to the following entity. Each mixset below is
// an alternative design tagged with its own quality levels.

req Speed quality {
  High {}
  Low {}
}

req Security quality {
  Perfect {}
  Basic {}
}

implementsReq Speed(High), Security(Perfect);
mixset DesignA {
  class FastSecureCar {}
}

implementsReq Speed(Low), Security(Basic);
mixset DesignB {
  class SlowCar {}
}

use DesignA;

      

Load the above code into UmpleOnline