Test case prioritization using build history and test distances : an approach for improving automotive regression testing in continuous integration environments
Haghighatkhah, Alireza (2020-01-21)
https://urn.fi/URN:ISBN:9789526224770
Kuvaus
Tiivistelmä
Abstract
Agile software development has become a source of competitive advantage in many industrial sectors, including the automotive domain. Continuous integration (CI) is an agile practice and involves integrating software changes as often and as early as possible. CI in combination with regression testing is considered a good software development practice, because it ensures that recent changes have not negatively impacted the software’s functionality. The execution of a large test suite at each integration (also known as the build) cycle is not realistic. To detect regression faults earlier, one alternative is to permute the test cases within the regression test suite. This is known as test case prioritization (TCP).
This dissertation aims to shorten the build cycle in CI environments by detecting regression faults earlier, allowing software developers to integrate and verify their changes more frequently and continuously. The research was performed in three phases. In the 1st phase, the relevant literature was systematically surveyed to analyze the existing body of knowledge and identify research opportunities. In the 2nd phase, the TCP technique of history-based diversity was developed and subjected to several rounds of improvements and evaluations. In the 3rd phase, results from the previous two phases were synthesized in order to draw conclusions and outline implications.
Our results bring to mind the well-known adage “don’t put all your eggs in one basket”. For the initial stages, when no information about the system under test is available, one should spread the limited testing budget evenly across different parts of the system by running the most dissimilar test cases early in the process (i.e., maximizing diversity as early as possible). For the later stages, when historical build data are available, one should give higher priority to the test cases that have higher historical value (i.e., those that revealed the most failure in the most recent revisions) and that are most distant from those previously prioritized (i.e., cover different areas of the system).
One of the major contributions of this dissertation is the design, implementation, and experimental evaluation of a TCP technique using 12 open-source Java programs. Findings from the experiments provide empirical evidence in support of two previously proposed TCP heuristics — failure recurrence and test diversity — and their combination in CI development environments. Furthermore, results from the systematic mapping studies contribute to the literature by providing a synthesized and structured body of knowledge and a basis for future studies. We conclude that TCP can be performed in CI environments with negligible investment using build history and test distances.
Tiivistelmä
Ketterä ohjelmistokehitys tarjoaa kilpailuetua monella teollisen tuotannon alalla mukaan lukien autoteollisuus. Jatkuva integrointi on ketterän ohjelmistokehityksen käytäntö, jossa muutoksia integroidaan mahdollisimman varhain ja tiheään. Jatkuvan integroinnin ja regressiotestauksen yhdistäminen on hyväksi havaittu käytäntö, koska näin voidaan varmistaa, että viimeisimmät muutokset eivät vaikuta ohjelmiston toiminnallisuuteen haitallisesti. Suuren testisarjan suorittaminen jokaisen integraation (eli koonnin) jälkeen ei ole realistista. Jotta virheitä havaittaisiin aiemmin, testisarjan testitapaukset voidaan permutoida. Tätä kutsutaan testitapausten priorisoinniksi.
Tämä väitöstutkimus pyrkii lyhentämään jatkuvan integroinnin koontisykliä nopeamman virheiden löytämisen avulla, jotta muutokset voidaan integroida ja varmistaa entistä tiheämmin ja jatkuvasti. Tutkimus tehtiin kolmessa vaiheessa. Ensimmäisessä vaiheessa kartoitettiin olemassa oleva tutkimus ja tunnistettiin tarve uudelle tutkimukselle systemaattisella kirjallisuuskatsauksella. Toisessa vaiheessa historia- ja etäisyysperustaista testitapausten priorisointitekniikkaa kehitettiin useamman parannus- ja evaluointi-iteraation kautta. Kolmannessa vaiheessa syntetisoitiin kahden edellisen vaiheen tulokset ja hahmoteltiin johtopäätökset.
Tulokset osoittavat, että ei kannata ”laittaa kaikkia munia samaan koriin”. Testaamisen alkuvaiheessa, kun tieota on vain vähän, tulisi testauksen rajallinen budjetti jakaa mahdollisimman erilaisten testitapausten kesken siten, että testaus kohdistuu järjestelmän eri osa-alueisiin (ts. maksimoidaan testauksen monimuotoisuus mahdollisimman aikaisin). Myöhemmissä vaiheissa, kun koontihistoriaa on saatavilla, tulisi priorisoida niitä testitapauksia, joilla on suurempi arvo historiassa (eli ne testitapaukset, joilla löydettiin eniten virheitä viimeisimmässä versiossa) ja jotka ovat mahdollisimman etäisiä verrattuna niihin testitapauksiin, joita priorisoitiin viimeksi (ts. kattaa ohjelmiston eri osa-alueita).
Tämän väitöksen yksi keskeisimmistä kontribuutioista on testitapauspriorisointitekniikan suunnittelu, toteutus ja kokeellinen evaluointi käyttäen kahdentoista avoimen lähdekoodin Java-ohjelman viallisia koonteja. Kokeellisen tutkimuksen tulokset tukevat kahta aiemmin ehdotettua testitapauspriorisointiheuristiikkaa — virheiden toistuminen ja testien monimuotoisuus — sekä näiden yhdistämistä jatkuvan integroinnin ohjelmistokehityksessä. Lisäksi, systemaattisen kirjallisuuskatsauksen tulos tarjoaa ajantasaisen tietämyksen esitys strukturoidusti ja perustan tulevalle tutkimukselle. Tulimme siihen johtopäätökseen, että testitapausten priorisointi voidaan tehdä pienillä investoinneilla jatkuvan integroinnin ympäristössä hyödyntäen testihistoriaa ja testietäisyyttä.
Original papers
Original papers are not included in the electronic version of the dissertation.
Rodríguez, P., Haghighatkhah, A., Lwakatare, L. E., Teppola, S., Suomalainen, T., Eskeli, J., … Oivo, M. (2017). Continuous deployment of software intensive products and services: A systematic mapping study. Journal of Systems and Software, 123, 263–291. https://doi.org/10.1016/j.jss.2015.12.015
Haghighatkhah, A., Banijamali, A., Pakanen, O.-P., Oivo, M., & Kuvaja, P. (2017). Automotive software engineering: A systematic mapping study. Journal of Systems and Software, 128, 25–55. https://doi.org/10.1016/j.jss.2017.03.005
Haghighatkhah, A., Oivo, M., Banijamali, A., & Kuvaja, P. (2017). Improving the State of Automotive Software Engineering. IEEE Software, 34(5), 82–86. https://doi.org/10.1109/ms.2017.3571571
Haghighatkhah, A., Mäntylä, M., Oivo, M., & Kuvaja, P. (2018). Test prioritization in continuous integration environments. Journal of Systems and Software, 146, 80–98. https://doi.org/10.1016/j.jss.2018.08.061
Haghighatkhah, A., Mäntylä, M., Oivo, M., & Kuvaja, P. (2018). Test Case Prioritization Using Test Similarities. Lecture Notes in Computer Science, 11271, 243-259. https://doi.org/10.1007/978-3-030-03673-7_18
Osajulkaisut
Osajulkaisut eivät sisälly väitöskirjan elektroniseen versioon.
Rodríguez, P., Haghighatkhah, A., Lwakatare, L. E., Teppola, S., Suomalainen, T., Eskeli, J., … Oivo, M. (2017). Continuous deployment of software intensive products and services: A systematic mapping study. Journal of Systems and Software, 123, 263–291. https://doi.org/10.1016/j.jss.2015.12.015
Haghighatkhah, A., Banijamali, A., Pakanen, O.-P., Oivo, M., & Kuvaja, P. (2017). Automotive software engineering: A systematic mapping study. Journal of Systems and Software, 128, 25–55. https://doi.org/10.1016/j.jss.2017.03.005
Haghighatkhah, A., Oivo, M., Banijamali, A., & Kuvaja, P. (2017). Improving the State of Automotive Software Engineering. IEEE Software, 34(5), 82–86. https://doi.org/10.1109/ms.2017.3571571
Haghighatkhah, A., Mäntylä, M., Oivo, M., & Kuvaja, P. (2018). Test prioritization in continuous integration environments. Journal of Systems and Software, 146, 80–98. https://doi.org/10.1016/j.jss.2018.08.061
Haghighatkhah, A., Mäntylä, M., Oivo, M., & Kuvaja, P. (2018). Test Case Prioritization Using Test Similarities. Lecture Notes in Computer Science, 11271, 243-259. https://doi.org/10.1007/978-3-030-03673-7_18
Kokoelmat
- Avoin saatavuus [34617]