CMPT 475: Software Engineering II


CMPT 475-3 D100: Software Engineering II

Summer 2009

Instructor: Dr. Herbert H. Tsang, P.Eng., Ph.D.


Lecture: Thur, 17:30-20:20, SFU Harbour Centre

1. Course Objectives/Description

This course expands on software development process management topics introduced in CMPT 275. For example, development management issues, techniques, and tools. This knowledge is needed by many project leaders who have come from an otherwise purely technical background. And needed by new grads to understand the standards/procedures/techniques/tools imposed on them as new staff programmers in a well run company. This subsequently allows those grads to eventually be promoted to technical management roles. For example, students will see and contrast development methodologies and lifecyle models (e.g. iterative vs. waterfall). They will learn some metric and project estimation theory, and industry project planning and estimation tools. Assignments will include project estimating and planning using software tools, an essay on various/contrasting methodologies or tools, working with a source code configuration tool, and a unit test framework.


  1. Development strategies and life cycles (e.g. waterfall, incremental, Unified Software Development Process (RUP), and Agile development(e.g. XP or Scrum))
  2. Software process maturity models, process improvement (e.g. CMM, Personal Software Process, etc.)
  3. Software engineering standards.
  4. Team & people issues.
  5. Project initiation, planning, estimation, monitoring/control, and risk management. Estimation and project plannning using tools. Project post-mortems.
  6. Software configuration management including source code control models and tools, document and release control, configuration management plans, and CM and build tools.
  7. Software Quality Assurance - reviews, inspections, release control of documents and code, testing, defect and feature integration. Support tools (e.g. defect tracking) and libraries (e.g. JUnit)
  8. Test planning, test types and strategies, test documents (standards, plans, procedures, and test cases).
  9. Metrics: Software measurement and estimation techniques. Process measurement.
  10. Professional Issues (briefly). Contracts, copyright, liability, ethics, etc.
  11. Software engineering vs. systems engineering: common engineering principles; rapid prototyping; reverse engineering.
  12. Development strategies, life cycles, and methodologies.
  13. Software metrics: measurement and estimation techniques.
  14. Requirements engineering: functional vs. non-functional requirements; requirements elicitation and clarification.
  15. Sharpening requirements into specifications: formal vs. informal requirements; syntactic vs. semantic issues.
  16. Formal modeling techniques: computational modeling of discrete dynamic systems; specification vs. # verification; correctness and completeness; experimental validation and symbolic computation.
  17. Design of distributed and embedded systems: concurrency, reactivity and timing behaviour.
  18. Industrial system description techniques based on graphical notations.
  19. Software engineering standards and their impact on software development.

The above material will be covered through lectures, reading, discussions, homework assignments, and a course project.

2. Grading (TBD)

  • Assignments ……………………………………30%
  • Course Project (report and presentation)…………30%
  • Final ……………………………………………………..40%

Closed-book exams. Note: Most assignments will be done individually rather than in teams. Finally, the university may use, or require students to submit assignments to an automated service that checks for plagiarism (i.e. cheating by copying).

Late assignments will not be accepted without valid documentation (e.g., medical certificate). Students must attain a C or better on the weighted average of exams in order to obtain a C or better grade for the course as a whole. Late Penalties: Assignments are due at the beginning of the specified class time. For each day late, 10% of the total possible points will be deducted. No work will be accepted after two days late.

3. Class Schedule, Readings, and Assignments

Week Dates Topics Text selection
1 May 7 Introduction + Project management, metrics, team work, risk management
2 May 14 Software process models
3 May 21 Agile development, extreme programming + Software architecture, design patterns (1)
4 May 28 Design patterns (2)
5 June 4 Introduction to software development on the operating systems for iPhone User guide and specification, web pages, developer pages of the device that you choose
6 June 11 Software engineering tools + Introduction to version control systems (RCS, CVS, SVN), tutorial and demo on SVN
7 June 18 Distributed version-control systems + Free software, software licensing, patents
8 June 25 Software quality, software analysis, testing + Automated testing, assertion checking, unit testing (JUnit)
9 July 2 Web-service oriented software-engineering + Graph models of software systems, software structure analysis, relational querying
10 July 9 Software clustering, layout-based software decomposition
11 July 16 Distributed version-control systems, Git
12 July 23 Intellectual Proterty and Software Licenses + Web-service oriented software-engineering
13 July 30 Project presentations TBD

Midterm (~ Week 7-8)
Project due (~Week 13)
Final (~Week 14-15)

4. References (software engineering)

  • Facts and Fallicies of Software Engineering, Glass, Robert L., Addison-Wesley, 2003 [REQUIRED]
  • Ian Sommerville. Software Engineering. Pearson, 2006. Online: author, publisher.
  • Roger S. Pressman. Software Engineering: A Practitioner's Approach. McGraw-Hill, 2004. Online: publisher, ToC.
  • Carlo Ghezzi, Dino Mandrioli, Mehdi Jazayeri. Fundamentals of Software Engineering. Prentice Hall, 2002. SFU record.
  • Frederick P. Brooks. The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley, 1995. Online: Safari, SFU library.
  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. SFU record.
  • Martin Fowler. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 2000. Online: author, Safari, SFU library.
  • Kent Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999. Online: Safari, SFU library, Agile Manifesto.
  • Grady Booch, James Rumbaugh, Ivar Jacobson. The Unified Modeling Language User Guide. Addison-Wesley, 1999. Online: Safari, SFU library.
  • James Rumbaugh, Ivar Jacobson, Grady Booch. The Unified Modeling Language Reference Manual. Addison-Wesley, 1999. Online: Safari, SFU library.
  • Martin Fowler. UML distilled: applying the standard object modeling language. Addison-Wesley, 2004. Online: Safari, SFU library.
  • Gerard J. Holzmann. The SPIN Model Checker: Primer and Reference Manual. Addison-Wesley, 2003. Online: Safari, SFU library.
  • Flemming Nielson, Hanne Riis Nielson, Chris Hankin. Principles of Program Analysis. Springer, 2005. SFU record.

5. Useful links

Academic Honesty plays a key role in our efforts to maintain a high standard of academic excellence and integrity. Students are advised that ALL acts of intellectual dishonesty are subject to disciplinary action by the School; serious infractions are dealt with in accordance with the Code of Academic Honesty (T10.02) ( Students are encouraged to read the School's policy information (


  • CMPT 275 and 15 semester hours of CMPT upper division courses; co-op experiences recommended

Copyright © 2009, Herbert H. Tsang

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License