"Achieving Extensibility Through Product-Line and Domain-Specific
Languages: A Case Study” Don Batory, Clay Johnson, Bob MacDonald, and Dale
Von Heeder, ACM Transactions on Software Engineering and Methodology,
11(2), April 2002, pp. 191–214.
Anyone interested in the current discussion of “agile development” supported by
refactoring will find this paper interesting and useful. The paper describes an
example of applying layered development methods to a complex, realtime, rapidly
changing requirements environment.
This case study shows how software refactoring can be enhanced using abstractions of interfaces and domain-specific languages. The legacy Fire Support Automated Test System (FSATS) was redesigned to provide extensibility using the GenVoca. Although GenVoca and Aspect Oriented Programming (AOP) have different starting points, they both begin with some encapsulated representation of system function and provide a mechanism to define and apply large-scale refinements. The GenVoca system implemented in the Jakarta Tool Suite along with a domain–specific language is used to declare and define the state machines that form the core of the FSATS simulator.
The extension of these state machines is the motivation for the GenVoca tool. A detailed description of the legacy simulator and the changes made to provide extensibility occupies the majority of the paper. Some background reading in Aspect Oriented Programming concepts, the GenVoca system, and layer distributed object systems are needed to gain value from the paper. Once these concepts and terminology are acquired a second reading reveals deeper insight into the process of designing “layered” state driven system using automated tools.
Examples of Java State Machine declarations are provided. Refinements of these state machines, the refactoring processes, and their impacts on the overall system design provide the reader with detailed examples of how GenVoca is used to create a unique software development environment.
Although the paper describes techniques used for building state driven simulators, systems of this type can be found in other domains including workflow processing, telecommunications, and business transaction processing.
By directly implementing the state specifications in JavaSM, the “conceptual distance” between specification and implementation was reduced. This approach is the motivation of many of today “modern” software development methods. Here is a non–trivial example of how this can be done.
Glen B. Alleman
Niwot Ridge Consulting