Carnegie Mellon University

17-654 Analysis of Software Artifacts

Analysis of Software Artifacts is a 12 unit full semester course.

Analysis is the systematic examination of an artifact to determine its properties. This course will focus on analysis of software artifacts—primarily code, but also including analysis of designs, architectures, and test suites. We will focus on functional properties, but also cover non-functional properties like performance and security. In order to illustrate core analysis concepts in some depth, the course will center on static program analysis; however, the course will also include a breadth of techniques such as testing, model checking, theorem proving, dynamic analysis, and type systems. The course will balance theoretical discussions with lab exercises in which students will apply the ideas they are learning to real artifacts.

More course details can be found in the Analysis of Software Artifacts syllabus.

After completing this course, students will:

  • know what kinds of analyses are available and how to use them;
  • understand their scope and power, when they can be applied, and what conclusions can be drawn from their results;
  • have a grasp of fundamental notions sufficient to evaluate new kinds of analysis when they are developed;
  • have some experience selecting and writing analyses for a real piece of software, applying them and interpreting the results.


  • A recent discrete math course and programming experience.