CS 6340: Software Analysis

Course Creator and Instructor(s)

Mayur Naik
 
Mayur Naik
Creator, Instructor

 

Michael Brown
Instructor
 

Course Developer

 
Chris Pryby
 
Chris Pryby
Course Developer
 

Overview

Software development activities other than programming, such as testing, debugging, and conducting security assessments constitute over 50% of the development cost of a modern application.  The modern software developer has a wide variety of tools and techniques at their disposal to aid them with these aspects of development.  

Software analysis lies at the core of these tools and techniques.  Software analysis is a body of work that concerns discovering formal facts about a given program. Many diverse software analysis approaches exist, each with their own strengths, weaknesses, and applications to testing, debugging, performance, and cyber security.

In this course, you will master the underlying principles of software analysis and these approaches and gain hands-on experience applying them to automate testing software and finding bugs in complex, real-world programs.  You will explore techniques including dataflow analysis, constraint-based analysis, type systems, automated test case generation, symbolic execution, and more.

Course Content

In general, this course introduces software analysis and testing topics in the order in which they can be integrated into a software development lifecycle. Lessons focus on advanced techniques that go far beyond established practices like manual code reviews, unit testing,  and integration testing to find bugs (and security vulnerabilities!) in software.  Most lessons are complemented by a short term assignment that leverages an existing tool or library to reinforce the concepts learned in the lesson.  It is useful to think of the assignments as “science labs” - they are meant to bridge the gap between theory and practice as well as deepen your understanding of the material.

Prerequisite Skills

In this class, you will use a variety of tools implemented in different programming languages to generate useful facts about a program’s behavior and analyze them.  This means you should be comfortable reading and writing basic code in several commonly used languages, such as C, Java and Python. In preparation for taking this course we recommend that you visit our Readiness Assessment to determine which skills you may wish to refresh or acquire prior to the start of classes.

Minimum Technical Requirements

To use the Udacity platform, you must meet these minimum requirements. Additionally, Georgia Tech's Office of Student Computer Ownership issues minimum hardware requirements to incoming undergraduates; you should meet or exceed these guidelines as well.  Finally, you must also meet the technical requirements for taking exams using Proctortrack.

Other Info

Academic Honesty

All Georgia Tech students are expected to uphold the Georgia Tech Academic Honor Code.