The GAMMA Project
Jim Clause
The GAMMA Project Jim Clause Overall picture Overall picture - - PDF document
The GAMMA Project Jim Clause Overall picture Overall picture Overall picture Overall picture Overall picture Debugging Regression testing Impact analysis Behavior classification Refactoring ... Overall picture Debugging Regression
Jim Clause
Debugging Regression testing Impact analysis Behavior classification Refactoring ...
Debugging Regression testing Impact analysis Behavior classification Refactoring ...
Field failures: Anomalous behavior (or crashes) of deployed software that occur on user machines
Crash logs User-provided information
!
!
Minimize ! Record / Monitor ! Develop Replay / Debug
Execution repository
Regression testing
(e.g. Elbaum et al. 06, Orso et al. 06, Orso and Kennedy 05, Saff et al. 05, Mercury WinRunner)
execution by recording events for specific subsystems
Deterministic debugging
(e.g. Chen et al. 01, King et al. 05, Narayanasamy et al. 05, Netzer and Weaver 94, Srinivasan et al. 04, VMWare)
recording every component of an application Both types of technique are not amenable to minimization and may cause unacceptable overhead
amenable to minimization
amenable to minimization
environment
Streams
Streams Files
Streams Files
Streams Files
Interaction events: FILE — interaction with a file POLL — checks for availability of data on a stream PULL — read data from a stream
Event log: Environment data (files): Environment data (streams): Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} POLL KEYBOARD OK POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} POLL KEYBOARD OK POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} hello POLL KEYBOARD OK PULL KEYBOARD 5 POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} hello POLL KEYBOARD OK PULL KEYBOARD 5 POLL KEYBOARD NOK
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} hello POLL KEYBOARD OK PULL KEYBOARD 5 POLL KEYBOARD NOK POLL NETWORK OK NETWORK: {3405}
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} hello POLL KEYBOARD OK PULL KEYBOARD 5 POLL KEYBOARD NOK POLL NETWORK OK NETWORK: {3405} !
Event log: Environment data (files): Environment data (streams):
FILE foo.1
foo.1
KEYBOARD: {5680} hello POLL KEYBOARD OK PULL KEYBOARD 5 POLL KEYBOARD NOK POLL NETWORK OK NETWORK: {3405} !
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
"
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
"
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
"
Environment data (files): Event log: Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
FILE foo.1 POLL KEYBOARD NOK POLL KEYBOARD OK PULL KEYBOARD 5 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK NOK POLL NETWORK OK FILE foo.2 ... PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK ...
foo.1 foo.2 bar.1
" " " " " " " " " " " " "
!
Goal: focus debugging effort
!
Goal: focus debugging effort
Execution recording
!
Goal: focus debugging effort
Execution recording
Time minimization
!
Goal: focus debugging effort
Execution recording Execution recording
Time minimization
!
Goal: focus debugging effort
Execution recording Execution recording
Time minimization
Data minimization
!
Goal: focus debugging effort
Execution recording Execution recording Execution recording
Time minimization
Data minimization Event log:
FILE foo.1 POLL KEYBOARD OK PULL KEYBOARD 1 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK OK FILE foo.2 PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK POLL KEYBOARD NOK
Environment data (files): Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
POLL KEYBOARD NOK
Event log:
FILE foo.1 POLL KEYBOARD OK PULL KEYBOARD 1 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK OK FILE foo.2 PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK POLL KEYBOARD NOK
Environment data (files): Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
POLL KEYBOARD NOK
Remove idle time
Event log:
FILE foo.1 POLL KEYBOARD OK PULL KEYBOARD 1 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK OK FILE foo.2 PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK POLL KEYBOARD NOK
Environment data (files): Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
POLL KEYBOARD NOK
Remove idle time
Event log:
FILE foo.1 POLL KEYBOARD OK PULL KEYBOARD 1 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK OK FILE foo.2 PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK POLL KEYBOARD NOK
Environment data (files): Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
POLL KEYBOARD NOK
Remove idle time Remove delays
Event log:
FILE foo.1 POLL KEYBOARD OK PULL KEYBOARD 1 POLL NETWORK OK PULL NETWORK 1024 FILE bar.1 POLL NETWORK OK FILE foo.2 PULL NETWORK 1024 FILE foo.2 POLL KEYBOARD NOK POLL KEYBOARD NOK
Environment data (files): Environment data (streams):
KEYBOARD: {5680}hello ! {4056}c ! {300}... NETWORK: {3405}<html><body>... ! {202}...
POLL KEYBOARD NOK
Remove idle time Remove delays
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Atoms Chunks Whole entities Data minimization Environment
Assisting the Debugging of Deployed Applications
Assisting the Debugging of Deployed Applications
be used to debug the original failure?
be used to debug the original failure?
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% # entities streams size files size
Average value after minimization
Header-color fault Address book fault
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% # entities streams size files size
Average value after minimization
Header-color fault Address book fault
Moreover, these results are conservative: recorded executions only contain the minimal amount of data needed to perform an action.
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% # entities streams size files size
Average value after minimization
Header-color fault Address book fault
Overhead
Moreover, these results are conservative: recorded executions only contain the minimal amount of data needed to perform an action.
field failures
cases considered, our technique can
C A B Z
C A B 3 1 2 Z
C A B 3 1 2 Z
C A B 3 1 2 Z 3
C A B 3 1 2 Z 3
Dytan: A Generic Dynamic Taint Analysis Framework James Clause, Wanchun Li, and Alessandro Orso International Symposium on Software Testing and Analysis (ISSTA 2007) Effective Memory Protection Using Dynamic Tainting James Clause, Ioannis Doudalis, Alessandro Orso, and Milos Prvulovic International Conference on Automated Software Engineering (ASE 2007)
Minimize ! Record / Monitor ! Develop Replay / Debug
Minimize ! Record / Monitor ! Develop Replay / Debug
Fuzz
Minimize ! Record / Monitor ! Develop Replay / Debug
Fuzz
Minimize ! Record / Monitor ! Develop Replay / Debug
Fuzz