Topics covered in CSU670 (Lieberherr version) software quality correctness contracts requirements formulated as transition system or by a relational expression formal specifications of traversals reliability HCI issues: design of little languages quality of software process, requirements, code, testing. robustness to changes in class structure: structure-shyness maintainability Law of Demeter violations as metric Terminal buffer rule evolvability adaptive software People issue focus on customers iterative software development with customer input pair programming practiced in project and homeworks the software team http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_Reed_DeveloperTurnover.pdf Software development processes and their phases practiced during project process model Simplified Rational Unified Process http://en.wikipedia.org/wiki/Rational_Unified_Process http://www.ambysoft.com/downloads/managersIntroToRUP.pdf Testing write tests before the program Abstraction barriers and modularity isolation of clients from representation isolation of clients from interfaces separation of concerns: AOP basics Course Outcomes At least one organized method: simplified RUP Know how to design the ontological categories of a program from informal problem descriptions This is covered by numerous class dictionary design tasks from English descriptions and sample input sentences. Have experience working with other people to develop software The project is in groups of 2-3.