This course is built around a single project that lasts the entire semester. All students will be assigned into groups of 6–8 people who must act as a team in order for the project to succeed. Working effectively in large groups and managing the complexities and challenges that arise is a core part of software engineering and a central part of this course as a whole. Teams must work independently and may not have the same requirements or even the same overall projects.
Projects will be developed in C++ using infrastructures like googletest for testing and glog for logging. We will use cmake for build management. Version control for the project will use git and be managed by GitLab for code reviews, issue tracking, continuous integration, and general project management. We will use Sphinx for generating documentation. We will discuss some of these tools and technologies in class, but it is each student's responsibility to use them and understand them throughout the course.
Development will follow an iterative, pragmatic, agile process. Interaction with the client will be limited to the lab meetings of the course, so any and all requirements for the project must be gathered during these meetings. As you should have learned in CMPT 276, getting requirements and feedback from the client are key to agile development. A quick start to the project and continuous delivery of features are also extremely important. We will have scheduled iterations throughout the semester, some of which will conclude with formal class presentations.
Working in a team will require students to take on particular roles such as manager, configuration manager, or tester. For our purposes, these roles will generally last for only one iteration and will rotate among the members of a group. While taking on such a role, a student's contributions to creating the source code of a project may be reduced while the student equivalently contributes in other areas of importance. However, all students should expect to write and contribute a large amount of high quality code to the project during the semester to achieve a satisfactory grade. You will be expected to contribute at least one hundred lines of quality code per week to pass. In order to facilitate this, old branches in the repository should not be deleted. They will be used to properly attribute code contributions. Students are responsible for ensuring this themselves.
You can find a coarse description of the semester project on CourSys.
Note: All source code pushed/pulled to the repositories for the class is considered group and class property. It is not private, and any such code may be used, critiqued, and otherwise discussed in class. Such discussion is a common part of (healthy) software development, and students need to acclimate to the experience.