CS 6340 Software Analysis Syllabus Summer 2023 Change Log 1 May 11pm ET Updated external chat policy in section 16 14 May 8pm ET Updated TA list Instructional Staff Instructors Mayur Naik and Chris Poch Head TAs Kelly Parks and Joel Cooper Teaching Assistants John Daniel Joseph Dougherty Joseph Knaack Susie Lin Samantha Llewellyn Justin McLellan Weijie Ou Kevin Windbigler and Shang Zeng Table of Contents 1 Course Overview 2 Course Objectives 3 Course Schedule 4 Prerequisites 5 Required Text 6 Lessons and Lesson Quizzes 7 Course Forum 8 Office Hours 9 Lab Assignments Development Environment Gradescope 10 Quizzes and Exams 11 Grading Policy 12 Ed Discussions Participation 13 Help Us Improve 14 Regrade Requests 15 Deadlines and Extensions 16 Academic Integrity Policy Collaboration Plagiarism Penalties Use of Source Control 17 Technical Requirements 18 Disability Services 1 Course Overview Have you ever wondered how your development environment can determine that you have an unused variable before you compiled the code How do strongly typed programming languages prevent bugs in your code How can we be ahead of our users in finding bugs in complicated systems that may not have been caught by our testing efforts In this class we will explore these topics along with several others that together make up the field of software analysis The point of software analysis is to determine whether software is correct Today the cost of software development is less than 50 programming with testing debugging security assessments and similar tasks taking more resources than developing the software itself As a result there is an increasing focus in the software industry on using tools to write better software These tools can take the form of testing tools that help find bugs but they can also take the form of analysis techniques that have the goal of building a stronger code foundation with fewer areas where defects can emerge the end result being less risk in the software development lifecycle While testing is frequently part of software analysis the approach to software testing presented in this class is directly tied to analysis and is frequently different than the testing usually performed as part of quality assurance in a typical software development lifecycle A past student put it well why test software when you can make software test software In this class we will investigate multiple techniques for analyzing software and the limits of what software analysis can tell us Each lecture covers a different area of software analysis and many lectures have a corresponding lab where you will gain hands on experience with the technique covered in the lecture The labs will evaluate your practical use of the techniques while the exam will evaluate your understanding of the lessons not covered by labs Quizzes will evaluate all lessons including the theories of software analysis techniques Applications of techniques covered in this class relate to performance cyber security testing and debugging In this course you will study 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 2 Course Objectives After successfully completing the course you will be able to do the following Evaluate the suitability of different analysis and testing techniques for different types of programs and under a given set of constraints Implement and run analyses to determine useful facts about a given program Apply various testing techniques to find bugs in a given program Describe qualitative properties of different techniques for analyzing and testing programs Compute the outcome of a given analysis or testing technique on a program 3 Course Schedule The schedule for this course will be made available through Canvas under the Files and Calendar sections It includes a pacing schedule for covering course material completing labs and taking exams as well as important dates throughout the semester 4 Prerequisites We expect you to be fluent in a C family language such as C C Java or C Most classwork will be in C and the effort required will be greatly increased if you are not already fluent in a C family language We have created a C Primer to highlight the language features used in our labs In this course you will use a variety of tools implemented in different programming languages to generate useful facts about a program s behavior and analyze them You will learn about the tools and their theoretical underpinnings in this class however it is assumed that you are already familiar with basic concepts in computer science and mathematics as well as the use of various tools commands in a UNIX like environment The instructors and teaching assistants have only a limited capability to assist students with learning these tasks and they will not be explicitly covered in video lessons We have created a Readiness Assessment that you can use to determine prerequisite tasks that you may wish to learn or re familiarize yourself with before enrolling in this course 5 Required Text There is no required text for this course but we recommend several books that cover various sections of the course listed at http rightingcode org books html Many past students who have struggled with discrete math notation commonly used in computer science have found Chapter 0 of Michael Sipser s classic text Introduction to the Theory of Computation helpful 6 Lessons and Lesson Quizzes Lesson videos are available for viewing or download through Ed Canvas or YouTube and slides used in the lessons including transcripts are available in both PPTX and PDF format through Canvas in the Files section Each lesson has a graded quiz that corresponds with it These quizzes are a few questions that are based on the topic of the lesson and are time limited to 30 minutes These quizzes are automatically graded and may contain different types of questions such as fill in the blank multiple choice matching and entering a number These quizzes are open book open note and open internet searching however they are closed internet posting and may not be discussed with your classmates You will get one attempt on each quiz except we will allow two attempts on the first quiz You can practice for these quizzes
View Full Document