Derivational software engineering

Douglas R. Smith, Louis Hoebel
2010 Proceedings of the FSE/SDP workshop on Future of software engineering research - FoSER '10  
Design Current Software Practice Software exists to fulfill needs that individuals and organizations have. Software is a complex artifact that fulfills those needs by providing services, while consuming reasonable levels of resource and conforming to constraints from its context. To develop software, developers bring their design knowledge to bear, translating their understanding of the requirements by adapting existing code and creating new specialized code. Unfortunately, the design knowledge
more » ... and its rationale are usually not captured in a useful form. In our view, software should be treated as a formal composition of requirement specifications, models, library components, design abstractions (e.g. system architecture patterns, design patterns, algorithm patterns, etc.), datatype refinements, optimizations, and other specialized code generation techniques. We call this composition the derivation structure of the software. Our intent is that a machine could execute a derivation structure to generate code, effectively mechanically replaying a summary of the developer's design process. Current practice leaves the derivation structure informal and largely unrecorded, giving rise to critical deficiencies: • Cost of evolution -Most of the cost of software over its lifecycle results from adapting the code to meet changing requirements. Without an explicit derivation structure, there can be little in the way of machine support for software evolution. • Lack of confidence -The design and evolution process leaves behind little or no evidence that the artifact achieves its goals. How do I as a buyer know that a product has the functionality that it claims? How do I know that it operates safely and securely in my environment? What evidence can I examine to determine the validity of the advertised features of the product? • Cost of certification -Because of the informal development process, the cost of certifying software systems is often several times the cost of developing the software. It would be far better if the development process itself generated verifiable (i.e. independently and efficiently checkable) evidence that the code meets its requirements. For example, if a design pattern were formalized, and pre-analyzed for its properties, then it would be possible to generate certification evidence at the same time that the code pattern is instantiated. To address these deficiencies, a science of design providing solid foundations for software engineering will focus on derivation structure as the essence of software. A derivation structure provides better localization and modularization of concerns than code does. Software is more than source/binary code, software is its derivation structure.
doi:10.1145/1882362.1882434 dblp:conf/sigsoft/SmithH10 fatcat:2gzj5gmyd5bghcqt4h3okyjqbe