# 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 return`true`

. Can be used in`inline 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 returns`true`

. Can be used in`inline if`

statements as well as to define bin conditions.