An empirical comparison of finite state machines and statecharts
Bragge, Matti (2025)
Diplomityö
Bragge, Matti
2025
School of Engineering Science, Tietotekniikka
Kaikki oikeudet pidätetään.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi-fe2025082993088
https://urn.fi/URN:NBN:fi-fe2025082993088
Tiivistelmä
The finite state machine is a useful model for programming, but it suffers from issues such as the state explosion problem. Statecharts are an extension to finite state machines introducing hierarchy, concurrency, and communication, which allows state explosion to be avoided. This case study compares the two in a practical context to identify benefits and drawbacks of both models. The data used in the study comprised observations and statistics, which were collected by developing generic systems and demos for the models from scratch. The demos are focused on game development and feature functionally identical player character controllers implemented using the developed systems. All technical implementations were made in the Godot game engine.
The comparison showed that in addition to helping with state explosion and its negative consequences for scalability, using a statechart was beneficial for preventing problems like duplicated code, boilerplate, and needing to synchronize timers between states. The final state transition count was also smaller for the statechart demo, which helped minimize duplicate code and made the state diagram clearer. Benefits of the finite state machine included being easier to build a system for, the player controller state machine being easier to design, and debugging tools being simpler to create. Tilakone on hyödyllinen malli ohjelmoimiseen, mutta siihen liittyy ongelmia kuten tilaräjähdys. Tilakartta on tilakoneen laajennus, johon sisältyy hierarkkisuus, yhdenaikaisuus, ja kommunikaatio. Nämä ominaisuudet mahdollistavat tilaräjähdyksen välttämisen. Tämä tapaustutkimus vertaa tilakonetta ja tilakarttaa käytännöllisessä kontekstissa molempien hyötyjen ja haittojen tunnistamiseksi. Tutkimuksessa käytetty data koostui havainnoista ja statistiikoista, jotka saatiin luomalla malleille geneeriset järjestelmät ja demot. Demot keskittyivät pelinkehitykseen sisältäen toiminnallisesti identtiset pelaajahahmon ohjaimet, jotka implementoitiin käyttämällä edellä mainittuja järjestelmiä. Kaikki tekniset implementaatiot luotiin Godot-pelimoottorissa.
Vertailu osoitti, että tilaräjähdyksen ja sen skaalautuvuuten vaikuttavien negatiivisten seuraamuksien välttämisen lisäksi statechart-mallin hyödyt näkyivät muun muassa koodiduplikaation, vakiotekstin, ja ajastimien synkronisaation välttämisenä. Lopullinen tilasiirtymien määrä oli myös pienempi tilakarttademolla, mikä auttoi minimoimaan duplikaattikoodia ja teki tilakaaviosta selvemmän. Tavallisen tilakoneen eduiksi nähtiin järjestelmän kehittämisen helppous, pelaajahahmon ohjaimen tilakoneen suunnittelun helppous ja virheenkorjaustyökalujen luomisen yksinkertaisuus.
The comparison showed that in addition to helping with state explosion and its negative consequences for scalability, using a statechart was beneficial for preventing problems like duplicated code, boilerplate, and needing to synchronize timers between states. The final state transition count was also smaller for the statechart demo, which helped minimize duplicate code and made the state diagram clearer. Benefits of the finite state machine included being easier to build a system for, the player controller state machine being easier to design, and debugging tools being simpler to create.
Vertailu osoitti, että tilaräjähdyksen ja sen skaalautuvuuten vaikuttavien negatiivisten seuraamuksien välttämisen lisäksi statechart-mallin hyödyt näkyivät muun muassa koodiduplikaation, vakiotekstin, ja ajastimien synkronisaation välttämisenä. Lopullinen tilasiirtymien määrä oli myös pienempi tilakarttademolla, mikä auttoi minimoimaan duplikaattikoodia ja teki tilakaaviosta selvemmän. Tavallisen tilakoneen eduiksi nähtiin järjestelmän kehittämisen helppous, pelaajahahmon ohjaimen tilakoneen suunnittelun helppous ja virheenkorjaustyökalujen luomisen yksinkertaisuus.
