In this section, we start our discussion around software architecture. Taking a broad perspective all software architecture has three attributes
- Components: Components are the fundamental building blocks of all software; they contain the “guts” that enable the software to perform their required functions. These could be viewed as functions or classes in C/C++ or models in the Simulink environment.
- Connectivity: Connectivity is how components exchange information (data) with other components. For example, a function definition in C / C++ or input and output ports in a Simulink model
- Scheduling and execution control: The software architecture allows for (and maybe) the entity that controls the execution of the components. Note: this is not addressing the low-level O/S scheduling.
So knowing the attributes the next question is “what are the functional objectives?”
- Facilitates group and individual development workflows: Individuals should be able to work on the component they are developing with minimal impact/reliance on other people in their group. At the same time, the group should be able to use components from others at an early stage in development.
- Provides easy integration of components: The components should be able to easily “connect” with components in both the new model based environment and any existing text based (C) environment.
- Enables unit and system level testing: Components should be designed with clearly defined external dependencies and they should be minimized. At the system level, child models should enable testing early in the design process using shell models.
- Promotes reuse of components: Developers should be able to reuse components either directly or through some data-driven modification.
- Is efficient in both execution speed and memory usage: The decomposition of the system level model into components should balance clarity with efficiency.
The final consideration is stylistic(1), how do you create a model architecture and components that are easy for controls, system and test engineers to understand? The M.A.A.B. Style Guidelines provide a solid foundation for developing understandable components. In my next blog post, I will start looking at how components fit into system level architectures and how they can be elaborated and tested throughout the development cycle.
(1) While I list the final consideration as “stylistic” it is of the highest importance. As clarity of communication is essential for ensuring reuse (objective 4), ease of integration (objective 2) and allowing group and individual workflows (objective 1).