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).[1] [2] For a function defined on a domain, {\displaystyle D}, and a range, {\displaystyle R}, the domain-to-range ratio is given as:{\displaystyle DRR={\frac {|D|}{|R|}}}It can be used to measure the risk of missing potential errors when testing the range of outputs alone.[3]
Example
[edit ]Consider the function isEven()
below, which checks the parity of an unsigned short number {\displaystyle x}, any value between {\displaystyle 0} and {\displaystyle 65,536}, and yields a boolean value which corresponds to whether {\displaystyle x} is even or odd. This solution takes advantage of the fact that integer division in programming typically rounds towards zero.
boolisEven(unsignedshortx){ return(x/2)==((x+3)/2-1); }
Because {\displaystyle x} can be any value from {\displaystyle 0} to {\displaystyle 65,535}, the function's domain has a cardinality of {\displaystyle 65,536}. The function yields {\displaystyle 0}, if {\displaystyle x} is even, or {\displaystyle 1}, if {\displaystyle x} is odd. This is expressed as the range {\displaystyle \{0;1\}}, which has a cardinality of {\displaystyle 2}. Therefore, the domain-to-range ratio of isEven()
is given by:{\displaystyle 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 {\displaystyle x} in order from {\displaystyle 0} to {\displaystyle 65,535}, the program would have to perform {\displaystyle 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.
See also
[edit ]References
[edit ]- ^ Voas, J.M.; Miller, K.W. (March 1993). "Semantic metrics for software testability". Journal of Systems and Software. 20 (3): 207–216. doi:10.1016/0164-1212(93)90064-5.
- ^ Woodward, Martin R.; Al-Khanjari, Zuhoor A. (5 September 2000). Testability, fault size and the domain-to-range ratio: An eternal triangle. ACM SIGSOFT. pp. 168–172. doi:10.1145/347324.349016. ISBN 978-1-58113-266-3. S2CID 17772461.
- ^ Tarlinder, Alexander (2016). Developer testing : building quality into software. Addison-Wesley. ISBN 978-0-13-429106-2. OCLC 992888632.
This software-engineering-related article is a stub. You can help Wikipedia by expanding it.
This mathematics-related article is a stub. You can help Wikipedia by expanding it.