This course prepares students to successfully engineer secure software systems by addressing critical security challenges across the entire software development life cycle. Students will learn the practical skills for building secure software from the ground up through hands-on labs and exercises. Key topical areas addressed include security in software requirements, design, and development. Common security pitfalls are highlighted and examined as well as the tools and techniques for identifying and eliminating the security vulnerabilities. Security considerations in Mobile code development are also addressed. Parameterized refinement methods and transduction techniques based on mathematical-based proofs are presented as a means of verifying the correctness of code and modifications to code as well as to validate conformance with functional requirements. Software protection techniques such as code obfuscation and water-marking are explored.