This course offers an introduction to software engineering, spanning a broad array of topics and employing a problem-based learning approach. Central to the course is a practical group project, where students apply modern software development principles and tools. The course discusses the software development lifecycle, with an exploration of Agile methodologies and DevOps practices. Students will gain a foundation in software design principles, such as abstraction mechanisms and design patterns, and how they are realized in procedural, object-oriented and functional programming paradigms. A strong emphasis is placed on quality assurance, equipping students with robust techniques for software testing, debugging, and maintaining high code reliability. The course examines program analysis and verification through both static and dynamic analysis methods. Advanced topics, such as AI-driven development tools, expose students to contemporary software engineering research.
lecture
Form groups of three and select presentation slots by March 10
lecture
Meet with your team to choose a development process. Agree on communication channels, meeting cadence, and how you will plan and track progress.
lecture
Access coursework repository, discuss branching model and merge policy with your teammates.
lecture · student presentations
Experiment with Mermaid diagrams to model important parts of your project.
lecture · Q&A session
Restructure your code according to studied design principles.
lecture · student presentations
Identify relevant abstraction mechanisms in your language of choice to support design principles.
lecture · student presentations
Apply appropriate creational and structural patterns to your code.
No class
lecture · Q&A session
Implement a parser of your choice.
lecture · student presentations
Optionally, apply functional programming patterns in your code.
lecture · student presentations
Optionally, apply property-based testing and symbolic execution to test your project
lecture · student presentations
Design robust error handling for your project.
lecture · Q&A session
Optionally, apply mutation and metamorphic testing to your project.
No class
lecture · Q&A session
Analyze your code for the presence of smells and anti-patterns.
lecture · student presentations
Maintain coding style compliance and write system documentation where necessary.
lecture · Q&A session
lecture · student presentations
lecture · Q&A session
lecture · student presentations
lecture · Q&A session
lecture · student presentations
lecture · Q&A session
lecture · student presentations
lecture · Q&A session