Show The Graduate Center Menu

Software Analysis and Transformation

With the rise of mobile computing, cybersecurity, and big data, the need for software engineering tools to assist developers in cultivating and managing the complexity of large software systems has never been more evident, giving way to such tools as GitHub, Pivotal, and SonarQube. Software analysis and transformation has a variety of uses, including performance optimiza- tion (in compilers), decompiling, obfuscating, verifying program correctness, domain-specific programming languages, and software understanding, evo- lution, debugging, and testing in software engineering tools. The material will be useful for students working in compilers, developer tools, systems, software engineering, and programming languages. 

Course description: This course introduces the foundations of algorithms that analyze and ma- nipulate software. Refactoring, the process of reorganizing software for an improved design while preserving its original functionality, concepts and tech- niques will also be introduced, along with several type inferencing techniques. The course will involve hands-on experience in creating algorithms and tools. 

List of topics: The topics may include but are not limited to:

  • intermediate program representations, including Abstract Syntax Trees (ASTs)

  • Tree traversal and manipulation algorithms

  • Control- and data-flow analyses

  • Type inference

  • Object-orientation

  • Pointer/alias analysis

  • Side-effect analysis

  • Refactoring 
  • ‚Äč Object-oriented software design patterns 

Suggested Prerequisites

  • Excellent programming skills in an object-oriented programming lan- guage such as C++ or Java.

  • CSc 71010 (Programming Languages) or equivalent or an introductory course on compilers would be useful.

  • Otherwise, students may review the first two chapters of Compilers: Principles, Techniques and Tools by Aho, Sethi and Ullman

    However, previous experience in software analysis will not be assumed. 

Learning objectives: The objectives of the course are:

  • Understand abstract software representations on a meta-level

  • Comprehend and develop various algorithms for traversing and manip- ulating abstract software representations.

  • Relate software analysis and transformation algorithms to their appli- cation in real-world problems.

  • Good working knowledge of object-oriented type systems and inference.

  • Understand the challenges and solutions associated with analysis of software written in programming languages that allow aliasing and side- effects.

  • Knowledge of various software refactorings, how to formulate refactor- ing preconditions, and issued related to programs semantics-preservation in an object-oriented setting.

  • Good working knowledge of various enterprise-level software design pat- terns and their relationship to refactorings. 


Several homework assignments involving technical problems related to the class lectures and reading material.Completion of the homework will benefit the students, particularly in their technical skills and problem solving. These will account for 25In additional to homework, a sequence of projects will also be assigned. Student project topics may be selected depending on the students research interests and goals. These will account for 55% of the overall grade. A special topics lecture that discusses current research in the area will also be assigned, accounting for 10% of the grade, while class participating will account for the remaining 10%.