Overview
Syllabus
Intro
Reliability and Testing • How do developers build reliable software?
Software Engineering & Systems
Program Dependencies Between variables?
Simplified Software Lifecycle
Testing Dominates Build Times
Test Suite Minimization
Regression Test Selection
Test Independence
Controlled Regression Testing Assumption
What should we do with dependent tests?
Isolating Tests
JUnit Test Execution
How do Tests Leak Data? Java is memory-managed, and object oriented We think in terms of object graphs
Isolating Side Effects Class A
Isolating Side Effects Class B
VMVM: Unit Test Virtualization
Performance Evaluation
Relative Overhead
Manifest Test Dependencies
Electric Test - Detecting Data Dependencies in Java • Tracks in-memory dependencies (JUMTI plugin)
Identifying Heap
Identifying External
Safe Test Parallelization
Safe Test Selection
Potential Speedup
Dynamic Data Flow Analysis: Taint Tracking
Phosphor: Instrumentation Strategy
Complications
Phosphor Doubles Stack Size
Non-Modifiable Classes (and Arrays)
Native Code
Macrobenchmarks Phosphor Relative Runtime Overhead (Hotspot 7)
Data Flow Analysis for Data Security Testing
What is an Email on Android?
Intuition: Thin Apps, Thick OS
Pebbles Architecture
Pebbles Applications Bread Crumbs: deletion auditing
Pebbles is Accurate
Dependency Analysis for Debugging and Behavioral Clones
Runtime Monitoring of Deployed Software
Taught by
Paul G. Allen School