4.9. Quality Calculation¶
In MQC, functions are used to calculate
quality properties (see Quality Computation)
derived measures (see Derived Measures)
4.9.1. Functions in MQC¶
There are two types of functions in MQC:
Functions to calculate numerical values, e.g. quality measurement functions where the result is a quality value between 0 and 1
Functions to evaluate conditional expressions, where the result is a certain quality bin (see Conditions)
In both cases Mathematical functions as well as Logical functions and operators can be used to define a function.
In all functions, base and derived measures always must be defined in square
brackets [
and ]
!
4.9.1.1. Functions to calculate numerical values¶
These functions are used to calculate a number, e.g. a value between 0 and 1 as quality, or to combine the values of multiple similar data measures (via sum, avg, etc.) to compute derived measures.
The following examples depict how to define numerical functions, starting from the simplest case to more complex expressions.
[Model Decision Coverage.Ratio]
In this case the imported data measure is already a value between 0 and 1. It may be directly used to derive the corresponding quality property value.
[TestCount.Passed] / [TestCount.Total]
Such expressions are mainly used to compare a value against an expected value.
The closer the value of TestCount.Passed
is to the TestCount.Total
, the
better the quality.
(1.0 * [TestCount.Succeeded] +
0.2 * [TestCount.Failed] +
0.0 * [TestCount.Errors] +
0.0 * [TestCount.Inconclusive])
/ [TestCount.Total]
Combining similar measures like the amount of different test results, may lead
to a more detailed representation of the reality. Factors may be used to
increase or reduce the impact of a certain measure. In the above example a
factor of 0.2
is used for the number of failed test cases to differentiate
between these tests and the not executed ones.
[TestCount.Total] == 0 ? 0 : [TestCount.Passed] / [TestCount.Total]
[GuidelineCount.Passed] + log(1 + [FindingCount.Passed], 2)
The above examples show more complex expressions using inline if
statements
respectively mathematical functions like log(x, y)
.
4.9.1.2. Functions to evaluate conditional expressions¶
The result of a conditional function is either true
or false
. This type
of functions is used to define Conditions.
The simplest case of such a conditional function is shown by the following example.
True
A more complex example uses different base measures (possibly from different data
sources) to evaluate if the result of the condition is true
or false
.
(([Statement Coverage.Ratio] >= 0.8 and
[TestCount.Failed] = 0 and
[TestCount.Error] = 0) or
([MC/DC Coverage.Ratio] >= 0.8 and
[TestCount.Failed] = 0 and
[TestCount.Error] = 0))
4.9.2. Mathematical functions¶
Apart from the four basic arithmetic operations (+
, -
, *
and
/
), the following functions can be used:
Abs(x):
Returns the absolute (positive) value of x
Cbrt(x):
Returns the cube root of x
Ceil(x):
Returns x rounded up to its nearest integer
Cos(x):
Returns the cosine (a value between -1 and 1) of the angle x (given in radians)
Exp(x):
Returns the value of e to the power of x
Floor(x):
Returns x rounded down to its nearest integer
Log(x, y):
Returns the logarithm of x with base y (if no y is given, the base is e)
Max():
Returns the highest value in a list of arguments
Min():
Returns the lowest value in a list of arguments
Pow(x, y):
Returns the value of x to the power of y
Round(x):
Returns x rounded to its nearest integer
Sign(x):
Returns if x is negative, null or positive
Sin(x):
Returns the sine (a value between -1 and 1) of the angle x (given in radians)
Sqrt(x):
Returns the square root of x
Tan(x):
Returns the tangent of x
Trunc(x):
Returns the integer part of x
4.9.3. Logical functions and operators¶
The following statements resp. operators can be used:
Inline if
To define conditional expressions to be used e.g. for step functions.
[OpenIssues.Total] = 0 ? 1 : [OpenIssues.Total] <= 10 ? 0.5 : [OpenIssues.Total] <= 100 ? 0.2 : 0
And
Connects two or more expressions and returns only
true
if all expressions returntrue
. Can be used ininline if
statements as well as to define bin conditions.Or
Connects two or more expressions and returns
true
if at least one of the expressions returnstrue
. Can be used ininline if
statements as well as to define bin conditions.