COMP 303 Software Development - Fall 2009

[News] [Basic Information] [Description] [Reference Material] [Evaluation] [Project] [Schedule]


[6 Nov 2009]The final exam is scheduled for 22 December at 2pm.
[26 Oct 2009]Milestone 3 instructions released.
[24 Sep 2009]Milestone 2 instructions released.
[18 Sep 2009]Updated CVS Setup Instructions
[3 Sep 2009]Milestone 1 instructions released.
[1 Sep 2009]Milestone 0 instructions released.

Basic Information

Instructor:Martin Robillard (email tips)
Time and place:Tuesdays and Thursdays, 2:35-3:55, Trottier 0060
Office hours:Tuesdays 4-5pm; Thursdays 1-2pm (in MC 114N).
TA:David Kawrykow and Tristan Ratchford (email tips)
TA availability:Mondays 11:00 (Tristan, in Trottier Trottier Lab 3060); Wednesdays 10:00-11:00 (David, in Trottier Lab 3060)


Principles, mechanisms, techniques, and tools for software development. The course involves a significant project.

Sample Course Topics

Principles: Separation of concerns, encapsulation, substitutablity, interface segregation.
Mechanism: Exception-handling, serialization support, concurrency and synchronization, reflection.
Techniques: Design patterns, design by contract, unit testing, refactoring.
Tools: Integrated software development environment, automatic testing tools, coverage analyzers, static checkers.

Learning Outcomes

The learning outcomes for this course are organized along the four main conceptual axes of the course: principles, mechanisms, techniques, and tools. The following table lists the expected learning outcomes for the course (the table reads by row, from left to right).

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

Name, using the proper terminology The important first principles of object-oriented software developmentThe common programming-language based mechanisms used to build OO software applicationsCommon software development techniquesA number of software development tools
Describe and explainThe purpose of each principle and how it can be appliedHow each mechanism worksHow to apply each technique and when it should be appliedThe theory underlying each tool, and the technique(s) the tool supports
ApplyEach principleEach mechanismEach techniqueEach tool
EvaluateWhether the application of a principle is appropriate to a given situationThe technical consequences of a solution involving the mechanismThe cost and benefits of using the technique in a given situationThe suitability of different tools for a given task
CreateA complete object-oriented application based on the first principles of object-oriented software development, the structured use of programming language mechanisms, the application of software development techniques, and the use of software engineering tools

For a concrete look at what you should be able to do in this course, have a look at the best projects from 2006, 2007, and 2008.

Reference Material

Required Textbook: Horstmann, Cay. Object-Oriented Design and Patterns, 2nd Edition. Wiley, 2005. Available at the Paragraphe Bookstore.

Complementary Textbook on Testing: Pezzè, Young. Software Testing and Analysis: Process, Principles, and Techniques. Wiley, 2008. On reserve at the library.


In-class workshops10%
Midterm exam (optional)0%/20%
Final exam60%/40%
Important Notes:
  1. Writing the midterm exam is optional. For students who do not write the midterm, the weight of the final will be 60%. For students who write the midterm, the respective weights of the midterm/final will be either 20%/40% or 0%/60%, whathever produces the highest final grade.
  2. A mark of 50% or more for the project is required to pass the course, irrespective of the total final mark.
  3. Students interested in maximizing their grade are encouraged to attempt the project bonus assignments. After the final project deadline, no additional work will be considered in assigning grades.

The following material is subject to evaluation: Anything I said in class, material found in the mandatory reading, basic knowledge of the tools covered in the course, anything you did in the project and workshops. The midterm will cover all lectures up to and including 11 October. The final will cover everything.

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.

Academic Integrity

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 for more information).


The project will involve the development of an interactive card game. Additional links will appear here as additional instructions are released.

Project Resources

Submission Policy: Milestones are assigned to groups: only one submission per group is necessary. Deadlines are posted on the schedule. All deadlines are firm. This is to ensure fairness, a speedy feedback, and consistency with the course schedule. Please plan ahead. If you are not done by the deadline, submit your partial solution. The WebCT submission site allows you to submit early and to resubmit. To avoid the usual issues with last-minute submissions, you are encouraged to submit early. After a small grace period the webCT system will block submissions. Milestones not submitted on time are subject to a significant penalty.


This schedule is subject to change. It is strongly recommended to do the readings before class.

DateLecture TopicsReadingToolsProject
Tuesday 1 SepIntroductionChapter 1, Eclipse Platform Technical Overview (part I only)Eclipse 
Thursday 3 SepThe Development Process, UML2.1-2.12, CVS Manual - Overview, optional articleViolet, CVS 
Tuesday 8 SepClass Design3.1-3.5, optional articleJavadoc 
Thursday 10 SepDesign by Contract(TM), Unit Testing3.6-3.7, JUnit Cookbook, optional article 1, optional article 2JUnit, EclEmmaMilestone 0 (17:00)
Tuesday 15 SepInterface Types and Polymorphism4.1-4.6Checkstyle 
Thursday 17 SepInterface Types and Polymorphism4.7-4.10, 8.1  
Tuesday 22 SepDesign Workshop 1   
Thursday 24 SepDesign Patterns (Observer and Strategy)5.1-5.4 Milestone 1 (11:59am)
Tuesday 29 SepDesign Patterns (Composite and Decorator)5.5-5.8  
Thursday 1 OctDesign Workshop 2   
Tuesday 6 OctInheritance-based reuse6.1-6.3optional article  
Thursday 8 OctAbstract classes and Template Method pattern6.4-6.7,6.9  
Tuesday 13 OctExceptions and Facade pattern6.8, 7.8.2 (Facade pattern)  
Thursday 15 OctMidterm   
Tuesday 20 OctElements of GUI Design and Command and Prototype patterns   
Tuesday 22 OctDesign Workshop 3  Milestone 2 (11:59am)
Tuesday 27 OctObjects and Types7.1-7.3  
Thursday 29 OctCloning, Serialization, and Reflection7.4-7.6  
Tuesday 3 NovEffective Use of Generic Types7.7  
Thursday 5 NovThe Visitor Design Pattern10.6  
Tuesday 10 NovThreads9.1  
Thursday 12 NovSynchronization9.2-9.3  
Tuesday 17 NovFunctional TestingSlides on WebCT  
Thursday 19 NovStructural TestingSlides on WebCT  
Tuesday 24 NovNo classClass replaced by demos at the end of the term.  
Thursday 26 NovObject-Oriented Refactoring[Refactoring Book by Fowler] Relevant material will be indicated in classEclipse Refactoring Tools, InCode 
Tuesday 1 DecReview for the Final  Milestone 3 (11:59am)