Abstract
TDD is a technique traditionally applied in applications with deterministic algorithms, in which the input and the expected result are known. However, the application of TDD with randomized algorithms have been a challenge, especially when the execution demands several random choices. The goal of this paper is to present an approach to allow the use of TDD in the development of randomized algorithms, and the Random Engagement for Test (ReTest) framework, a JUnit extension that provides support for the proposed approach. Furthermore, this paper present the results of a single-subject experiment carried out to assess the feasibility of the proposed approach, and a study on developer experience when using ReTest framework. Our results support the claim that the proposed approach is suitable for the development of randomized software using TDD and that the ReTest framework is useful and easy to use.
Highlights
When the execution of a software system always leads to an expected result, it is considered a deterministic algorithm
We present the results of two studies: a single-subject experiment carried out to assess the feasibility of the proposed approach in an algorithm implementation involving multiple random decisions in sequence, and a study to assess the developer’s experience when using Random Engagement for Test (ReTest) framework that automates the approach steps
In order to automate tests of randomized logic, we have proposed an approach based on three software patterns: Deterministic Characteristic Assertion - to create an assertion that verifies the validity of the algorithm result; Re-test With Different Seeds - to execute the test several times with different seeds; and Recycle Failed Seeds - to persist seeds used in failed tests to be reused in future test executions
Summary
When the execution of a software system always leads to an expected result, it is considered a deterministic algorithm. There are several algorithms whose execution might result in different correct outputs for the same input This kind of algorithm with non-deterministic behavior is named randomized algorithms (Cormen et al 2001). Algorithms used to find an approximate solution to NP-Hard problems or Monte Carlo Algorithm, usually take random choices into account. These randomized algorithms are commonly categorized into two classes (Cormen et al 2001):. Monte Carlo Algorithms: define a class of algorithms that generally run quickly and return the correct answer with high probability, albeit, it might return a wrong answer. Approximation algorithms, such as Genetic Algorithms, are variations of the Monte Carlo Algorithms
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have
More From: Journal of Software Engineering Research and Development
Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.