Software developers need to deliver reliable, complex software-centric systems for use on hardware that is of limited availability. Often this must be accomplished quickly and cost-effectively in an environment where there are inevitable unknowns as we push the technology envelope. Products may not have a fully defined set of initial requirements, and system intricacies are not well understood in the early stages of new product development. We have found that an iterative development cycle that leverages software in simulation to model and test the product affords us the opportunity to quickly stand up a system and begin to mitigate risk from Day 1.
In our presentation, we describe how simulation acts as a design and development aid throughout the life cycle of three software-centric products we have worked on. We will show the benefits of using simulation to prototype, demonstrate functionality of representative hardware, and provide early system performance feedback.
Agile software development emphasizes frequent delivery of working software that addresses the most valuable business needs. In our experience, this can be challenging due to the lack of testing facilities and the limited availability of hardware. To address these challenges, we use simulations as prototyping and testing tools for both subsystems and the full end-to-end system. We develop simulations that exercise the deliverable software product, allowing us to demonstrate working software for customers and stakeholders early in the development cycle. We will discuss examples where such demonstrations have provided meaningful insight into the product output and facilitated the early refinement of requirements, reducing project cost and risk.
In one example, we study a simulation framework created to exercise the end-to-end (though abbreviated) functionality of the software, and how it was used to conduct system-level analysis within one month, providing valuable information for design decisions. This case study illustrates how subsystem prototyping can be extended to demonstrate the potential impact of design decisions as they are being evaluated.
Our projects achieved success by maturing the simulation incrementally for use in testing and analysis of functional product software. Simple simulation models were used to exercise production software and retained value as they were matured along with the deliverable software-centric product. This agile incremental software development approach benefited our projects by allowing accurate assessment of progress to project stakeholders and providing a clearer view to the designers and developers of what work needed to be done. We show how such product demonstrations were able to expose interface and integration issues, which if found later in the program would have resulted in costly rework during later stages of system integration.
By leveraging simulation as a tool for prototyping, system-level testing, design analysis, interface development, and product demonstration, we show that simulation-based software development creates better software systems.