Introduction to Program Analysis

Slides:



Advertisements
Similar presentations
Advanced programming tools at Microsoft
Advertisements

Automated Theorem Proving Lecture 1. Program verification is undecidable! Given program P and specification S, does P satisfy S?
Types and Programming Languages Lecture 1 Simon Gay Department of Computing Science University of Glasgow 2006/07.
Runtime Techniques for Efficient and Reliable Program Execution Harry Xu CS 295 Winter 2012.
Automatic Memory Management Noam Rinetzky Schreiber 123A /seminar/seminar1415a.html.
Abstraction and Modular Reasoning for the Verification of Software Corina Pasareanu NASA Ames Research Center.
1 Symbolic Execution for Model Checking and Testing Corina Păsăreanu (Kestrel) Joint work with Sarfraz Khurshid (MIT) and Willem Visser (RIACS)
Program Analysis and Verification Spring 2015 Program Analysis and Verification Lecture 1: Introduction Roman Manevich Ben-Gurion University.
David Brumley, Pongsin Poosankam, Dawn Song and Jiang Zheng Presented by Nimrod Partush.
ISBN Chapter 3 Describing Syntax and Semantics.
CS 355 – Programming Languages
An Integration of Program Analysis and Automated Theorem Proving Bill J. Ellis & Andrew Ireland School of Mathematical & Computer Sciences Heriot-Watt.
Termination Proofs for Systems Code Andrey Rybalchenko, EPFL/MPI joint work with Byron Cook, MSR and Andreas Podelski, MPI PLDI’2006, Ottawa.
Software Engineering: Where are we? And where do we go from here? V Software Engineering Lecture 23 Clark Barrett New York University 4/17/2006.
Program analysis Mooly Sagiv html://
Synergy: A New Algorithm for Property Checking
An Overview on Program Analysis Mooly Sagiv Tel Aviv University Textbook: Principles of Program.
An Overview on Static Program Analysis Mooly Sagiv Tel Aviv University Textbook: Principles of.
Program analysis Mooly Sagiv html://
1 Program Analysis Mooly Sagiv Tel Aviv University Textbook: Principles of Program Analysis.
Overview of program analysis Mooly Sagiv html://
Describing Syntax and Semantics
CS 153: Concepts of Compiler Design August 25 Class Meeting Department of Computer Science San Jose State University Fall 2014 Instructor: Ron Mak
Program Analysis Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
Overview of program analysis Mooly Sagiv html://
ECI 2007: Specification and Verification of Object- Oriented Programs Lecture 0.
Scalable and Flexible Static Analysis of Flight-Critical Software Guillaume P. Brat Arnaud J. Venet Carnegie.
1CMSC 345, Version 4/04 Verification and Validation Reference: Software Engineering, Ian Sommerville, 6th edition, Chapter 19.
An Overview on Static Program Analysis Mooly Sagiv.
Foundations of Programming Languages – Course Overview Xinyu Feng Acknowledgments: some slides taken or adapted from lecture notes of Stanford CS242
CS527: (Advanced) Topics in Software Engineering Overview of Software Quality Assurance Tao Xie ©D. Marinov, T. Xie.
Verification and Validation Yonsei University 2 nd Semester, 2014 Sanghyun Park.
CUTE: A Concolic Unit Testing Engine for C Technical Report Koushik SenDarko MarinovGul Agha University of Illinois Urbana-Champaign.
Towards Scalable Modular Checking of User-defined Properties Thomas Ball, MSR Brian Hackett, Mozilla Shuvendu Lahiri, MSR Shaz Qadeer, MSR Julien Vanegue,
CS 501: Software Engineering Fall 1999 Lecture 16 Verification and Validation.
CS 11 C track: lecture 5 Last week: pointers This week: Pointer arithmetic Arrays and pointers Dynamic memory allocation The stack and the heap.
Software Engineering Prof. Dr. Bertrand Meyer March 2007 – June 2007 Chair of Software Engineering Static program checking and verification Slides: Based.
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
1 A Simple but Realistic Assembly Language for a Course in Computer Organization Eric Larson Moon Ok Kim Seattle University October 25, 2008.
CS265: Program Analysis, Testing, and Debugging
An Overview on Program Analysis Mooly Sagiv Tel Aviv University Textbook: Principles of Program.
The Daikon system for dynamic detection of likely invariants MIT Computer Science and Artificial Intelligence Lab. 16 January 2007 Presented by Chervet.
Use of Coverity & Valgrind in Geant4 Gabriele Cosmo.
CS 363 Comparative Programming Languages Semantics.
Introduction to Program Analysis CS 8803 FPL Aug 20, 2013.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
An Undergraduate Course on Software Bug Detection Tools and Techniques Eric Larson Seattle University March 3, 2006.
Static Techniques for V&V. Hierarchy of V&V techniques Static Analysis V&V Dynamic Techniques Model Checking Simulation Symbolic Execution Testing Informal.
CUTE: A Concolic Unit Testing Engine for C Koushik SenDarko MarinovGul Agha University of Illinois Urbana-Champaign.
Introduction to Software Analysis CS Why Take This Course? Learn methods to improve software quality – reliability, security, performance, etc.
1 Proving program termination Lecture 5 · February 4 th, 2008 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: A.
/ PSWLAB Evidence-Based Analysis and Inferring Preconditions for Bug Detection By D. Brand, M. Buss, V. C. Sreedhar published in ICSM 2007.
CS 5150 Software Engineering Lecture 21 Reliability 2.
Cs498dm Software Testing Darko Marinov January 24, 2012.
Dr. M. Al-Mulhem Introduction 1 Chapter 6 Type Systems.
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 17 – Specifications, error checking & assert.
Content Coverity Static Analysis Use cases of Coverity Examples
Introduction to Software Analysis
CMSC 345 Defensive Programming Practices from Software Engineering 6th Edition by Ian Sommerville.
Introduction to Software Analysis
Seminar in automatic tools for analyzing programs with dynamic memory
CSE 374 Programming Concepts & Tools
runtime verification Brief Overview Grigore Rosu
Foundations of Programming Languages – Course Overview
Introduction to Software Analysis
Foundations of Programming Languages – Course Overview
Language-based Security
CUTE: A Concolic Unit Testing Engine for C
Ras Bodik WF 11-12:30 slides adapted from Mooly Sagiv
Introduction to Software Analysis
Presentation transcript:

Introduction to Program Analysis Lecture 1 CS 6340

Course Staff Instructor: Mayur Naik Office: KACB 2320 Email: naik@cc.gatech.edu Office hours: Tue, Thu 3:30-4:30 Teaching Assistant: Ravi Mangal Office: Lounge beside KACB 2320 Office hours: Mon 4-5, Fri 11:30-12:30

Course Communication All class materials on course website URL: http://pag.cc.gatech.edu/naik/cs6340/ Also linked from https://t-square.gatech.edu Annoucements via website and email Ask questions on forum in t-square Preferred over email for most questions

Course Content Focus on program analysis Both principles and practice Concerns discovering facts about programs Both principles and practice Mix of basic and advanced material

Course Structure Lectures, from notes and research papers No textbook Assignments (60%), of two kinds: Implement program analysis algorithms in Java Use program analysis tools and report findings In-class final exam (40%)

Course Pre-Reqs and Credits Pre-Reqs: None, but expect to program in Java Credits: 3 hours, counts toward: Elective in MS CS program for specializations of “Information Security” and “DB + SE” Breadth component in PhD CS program for areas of “PLC” and “Software Methodologies and Engr.” Auditing allowed in exceptional cases

Why Take This Course? Prepare for research in program analysis This is where the field is headed Apply program analysis to problems in other areas (security, systems, etc.) Be a better software developer/tester For the war stories

The Ariane Rocket Disaster (1996)

Post Mortem Failed due to unhandled floating-point exception Cost $100M’s for loss of mission Multi-year setback to the Ariane program

Mars Polar Lander (1999)

Post Mortem A units problem Total loss of $100M mission Caller expected values in inches/feet Callee assumed values in meters Essentially, a type error Total loss of $100M mission

East Coast USA

East Coast USA: 2003 Blackout

Post Mortem Local failure rapidly cascaded through grid Major contributing cause was unnoticed crash of automated alarm systems 10M’s of people affected

Security Vulnerabilities Often exploit bugs in programs Widespread problem Code Red Titan Rain Moonlight Maze Operation Orchard Stuxnet Worm Getting worse … 2011 Mobile Threat Report (Lookout™ Mobile Security) 0.5-1 million Android users affected by malware in first half of 2011 3 out of 10 Android owners likely to face web-based threat each year Attackers using increasingly sophisticated ways to steal data and money

What is Program Analysis? Body of work to discover facts about programs Broadly classified into three kinds: Dynamic (execution-time) Static (compile-time) Hybrid (combines dynamic and static) This course will cover all three kinds

Dynamic Program Analysis Infer facts of program by monitoring its runs Examples: Array bound checking Purify Memory leak detection Valgrind Datarace detection Eraser Finding likely invariants Daikon

Static Analysis Infer facts of the program by inspecting its source (or binary) code

An Example Static Analysis Problem Find variables with constant value at a given program location Example program: int p(int x) { return x * x; } void main() { int z; if (getc()) z = p(6) + 8; else z = p(-7) - 5; printf (z); } z = 44

Iterative Approximation [x=?, y=?, z=?] z =3 [x=?, y=?, z=3] while (x > 0) [x=?, y=?, z=3] false [x=?, y=?, z=3] true if (x == 1) [x=1, y=?, z=3] [x=?, y=?, z=3] true false y =7 y = z + 4 [x=1, y=7, z=3] [x=?, y=7, z=3] assert (y == 7)

Another Static Analysis Problem Liveness Analysis: find which variables are live at each program point These are variables that are used before being set on some path from current program point Many applications: Compilers: register allocation Software Quality Tools: find uninitialized variable use

Liveness Analysis on Example Program { c } a = 0 { c, a } L: b = a + 1 { c, b } c = c + b { c, b } true a = b * 2 { c, a } { c } if (c < N) goto L { c } false return c

Other Static Analysis Problems Reaching definitions Expressions that are “available” Dead code Pointer variables never point into the same location Points in the program in which it is safe to free an object An invocation of virtual method whose address is unique Statements that can be executed in parallel Integer intervals

Dynamic vs. Static Analysis Effectiveness Unsound (may miss errors) Incomplete (may report spurious errors) Cost Proportional to program’s execution Proportional to program’s size

Dynamic vs. Static Analysis Effectiveness Unsound (may miss errors) Incomplete (may report spurious errors) Cost Proportional to program’s execution Proportional to program’s size

Undecidability of Program Properties Even seemingly simple program properties are undecidable e.g.: is a program point reachable on some input? => no program analysis can be sound and complete Some properties undecidable even if program is simplified (e.g., conditionals are ignored)

Who Needs Program Analysis? Compilers Advanced computer architectures High-level programming languages (functional, OO, garbage-collected, concurrent) Software Quality Tools (Testing, Verification, Debugging) Generate test cases Find programming errors Generate certification proofs Localize causes of errors Program Understanding (e.g., IDEs)

Software Quality Tools Detecting hazards (lint) e.g.: Using uninitialized variables a = malloc() ; b = a; free(a); c = malloc(); if (b == c) printf(“unexpected equality”); References outside array bounds Memory leaks (even in Java!)

Case Study 1: Static Driver Verifier API Usage Rules (SLIC) Static Driver Verifier Windows API Model of Windows Kernel Defects 100% path coverage Driver’s Source Code in C

Overview of SLAM Process C program SLIC rules C2BP Boolean Program  BEBOP Proof Abstract Error Trace NEWTON Concrete Error Trace

Bill Gates’ Quote about SLAM "Things like even software verification, this has been the Holy Grail of computer science for many decades but now in some very key areas, for example, driver verification we’re building tools that can do actual proof about the software and how it works in order to guarantee the reliability.” Bill Gates, April 18, 2002. Keynote address at WinHec 2002

Case Study 2: ASTRÉE Prove absence of bugs in safety critical C code ASTRÉE automatically proved absence of bugs in the primary flight control software of Airbus A340’s fly-by-wire system Analyzed a program of 132,000 lines of C code