While the principles of Finite State Machines (FSMs) are familiar to many computer professionals, the techniques used to design such devices are not commonly used in software development. Even when it is obvious from the start that a required piece of code represents a FSM (e.g. a language parser, a command interpreter, etc.), we rarely go beyond sketching a state flow diagram which eventually gets trashed long before the completion of the project.
This paper will examine a simple and practical method for creating software which is based on the idea that many computer programs have all of the properties of Finite State Machines and can thus be implemented effectively by applying some of the procedures used to design those machines.
The method we will be discussing has the following features:
* It is applicable at the initial stages of conceptual design as
well as at the module coding leveL
* It produces extensible and maintainable code.
* It reduces code complexity.
* The design, code, and documentation are tightly coupled.
* It incorporates an effective debugging method.
* It allows software design and verification “by committee”.