Test Case Generation for Embedded Control System
Vahos, Santeri (2024)
Vahos, Santeri
2024
Automaatiotekniikan DI-ohjelma - Master's Programme in Automation Engineering
Tekniikan ja luonnontieteiden tiedekunta - Faculty of Engineering and Natural Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2024-04-09
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202403182940
https://urn.fi/URN:NBN:fi:tuni-202403182940
Tiivistelmä
Software is arguably one of the most important parts of any embedded control system, as microcontrollers or computers function as the brain of the system. Therefore, ensuring correct operation and quality of the software needs to be verified throughout the development process with different kind of software testing methods. As embedded control systems grow evermore complex to perform all kinds of tasks, creating tools that help developers to produce and maintain good quality software tests are needed.
Creating test cases requires developers to spend valuable development time on tedious, but important, task of figuring out how exactly they can exercise the software as much as possible. Algorithmically creating some of these test cases would speed up development process by moving some of the work usually left for humans to be done during a CI-process. Expecting algorithms to completely replace some human work is not realistic, so part of the software testing process needs to be looked from a different angle to achieve satisfactory results.
Usual way of regression software testing requires close introspection of implemented software and requirements, based on which test cases are then produced by software developers or test engineers. However, code coverage is a metric that can be used to evaluate quality of regression test sets by measuring how much of the program is being executed. Using this in-sight, algorithmic methods can be applied to produce regression tests that exhaustively exercise some program.
In this thesis, Genetic Algorithms are used in Model-Based software development environment, to generate regression test suites to be used in control systems of forest machines. Requirements that guide some of the different design choices for the algorithm are explored. More specific details are explored in a level that is required to produce the algorithm implemented in this thesis. The proposed algorithm is implemented and evaluated in Model-Based software development environment.
Algorithm was successfully implemented and significant convergence of code coverage was shown to be possible with the proposed approach. Usage as a software development tool, as initially intended, was shown to be possible, but most likely impractical. Biggest reasons for impracticality as a software development tool were long runtime and case-by-case parametrization, without which convergence was slow or low in code coverage. Additional future work might be able to transform the algorithm as tool from impractical to practical. Nykypäivänä yksi tärkeimmistä osista sulautetuissa järjestelmissä on niiden toimintaa ohjaavat ja valvovat ohjelmistot. Näiden ohjelmistojen laatua pitää varmistaa erilaisia ohjelmistotestaus metodeja hyödyntäen kehitysprosessin aikana. Sulautettujen järjestelmien kehittyessä monimutkaisemmiksi, on noussut tarve luoda ohjelmistokehittäjien työskentelyä helpottavia ja nopeuttavia työkaluja.
Testitapausten luominen on aikaa vaativaa ja pikkutarkkaa työtä, jota ohjelmistokehittäjät tai testi-insinöörit tekevät luodakseen tapauksia, jotka suorittavat testin alla olevaa ohjelmisto mahdollisimman kattavasti. Algoritmisesti uusien ohjelmistoa testaavien testitapausten luominen nopeuttaisi ohjelmistokehitysprosessia siirtämällä osan ohjelmistokehittäjien manuaalisesta työkuormasta CI-prosessille. Näiden algoritmisesti luotujen testitapausten ei kuitenkaan voida olettaa täysin korvaavan ihmisten työpanosta, joten osaa ohjelmistotestausprosessista pitää tutkia eri kantilta, jotta testitapaukset tuovat lisä arvoa prosessiin.
Perinteinen tapa tehdä regressiotestausta jollekin ohjelmistolle vaatii kohteena olevan ohjelmiston tarkkaa tutkimista ja sen vaatimusten ymmärtämistä, jotta ohjelmistokehittäjä tai testi-insinööri pystyvät luomaan tarvittavat testitapaukset. Koodikattavuutta voidaan käyttää hyödyksi regressiotestejä luodessa algoritmisesti, sillä koodikattavuus indikoi kuinka suuri osa ohjelmasta on suoritettu. Algoritmi, joka maksimoida koodikattavuuden manipuloimalla ohjelman syötettä iteratiivisesti, pystyy myös luomaan myös regressiotestisettejä.
Tässä opinnäytetyössä geneettisiä algoritmeja hyödynnettiin luomaan regressiotestisettejä mallipohjaiseen ohjelmistokehitykseen. Luotuja regressiotestisettien käyttötarkoitus olisi hyödyntää niitä metsäkoneiden ohjausjärjestelmien laadun varmistuksessa. Yleisen tason vaatimuksia algoritmille ja siitä johtuvia suunnittelupäätöksiä on käsitelty. Tarkempia yksityiskohtia on käsitelty niiltä osin, kun on vaadittu tämän opinnäytetyön toteuttamiseen. Mallipohjaista ohjelmistokehitysympäristöä käytettiin hyödyksi niin toteutuksessa kuin myös algoritmin suorituskyvyn arvioinnissa.
Opinnäytetyössä kuvattu algoritmi implementointiin onnistuneesti ja sillä saavutettiin huomattavaa konvergenssia kohti korkeaa koodikattavuutta. Luodun algoritmin käyttö ohjelmistotyökaluna, joka oli opinnäytetyön lähtöajatus, todettiin olevan mahdollinen, mutta epäkäytännöllinen. Suurimmat syyt tähän olivat algoritmin pitkä suoritusaika, sekä yksittäistapausten vaativa parametrisointi. Ilman parametrisoinnin tekemistä konvergenssi oli hidasta tai koodikattavuus jäi matalaksi. Erinäisiä jatkokehitys mahdollisuuksia listattiin, joilla voisi lisätä algoritmin käytännöllisyyttä ohjelmistokehitystyökaluna.
Creating test cases requires developers to spend valuable development time on tedious, but important, task of figuring out how exactly they can exercise the software as much as possible. Algorithmically creating some of these test cases would speed up development process by moving some of the work usually left for humans to be done during a CI-process. Expecting algorithms to completely replace some human work is not realistic, so part of the software testing process needs to be looked from a different angle to achieve satisfactory results.
Usual way of regression software testing requires close introspection of implemented software and requirements, based on which test cases are then produced by software developers or test engineers. However, code coverage is a metric that can be used to evaluate quality of regression test sets by measuring how much of the program is being executed. Using this in-sight, algorithmic methods can be applied to produce regression tests that exhaustively exercise some program.
In this thesis, Genetic Algorithms are used in Model-Based software development environment, to generate regression test suites to be used in control systems of forest machines. Requirements that guide some of the different design choices for the algorithm are explored. More specific details are explored in a level that is required to produce the algorithm implemented in this thesis. The proposed algorithm is implemented and evaluated in Model-Based software development environment.
Algorithm was successfully implemented and significant convergence of code coverage was shown to be possible with the proposed approach. Usage as a software development tool, as initially intended, was shown to be possible, but most likely impractical. Biggest reasons for impracticality as a software development tool were long runtime and case-by-case parametrization, without which convergence was slow or low in code coverage. Additional future work might be able to transform the algorithm as tool from impractical to practical.
Testitapausten luominen on aikaa vaativaa ja pikkutarkkaa työtä, jota ohjelmistokehittäjät tai testi-insinöörit tekevät luodakseen tapauksia, jotka suorittavat testin alla olevaa ohjelmisto mahdollisimman kattavasti. Algoritmisesti uusien ohjelmistoa testaavien testitapausten luominen nopeuttaisi ohjelmistokehitysprosessia siirtämällä osan ohjelmistokehittäjien manuaalisesta työkuormasta CI-prosessille. Näiden algoritmisesti luotujen testitapausten ei kuitenkaan voida olettaa täysin korvaavan ihmisten työpanosta, joten osaa ohjelmistotestausprosessista pitää tutkia eri kantilta, jotta testitapaukset tuovat lisä arvoa prosessiin.
Perinteinen tapa tehdä regressiotestausta jollekin ohjelmistolle vaatii kohteena olevan ohjelmiston tarkkaa tutkimista ja sen vaatimusten ymmärtämistä, jotta ohjelmistokehittäjä tai testi-insinööri pystyvät luomaan tarvittavat testitapaukset. Koodikattavuutta voidaan käyttää hyödyksi regressiotestejä luodessa algoritmisesti, sillä koodikattavuus indikoi kuinka suuri osa ohjelmasta on suoritettu. Algoritmi, joka maksimoida koodikattavuuden manipuloimalla ohjelman syötettä iteratiivisesti, pystyy myös luomaan myös regressiotestisettejä.
Tässä opinnäytetyössä geneettisiä algoritmeja hyödynnettiin luomaan regressiotestisettejä mallipohjaiseen ohjelmistokehitykseen. Luotuja regressiotestisettien käyttötarkoitus olisi hyödyntää niitä metsäkoneiden ohjausjärjestelmien laadun varmistuksessa. Yleisen tason vaatimuksia algoritmille ja siitä johtuvia suunnittelupäätöksiä on käsitelty. Tarkempia yksityiskohtia on käsitelty niiltä osin, kun on vaadittu tämän opinnäytetyön toteuttamiseen. Mallipohjaista ohjelmistokehitysympäristöä käytettiin hyödyksi niin toteutuksessa kuin myös algoritmin suorituskyvyn arvioinnissa.
Opinnäytetyössä kuvattu algoritmi implementointiin onnistuneesti ja sillä saavutettiin huomattavaa konvergenssia kohti korkeaa koodikattavuutta. Luodun algoritmin käyttö ohjelmistotyökaluna, joka oli opinnäytetyön lähtöajatus, todettiin olevan mahdollinen, mutta epäkäytännöllinen. Suurimmat syyt tähän olivat algoritmin pitkä suoritusaika, sekä yksittäistapausten vaativa parametrisointi. Ilman parametrisoinnin tekemistä konvergenssi oli hidasta tai koodikattavuus jäi matalaksi. Erinäisiä jatkokehitys mahdollisuuksia listattiin, joilla voisi lisätä algoritmin käytännöllisyyttä ohjelmistokehitystyökaluna.