This course aims at fostering the understanding of the techniques for developing large scale software. Both practical and theoretical aspects for developing reliable software will be presented. Students will gain insight into high quality software development techniques and learn skills for software specification, analysis, design, testing, verification, and maintenance.