This is an undergraduate course taught at EPFL by Prof. George Candea. It covers the basics of modern software development, focusing on techniques and practices used to build computer software that meets high standards of quality, reliability, security, and maintainability. Real-world software differs from programs written in typical university courses: it is large and complex, it is developed by a team, it lives long and evolves and needs to be maintained, and it can cause serious harm if it fails.
Software engineering is a long-established field of computer science, with a wide range of techniques that have been proposed, a subset of which are actually in use, and of those a subset are of demonstrated value. This course focuses on three aspects: Which are the tools and practices of modern software? How do we produce high-quality software? How do we develop software in a team? The tools include version control systems, automated testing, and continuous integration. The practices include design patterns, defensive programming, modularity, abstraction, and agile development. Learning to work collaboratively with a team of people to write, test, and debug a single piece of software can be at times challenging and frustrating, but it is impossible for one person to produce software of the size and complexity of modern applications or systems. For this reason, we focus on learning the skills for developing software together with other people.
This is a hands-on, practical course that applies the ideas learned in lectures through an extensive class project that requires a large amount of programming.
In this repo you can find related materials that we make available to the public. More will follow over time.
- Midterm exam along with solutions
- Final exams along with solutions