Tools and Behavioral Abstraction A Direction for Software Engineering K. Rustan M. Leino Research in Software Engineering (RiSE) Microsoft Research, Redmond Future of Software Engineering symposium ETH, Zurich, Switzerland 23 November 2010
with the right features that is easy to use that is hard to misuse accidentally maliciously can be developed effectively on schedule free of defects can be maintained to add features to adapt to new environments to preserve/transfer knowledge between developers
Big changes in recent decades and in decades to come Tools help developers… find simple errors, like type errors build programs optimize programs keep track of program versions run tests symbolically debug generate tests semantically analyze programs
Run time Compile time Design time closer to the time of program construction
Karatsuba, BinarySearch, Schorr-Waite
try, test, fix
try, verify, fix
Microsoft applies lots of semantic tools …to already written software. For programs being constructed, less so.
Need to: Have motivation Must have vested interest in correctness Understand concepts Teach concepts using tools! Understand tools
Our tools can understand our programs , but we don’t understand our tools!
0. Auto-active verification 1. Verification debugging 2. Short turn-around time
Formula
Between fully automatic and interactive verification Automatic reasoning engine Interaction at the level of the source
MathTheorem
Deciphering error messages can be difficult Program errors Specification errors or omissions Misunderstanding constructs Tool incompleteness
Verification debugging Insert
Time to get a failed proof must be short (Time to re-run a proof does not matter)
Find specifications for code Really? Code from specifications
Duplicates
Abstraction by occlusion Procedural abstraction Data abstraction Parameterization Behavioral abstraction
Description at multiple stages Multiple forms of descriptions Change of representation Executable code Ceaseless analysis Automation
User interface Early simulation Prioritizing analysis Allowing informality Refinements into dynamically allocated state Supporting program evolution
Ingredients of the future of software engineering More tools Behavioral abstraction Systems for systematic development
Recommend
More recommend