The striking conclusion that one draws … is that the information processing capacity of [flight simulation computation] has been increasing approximately exponentially for nearly thirty years. There is at this time no clear indication that the trend is changing.
?Laurence Fogarty [Fogarty 67]
Modern flight simulators are among the most sophisticated software systems in existence. They are highly distributed, have rigorous timing requirements, and must be amenable to frequent updates to maintain high fidelity with the ever-changing vehicles and environment they are simulating. The creation and maintenance of these large systems presents a substantial software development challenge in designing for the following:
Hard real-time performance
Modifiability, to accommodate changes in requirements and to the simulated aircraft and their environments
Scalability of function, a form of modifiability, needed to extend these systems so that they can simulate more and more of the real world and further improve the fidelity of the simulation
But, as the title of this chapter makes clear, an overriding concern was designing for integrability?a system quality attribute not covered in Chapter 4 but often arising as a driving concern in large systems, especially those developed by distributed teams or separate organizations. Integrability refers to the ease with which separately developed elements, including those developed by third parties, can be made to work together to fulfill the software's requirements. As with other quality attributes, architectural tactics can be brought to bear to achieve integrability (some of which are also aimed at modifiability). These tactics include keeping interfaces small, simple, and stable; adhering to defined protocols; loose coupling or minimal dependencies between elements; using a component framework; and using "versioned" interfaces that allow extensions while permitting existing elements to work under the original constraints.
This chapter will discuss some of the challenges of flight simulation and discuss an architectural pattern created to address them. The pattern is a Structural Model, and it emphasizes the following:
Simplicity and similarity of the system's substructures
Decoupling of data- and control-passing strategies from computation
Minimizing module types
A small number of system-wide coordination strategies
Transparency of design
These principles result in an architectural pattern that, as we will see, features a high degree of integrability as well as the other quality attributes necessary for flight simulation. The pattern itself is a composite of more primitive patterns.