Software Engineering

The purpose of this course is to provide students with knowledge of software development problems and the processes and methods used to address them. The course will talk about software life cycle models, goals and methods for requirements analysis and specification, software design, implementation, integration and testing. This course also will try to equip students with skills in programming techniques to support information systems development, and modeling languages such as UML.

Administrative Details

Here you will find administrative information for the Winter 1397.


The required textbook for this course is:


Lecture material will be drawn from the textbook, as well as from some of the recent software engineering literature.

Course Syllabus and Lecture Notes

  1. Engineering!!, Predictive versus Adaptive (Notes)
  2. Software Lifecycles  (Notes)
  3. Methods, Methodologies, Processes? – Agile modeling  (Methods) (Notes) (Design Methods)
  4. Agile Modelling  (Manifesto)(Principles)(Practice)
  5. Use Cases (Notes)(Writing Effective Use Cases)
  6. More Use Cases (Notes
  7. Design Preliminaries (Software Programming Techniques) (ADT) (Objects vs Classes)
  8. Object Modeling, Classification and Generalization (Notes)(Code)
  9. Understanding Object Oriented Programming (Notes) Courtesy of Joseph Bergin
  10. Domain Modeling (Notes) (Examples: Sale, Restaurant, Library, Video Store)
  11. More Domain Modeling (Notes)
  12. Unified Modeling Language (Notes) (Interaction diagrams) (Class diagrams)
  13. Coupling and Cohesion (Notes)
  14. From Design to Code (Notes)
  15. GRAS Patterns 1 (Notes)
  16. GRAS Patterns 2 (Notes)
  17. GRAS Patterns 3 (Notes) (Polymorphism 1) (Polymorphism 2)
  18. Object Relational Mapping (Notes)
  19. Design Patters (Creational Design Pattern)
  20. More Patterns (Decorator and Adapter Patterns)
  21. Acceptance and Unit Testing (Notes)
  22. Multi-tier Architecture (Notes) (Technologies)




Course Work

  1. Team Project - Analysis (PDF)