CS3219 Module Review – Software Engineering Principles and Patterns
- Continuation of topics in CS2103 (architecture, principles and patterns) in more depth, plus a few other topics in software engineering.
- One medium-scaled project in groups of 4 (consisting 2 pairs), 2-3 small scaled project in pairs (of 2 people). You can choose pairing and grouping.
- No midterm. Final exam is close book, with 1 A4-sized double-sided help sheet allowed.
The Only Level 3000 Primary Module for Software Engineering
This is one of the primary modules for Software Engineering focus area. Since CS3213 Software Systems Design is no longer offered, CS3219 is the only level 3000 module left. You will want to take this if you are considering that focus area, because level 3000 module is usually easier than level 4000 modules. Plus, this module is actually pretty useful.
What You Will Learn
The module touches on almost every aspect of software engineering. It starts from software development processes, to software requirement analysis, to architecture design, to principles and patterns, and finally software development evolution. While CS2103/CS2103T would have covered a bit on some of the topics, CS3219’s requirements are more in depth and practical. You are expected to make architectural decisions or various design decisions in different stages of developments given a certain scenario. This not only requires the in-depth knowledge of each topic, but also connecting various topics to understand the bigger picture. When making a design decision, you have to think about the requirements and constraints, and use them as basis for your decisions.
A big shock to me in this module was how much content there was in the various topics. I did not think software engineering was that complicated before. However through the readings, I learnt that it is actually a formal field of study as vagarious as artificial intelligence. For example, the first stage of software development, the requirement analysis is a well-studied topic. There are various methods and approaches to carry it. The final result of the requirement analysis is also a piece of formal document called software requirements specification (SRS). SRS has well-defined formats to aid in the architectural designs later. The hot topic of Agile development is also studied as well, but it is merely one of the many approaches for software development life cycles (SDLC).
This module has a surprisingly large number of projects of diverse nature, from seminar presentation on a specific topic, to implementing a software system with specific architectural designs, to using continuous integration services, GitHub APIs as well AWS Lambda. The earlier small-scaled coding projects are not so tied to the theoretical part of the module. Instead they focus on using tools such as d3.js, Git commands, GitHub APIs and AWS.
The final project in my semester was implementing a Git visualization tool with notification services using AWS Lambda. It integrates the pieces developed in earlier projects into a full product. Luckily I have already done something similar in CS3281 so that saved my team a lot of effort. If the projects remain the same, teams with experience in web development would have a clear advantage since much of the coding is web-related.
Readings and Final Exam
During the lectures, the lecturer won’t have time to go into depth of every single concept. You need to do a fair amount of self-reading into various topics, which would eventually help you in the final exams.
The final exam covers all topics and is fairly theoretically in the sense that it deals with the level above coding, i.e. asking you to describe a suitable approach, or draw a diagram to illustrate the workflow. However, it is also fairly practical. You will been given real-world scenarios with come conditions and constraints, where you need to apply the knowledge instead of just stating them. Just memorizing facts would not be sufficient for preparation.
- Do suggested readings, but go beyond them to acquire additional information. This helps in final exam as you will need general knowledge in the topic as well as related knowledge not directly covered in the readings. Help sheet is only useful for factual information but many questions go beyond that.
- Take this module with your friends (preferably 4 together). Projects form a big percentage of the marks for this module and a good project team would definitely help. Also, learn basic web development in case the projects remain the same. (Or leave a comment below if it has changed)