Methods of Software Development Karl Lieberherr Spring 2007
A list of possibilities (from the web) method: a way of doing something, especially in a systematic way. –Statistical methods in Software Engineering (reliability and risk) by Singpurwalla and Wilson –Software development processes: each process as a method –Formal methods: using mathematical approaches to solving software problems (from requirement to implementation level)
A list of possibilities (cont.) (from the web) method: a way of doing something, especially in a systematic way. –object-oriented methods of software development generic programming programming by contracts programming with meta classes design patterns –aspect-oriented methods of software development joinpoints, pointcuts, advice
What is the goal of methods for software development? modular designs, good separation of concerns easy to understand and modify efficient implementation etc.
Methods of software development based on relations and constraints Examples: –design analysis: state machine S over structured states, violating the expected property P. S and !P –code analysis: check a procedure against its declarative spec. –test case generation from data invariants –component assembly and installation Use relational constraint solving engine –successful approach: use SAT solver
Methods of software development based on relations and constraints A relational engine is also useful for other domains than software development Other Examples: –course scheduling –network configuration –biology: haplotype inference
Build our knowledge from the ground up SAT and CSP solvers How to express relations and constraints in a way most suitable for the software developer and other users? Possibilities: Alloy, Kodkod language, etc. How to translate relations and constraints to SAT and CSP
SAT and CSP solvers Use methods of software development to develop SAT and CSP solvers. Methods we want to use: –implementation modeling using transition systems –based on Pragmatic Programmer Tips: Write code that writes code Design with contracts Configure, Don’t integrate Minimize coupling etc