Skip to content

CS3213 Foundations of Software Engineering

Teaching Concept of CS3213

The goal of CS3213 is to deepen the understanding of software engineering and practice the already learned principles in a realistic project environment. The project aims to incrementally develop a functional and ready-to-use intelligent tutoring system for programming education. Developing such a system in the context of a SE course is particularly interesting because (1) the third-year students who develop the system can relate to the users (first-year students) since they once had to learn programming, and (2) all project stakeholders are available in the university. The presence of stakeholders allows embedding requirements elicitation as part of the SE project class.

Roadmap of CS3213 Projects

Figure 1: Illustration of Developing ITS with CS3213

Figure 1 illustrates the project evolution over multiple years. Before we started any development, we collected initial requirements (step 1) from the lecturers of some first-year programming courses. In step 2, we developed a baseline codebase, which included designing the artifact and the desired workflow. This first version already defined interfaces between components and provided common data structures. The baseline also included a prototypical implementation for most of the initially planned components to test their feasibility. Having the baseline provides the students with additional requirements like the existing architecture, which should not be changed. On the other hand, it also provides them with existing functionalities similar to a real-world long-running SE project.

For CS3213, we design multiple short-running SE projects based on the feedback from first year course instructor in the requirement elicitation session of our course, and these projects essentially representing the implementation variants of existing or new components. For example, in the first year, we mainly had projects to build program analysis capabilities. After our course, we evaluate all projects and integrate the best contributions into our baseline implementation. Therefore, over the years, the baseline will grow and improve. At the same time, we also deploy the increments of the system in its real-world context, i.e., with users from first-year programming courses, and collect additional feedback and requirements from students and tutors.

Practical Deployment

As a multi-year research and teaching effort, the deliverable outcome of CS3213 has been internally deployed in CS1010S and CS2040S at NUS. Check out the CS1010S experience and CS2040S experience of using the ITS in these courses.