Overview

It it generally possible to write scripts and toy programs without much forethought or organization. With luck and decent comments, this can be stretched to software that consists of a few dozen classes. For anything beyond that, a principled approach is required to structure and document software systems to manage their fantastic complexity. For example, it takes 62,000,000 lines of code to run Facebook. This course is about the intellectual tools developed by researchers and practitioners to manage the complexity of very large systems.

Learning Outcomes

After this course, you should be able to...

Target Audience and Required Background

This advanced course targets senior undergraduate students majoring in computer science or software engineering, and graduate students interested in software engineering.

The official prerequisite is to have completed COMP 303. However, the course is ideally suited for students who have had at least reasonably good success in both COMP 303 and COMP 302 and who have completed at least one more software-related course at the 300-level or above (COMP 361 and COMP 421 are good examples), or who have relevant work experience. For graduate students who come from other institutions, equivalent courses are fine.

The course is exclusively concerned with real-life software in all its beauty and ugliness; The course work requires the ability and willingness to independently experiment with software development tools and scripting languages.

Course Work and Evaluation

The course will consist of a combination of lectures, invited presentations, and in-class activities including student presentations. The occasional lectures will be low on slideware and require advanced reading and code browsing. The course will involve a major project: the reverse-engineering and production of architectural documentation for an open-source system.

The final grade will take into account in-class activities (20%), one assignment (10%), a midterm exam (20%), and a project (50%). The project will be split up into multiple deliverables. The project will be done in groups of three to five students depending on the final class size.

COMP 529 is a four-credit course and consistently with the McGill definition of one credit, making the most of it will require weekly efforts along the following pattern: 3 hours of in-class work, 3 hours of independent reading, 6 hours of practical work. Just like for most engineering-related activities, success will depend in large part on good time management.

Official Academic Integrity Statement McGill University values academic integrity. Therefore all students must understand the meaning and consequences of cheating, plagiarism and other academic offenses under the Code of Student Conduct and Disciplinary Procedures (see www.mcgill.ca/students/srr for more information).

Language Policy In accord with McGill University's Charter of Students' Rights, students in this course have the right to submit in English or in French any written work that is to be graded.

Resources

Note that to access the books through the McGill library you need to be on a McGill network and supply the requested credentials.

Diagramming Tool

JetUML

Textbook

Rozanski and Woods. Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives, Addison-Wesley Professional, 2nd Edition, 2011.

Complementary References

Clements et al. Documenting Software Architectures: Views and Beyond, 2nd Edition, Addison-Wesley, 2011

Brown and Wilson. The Architecture of Open Source Applications, 2012

Vogel et al. Software Architecture: A Comprehensive Framework and Guide for Practitioners, Springer, 2009.