As
a software engineer you are probably familiar with Finite State Machines
and their traditional usage in digital hardware design. You are likely
aware that FSM concepts are also part of the UML modeling capabilities
using Statecharts. As indicated by the
2008 Market Survey
provided by Embedded Systems Design magazine, about one in five embedded
projects uses UML. The survey does not specify whether UML Statecharts
is the reason why UML is used. Unfortunately, the survey does not
provide any data about the use of Finite State Machines for embedded
software either, so it is difficult to assess the opinion software
engineers have about FSMs. It could be stated that the current
unpopularity of FSMs (for embedded software) might be attributed to the
fact that FSMs are traditionally a digital hardware design method, and
that they are therefore too complex to even consider using for embedded
software architecture design. Also, there exists a common misconception
that attempting to model and design an entire system as a single state
machine results in 'state explosion' and unnecessary complexity. Thanks,
in part, to
Harel[87]'s Statecharts: A Visual Formalism for
Complex Systems,
this misconception should be dispelled entirely. Statecharts introduced
orthogonality/concurrency and the concept of AND states (versus
exclusive OR) and Staccato™ introduces 'partitioning by resource' to
encourage an architecture based on 'a system of Finite State Machines'.
Given this, software engineers should (re)consider using FSM concepts in
their embedded software architecture and module design.