Lightweight Formal Support for Software Design
Software systems are the accumulated result of myriads of design decisions. But what happens when developers are uncertain about how to make these decisions? The best developer teams are those that are experts at keeping possible options open, juggling multiple design alternatives, and avoiding premature commitments. However, existing tools, languages and methodologies rarely, if ever, take design-time uncertainty into account. In this talk, I present past and planned work on helping the designers of software balance efficiency and quality in the face of uncertainty in contemporary software engineering. To do this I build on a formal but practical framework that supports deferring design decisions while uncertainty persists, allowing development and analysis to continue. This requires drawing from diverse areas of software engineering to create novel abstractions, notations and automation approaches to seamlessly “lift” existing operations to correctly and efficiently handle sets of possible solutions to open design decisions.