80 likes | 98 Views
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
E N D
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 developmentbased 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 developmentbased 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