Software Engineering
Primaries
CS2103 Software Engineering is the introductory course for this focus area (and a required course for all computer science students). Students in this focus area should then take either CS3219 Software Engineering Principles and Patterns to learn about the requirement specification and analysis and software architecture design patterns, leading to software that meets the clients’ requirements, is extensible, and is maintainable. CS4211 Formal Methods for Software Engineering focuses on modeling software using formal tools such as state machines, temporal logic, model checkers, leading to software that is provably correct. CS4218 Software Testing covers how one can rigorously test and debug the correctness and performance of the software using analytical techniques such as root cause analysis, leading to software that is performant and reliable. Finally, CS4239 Software Security shows how one can integrate security considerations into every phase of the software development life cycle, leading to software that is secure.
Electives
Students who wish to have more hands-on experience with software engineering projects can apply to take CS3216 Software Development on Evolving Platforms and CS3217 Software Engineering on Modern Application Platforms; while those who wish to learn deeper about the formal principles of software can consider taking CS3234 Logics for Proofs and Programs, CS5219 Automatic Software Validation, and CS5232 Formal Specification and Design Techniques. Students interested in developing software and systems for embedded systems can consider taking CS5272 Embedded Software Design, which focuses on software engineering for embedded systems.