1. Introduction
Software is a key element in many of today’s complex systems, whether they are aerospace, defense, healthcare, automotive, telecommunication or critical infrastructure. The software element has also increased in complexity, with many systems being comprised of millions or tens of millions of lines of code (Charette 2009). The development of complex software systems has created a need for software assurance to ensure the systems perform as required.
The path from simple computer programs to today’s complex systems has occurred over the last 40 years. As software increased in complexity, formal methods and practices to ensure that the code was designed and built correctly have improved as well. (Royce 1970) The path for developing software assurance, the elements of designing and creating software that works as desired and only as desired has been a rocky one. The path has been marked by many differing definitions and agendas and has led to a division among participants.