COMP-361 Software Engineering Project
Undergraduate course, School of Computer Science, McGill University, 2023
This 1-year course gives students the opportunity to develop a considerable software system following a rigorous software development process. Over two semesters, students develop a strategic, turn-based, distributed, 2D game following a model-driven engineering approach in groups. The project takes the students through all the phases of a software’s life‐cycle, from requirements elicitation and specification, to architecture design and detailed design, to implementation, deployment and maintenance. Throughout the project, students follow a model-driven engineering approach, where models of the software that is being developed are built at different levels of abstraction using different modelling formalisms. The final implementation is done by the students using an object-oriented programming language of their choice.
Learning Outcomes
At the end of the project, the students of this class have gained experience in several areas related to software engineering:
Development Skills
- Understanding a (reasonably complicated) problem statement
- Analyzing the needs that an application must fulfill
- Specifying the requirements using a rigorous formalism
- Deciding on a distributed software architecture (client/server or peer-to-peer)
- Designing an object-oriented solution that fulfills the requirements
- Implementing the solution with an object-oriented programming language
- Code maintenance, i.e. adding additional functionality to existing code
- Delivering the application in time
Modelling Skills
– Eliciting behavioural requirements with use case models
– Elaborating domain models with class diagrams
– Specifying system interfaces with object interaction diagrams
– Specifying system protocols with use case maps
– Specifying software design structure with class diagrams
– Specifying software behaviour with sequence diagrams
Team Skills
– Contributing to the constitution and the growth of a small group of developers
– Communicating efficiently within the group
– Organizing work and programming within a group
Tool and Technology Skills
– Modelling tools
– Compilers
– Debuggers
– Profilers
– Version control software
– Distributed architectures
– REST communication paradigm