cs527: (advanced) topics in software engineering (software testing and analysis) darko marinov...

39
CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Upload: corey-morris

Post on 29-Dec-2015

228 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

CS527: (Advanced) Topics in Software Engineering

(Software Testing and Analysis)

Darko Marinov

August 23, 2011

Page 2: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Course Overview• Graduate seminar on program analysis (for

bug finding), emphasis: systematic testing (for concurrent code)

• Focus on a (research) project– Papers: reading in advance, writing reports,

presenting, and discussing– Project: initial proposal, progress report, [final

presentation, based on enrollment size], paper• One homework assignment (maybe two) to

help with projects

Page 3: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Administrative Info

• Meetings: TR 2-3:15pm, 1302 SC

• Credit: 4 graduate hours• Auditors welcome for discussions

– Can come to any lecture, mostly self-contained

• Prerequisites: some software engineering and programming languages

Page 4: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Evaluation

• Grading– Project [40%]– Presentation [20%]– Participation (reports and discussion) [20%]– Homework assignment(s) [20%]

• Distribution– Grades will be A- centered– No guarantee for A (or even a passing grade)!

• Project is the most important

Page 5: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Project

• Proposal (due in late September)• Progress report (in November)• [Presentation (after Thanksgiving Break)]• Paper (last day of classes)

• 15 students who took similar classes published 12 papers based on their projects– I’m happy to help, no co-authorship required

Page 6: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Fair Warnings

• This class will differ from most you take– Seminar style, reading papers– Centered around (research) projects

• Projects are NOT easy– Require that you explore a topic in great depth– The topic can/should be fairly narrow

Page 7: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Repeated Warning

• Project matters the MOST– If you like open-ended projects, do take this

course– If you don’t like open-ended projects, please

drop this course now– If you’re unsure, please discuss with me

• The worst scenario: take the course but realize you don’t like projects

Page 8: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Project Overview

• Testing/analysis of some open-source code– We will use mostly Java this semester

• You can use C#/C/C++/C--/Clojure/Cecil…http://en.wikipedia.org/wiki/List_of_programming_languages#C

• Sample topics– Automated unit testing– Test coverage and adequacy criteria– Test-input generation, test oracles– Test maintenance– …

Page 9: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Course Communication

• Wikihttp://wiki.engr.illinois.edu/display/cs527fa11

• Mailing listcs527-fa11 AT cs.illinois.edu

Page 10: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Personnel

• Instructor: Darko Marinov– Office: 3116 SC, hours: by appointment– Phone number: 217-265-6117– NetID: marinov

• TA: Shin Hwei Tan– NetID: stan6

• Please use your [email protected] email addresses for communication

Page 11: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Signup Sheet

• Name• NetID (please write it legibly)• Program/Year• Group• Interests

• Please also sign up on Wiki (if possible,as there are some delays with netids)

Page 12: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

This Lecture: Overview

• Why look for bugs?• What are bugs?• Where they come from?• How to detect them?

Page 13: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Some Costly “Bugs”

• NASA Mars space missions– Priority inversion (2004)– Different metric systems (1999)

• BMW airbag problems (1999)– Recall of >15000 cars

• Ariane 5 crash (1996)– Uncaught exception of numerical overflow– http://www.youtube.com/watch?v=kYUrqdUyEpI

• Your own (in)famous example?

Page 14: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Some “Bugging” Bugs

• An example bug on my laptop– “Jumping” file after changing properties

• Put a read-only file on the desktop• Change properties: rename and make not read-only

• Your own favorite example?

Page 15: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Economic Impact

• “The Economic Impact of Inadequate Infrastructure for Software Testing”NIST Report, May 2002

• $59.5B annual cost of inadequate software testing infrastructure

• $22.2B annual potential cost reduction from feasible infrastructure improvements

Page 16: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Estimates

• Extrapolated from two studies (5% of total)– Manufacturing: transportation equipment– Services: financial institutions

• Number of simplifying assumptions• “…should be considered approximations”

• What is important for you?– Correctness, performance, functionality

Page 17: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Terminology• Anomaly• Bug• Crash• Defect• Error• Failure, fault • Glitch• Hangup• Incorrectness• J…

Page 18: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Dynamic vs. Static

• Incorrect (observed) behavior– Failure, fault

• Incorrect (unobserved) state– Error, latent error

• Incorrect lines of code– Fault, error

Page 19: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

“Bugs” in IEEE 610.12-1990

• Fault– Incorrect lines of code

• Error– Faults cause incorrect (unobserved) state

• Failure– Errors cause incorrect (observed) behavior

• Not used consistently in literature!

Page 20: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Correctness

• Common (partial) properties– Segfaults, uncaught exceptions– Resource leaks– Data races, deadlocks– Statistics based

• Specific properties– Requirements– Specification

Page 21: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Traditional Waterfall ModelRequirements

Analysis

DesignChecking

ImplementationUnit Testing

IntegrationSystem Testing

MaintenanceVerification

Page 22: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Phases (1)

• Requirements– Specify what the software should do– Analysis: eliminate/reduce ambiguities,

inconsistencies, and incompleteness• Design

– Specify how the software should work– Split software into modules, write specifications– Checking: check conformance to requirements

Page 23: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Phases (2)

• Implementation– Specify how the modules work– Unit testing: test each module in isolation

• Integration– Specify how the modules interact– System testing: test module interactions

• Maintenance– Evolve software as requirements change– Verification: test changes, regression testing

Page 24: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Testing Effort

• Reported to be >50% of development cost [e.g., Beizer 1990]

• Microsoft: 75% time spent testing– 50% testers who spend all time testing– 50% developers who spend half time testing

Page 25: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

When to Test

• The later a bug is found, the higher the cost– Orders of magnitude increase in later phases– Also the smaller chance of a proper fix

• Old saying: test often, test early• New methodology: test-driven development

(write tests before code)

Page 26: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Software is Complex

• Malleable• Intangible• Abstract• Solves complex problems• Interacts with other software and hardware• Not continuous

Page 27: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Software Still Buggy

• Folklore: 1-10 (residual) bugs per 1000 nbnc lines of code (after testing)

• Consensus: total correctness impossibleto achieve for (complex) software– Risk-driven finding/elimination of bugs– Focus on specific correctness properties

Page 28: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Approaches for Detecting Bugs

• Software testing• Model checking• (Static) program analysis

Page 29: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Software Testing

• Dynamic approach• Run code for some inputs, check outputs• Checks correctness for some executions

• Main questions– Test-input generation– Test-suite adequacy– Test oracles

Page 30: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Other Testing Questions

• Maintenance• Selection• Minimization• Prioritization• Augmentation • Evaluation• Fault Characterization• …

Page 31: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Model Checking

• Typically hybrid dynamic/static approach• Checks correctness for all executions

• Some techniques– Explicit-state model checking– Symbolic model checking– Abstraction-based model checking

Page 32: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Static Analysis

• Static approach• Checks correctness for all executions

• Some techniques– Abstract interpretation– Dataflow analysis– Verification-condition generation

Page 33: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Comparison

• Level of automation– Push-button vs. manual

• Type of bugs found– Hard vs. easy to reproduce– High vs. low probability– Common vs. specific properties

• Type of bugs (not) found

Page 34: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Soundness and Completeness

• Do we detect all bugs?– Impossible for dynamic analysis

• Are reported bugs real bugs?– Easy for dynamic analysis

• Most practical techniques and tools are both unsound and incomplete!– False positives– False negatives

Page 35: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Analysis for Performance

• Static compiler analysis, profiling• Must be sound

– Correctness of transformation: equivalence• Improves execution time• Programmer time is more important

• Programmer productivity– Not only finding bugs

Page 36: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Combining Dynamic and Static

• Dynamic and static analyses equal in limit– Dynamic: try exhaustively all possible inputs– Static: model precisely every possible state

• Synergistic opportunities– Static analysis can optimize dynamic analysis– Dynamic analysis can focus static analysis– More discussions than results

Page 37: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Current Status

• Testing remains the most widely used approach for finding bugs

• A lot of recent progress (within last decade) on model checking and static analysis– Model checking: from hardware to software– Static analysis: from sound to practical

• Vibrant research in the area

• Gap between research and practice

Page 38: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Topics Related to Finding Bugs

• How to eliminate bugs?– Debugging

• How to prevent bugs?– Programming language design– Software development processes

• How to show absence of bugs?– Theorem proving– Model checking, program analysis

Page 39: CS527: (Advanced) Topics in Software Engineering (Software Testing and Analysis) Darko Marinov August 23, 2011

Next Lecture

• Thursday, August 25, at 2pm, 1302 SC• Texts to read (listed on Wiki)

– How to Read an Engineering Research Paperby William G. Griswold

– Writing Good Software Engineering Research Papers

by Mary Shaw (ICSE 2003)• If you have read that paper, read on another area

• You don’t have to write any report now• Assignment 0: Modify “People” on Wiki