This course aims at presenting the concepts, techniques and tools underpinning the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. The course contents applies to most projects, most of the time, and its structure is aligned with the SWEBOK, a baseline for the software engineering body of knowledge, recently published by the IEEE Computer Society, which has gained a widespread consensus.