Domain-to-range ratio
# Domain-to-range ratio

The domain-to-range ratio (DRR) is a ratio which describes how the number of outputs corresponds to the number of inputs of a given logical function or software component. The domain-to-range ratio is a mathematical ratio of cardinality between the set of the function's possible inputs (the domain) and the set of possible outputs (the range). For a function defined on a domain, $D$, and a range, $R$, the domain-to-range ratio is given as:

$DRR={\frac {|D|}{|R|}}$

It can be used to measure the risk of missing potential errors when testing the range of outputs alone.

## Example

Consider the function isEven below, which checks the parity of an unsigned short number $x$, any value between $0$ and $65,536$, and yields a boolean value which corresponds to whether $x$ is even or odd. This solution takes advantage of the fact that integer division in programming typically rounds towards zero.

Because $x$ can be any value from $0$ to $65,535$, the function's domain has a cardinality of $65,536$. The function yields $0$, if $x$ is even, or $1$, if $x$ is odd. This is expressed as the range $\{0;1\}$, which has a cardinality of $2$. Therefore, the domain-to-range ratio of isEven is given by:

$DRR={65,536 \over 2}=32,768$

Here, the domain-to-range ratio indicates that this function would require a comparatively large number of tests to find errors. If a test program attempts every possible value of $x$ in order from $0$ to $65,535$, the program would have to perform $32,768$ tests for each of the two possible outputs in order to find errors or edge cases. Because errors in functions with a high domain-to-range ratio are difficult to identify via manual testing or methods which reduce the number of tested inputs, such as orthogonal array testing or all-pairs testing, more computationally complex techniques may be used, such as fuzzing or static program analysis, to find errors.

