By the end of this course, students will be able to:

·       Introduce software security as a discipline and distinguish it from related fields.

 ·       Describe the components and lifecycle of a risk management framework.

 ·       Explain the processes of vulnerability assessment and management.

 ·       Apply foundational risk management concepts to a given software project.

·       Perform basic code inspection to identify common security vulnerabilities.

 ·       Explain the purpose and process of architectural risk analysis.

 ·       Differentiate between penetration testing methodologies.

 ·       Describe the principles and applications of fuzz testing (fuzzing).

·       Explain the concepts of symbolic and concolic execution for path exploration.

·       Describe how model checking can formally verify system properties.

·       Understand the principle of abstract interpretation for static analysis.

·       Relate these advanced techniques to automated test generation.

·       Explain the concept of risk-based security testing.

·       Describe how software security intersects with security operations (SecOps).

·       Utilize the MITRE ATT&CK™ framework to understand adversary behavior.

·       Outline the key pillars of an enterprise software security program.