Rui Abreu
- Dept. of Informatics Engineering
Faculty of Engineering University of Porto
Thanks: Peter Zoeteweij, Tom Janssen, Arjan J.C. van Gemund Johan de Kleer, Wolfgang Mayer
Fault Diagnosis of Software Systems
Fault Diagnosis of Software Systems Rui Abreu Dept. of Informatics - - PowerPoint PPT Presentation
Fault Diagnosis of Software Systems Rui Abreu Dept. of Informatics Engineering Faculty of Engineering University of Porto Thanks: Peter Zoeteweij, Tom Janssen, Arjan J.C. van Gemund Johan de Kleer, Wolfgang Mayer 2 About the speaker
Rui Abreu
Faculty of Engineering University of Porto
Thanks: Peter Zoeteweij, Tom Janssen, Arjan J.C. van Gemund Johan de Kleer, Wolfgang Mayer
Fault Diagnosis of Software Systems
LESI, UM ST, UU Philips Research Labs PhD, TUD
Siemens, Porto
About the speaker…
Software Faults
consequences
3Automated Diagnosis
– expert systems – model-based diagnosis
devices), e.g.,
– Line stuck at 0/1, valve stuck, – Sensors, amps not working, – Leakage, …
Software
– E.g., applications in recovery don’t require the level of detail needed for debugging
– Functionality shift HW → SW – 25% annual growth rate – Nearly constant fault density – Decreasingly dependable systems U
Dependability approaches
How to reverse the trend?
density + LOC
– Formal methods, SW arch, code generation, testing, …
– Fault detection, isolation, recovery (FDIR)
Software fault diagnosis
Contributes to dependability in two ways
– shortens the test – diagnose – repair cycle – More bugs solved → more reliable products – (or shorted time to market)
– Can serve as the basis for (automated) recovery – Requires recovery-oriented design
Live Demo later on
Outline
– Diagnosis principles – Model-Based Diagnosis – Spectrum-Based Fault Localization – Live Demo
– Existing systems – Current research – Case studies – Further applications – Other approaches
Spectrum-based fault localization
– As opposed to model-based diagnosis
– As opposed to model-based diagnosis
testing schemes
Integration with testing
Test suite t1 t2 t3 t4 t5
Integration with testing
Status t1 t2 t3 t4 t5 System components are ranked according to likelihood of causing the detected errors
1 2 2
Terminology
fault error failure behavior ≠ expected behavior (segmentation fault) system state that may cause a failure (index out of bounds) the cause of an error in the system (bug: array index un-initialized)
Terminology
fault error failure For our purposes, the distinction between errors and failures is less relevant: failures are errors that affect the user; i.e. that are externally observable. This depends on
Example: rational bubble sort
void RationalSort( int n, int *num, int *den ) { int i,j; for ( i=n-1; i>=0; i-- ) { assert( den[i] != 0 ); for ( j=0; j<i; j++ ) { if ( RationalGT( num[j], den[j], num[j+1], den[j+1] ) ) { swap( &num[j], &num[j+1] ); /* swap( &den[j], &den[j+1] ); */ } } } }
Fault: forgot to swap denominators Error: sequence is not a permutation of input sequence Failure: output is not a sorted version of the input
Example: rational bubble sort
4 3 1 1 , 4 , 3 4 3 1 3 , 1 , 4 4 3 1 1 , 3 , 4 4 3 1 3 , 4 , 1
Example: rational bubble sort
RationalSort works fine if the input array is already sorted, or if all denominators are equal:
1 1 1 1 , 2 , 3 1 1 1 3 , 1 , 2 1 1 1 1 , 3 , 2 1 1 1 3 , 2 , 1
Example: rational bubble sort
1 2 1 , 2 , 4 1 2 1 4 , , 2 1 2 1 , 4 , 2 1 2 1 4 , 2 ,
ERROR!
Fault Diagnosis
Identify component(s) that are root cause of failure
y = f(x,h) x
f1 f2 f4 f5 f3 Diagnose failure: solve inverse problem h = f-1(x,y) Diagnosis: h2 = fault state, or h4 and h5 = fault state x, y: observation vectors f: system function, fi: component functions h: system health state vector, hi: component health vars
healthy faulty
Example Fault Diagnoses
Modeling Information (1)
y = f(x,h) x
f1 f2 f4 f5 f3
– can only test for system failure, not locate component failure
y’ = M(x)
model M of nominal behavior =? Pass/Fail
Modeling Information (2)
y = f(x,h) x
f1 f2 f4 f5 f3
– can infer location(s) of failure (Model-Based Diagnosis)
M1 M2 M4 M5 M3 =? Pass/Fail
y’ = M(x,h’)
search for h’=h such that y’ consistent with y
Modeling Information (3)
y = f(x,h) x
f1 f2 f4 f5 f3
– can infer location(s) of failure (Spectrum-Based Diagnosis)
1 2 4 5 3 =? Pass/Fail
y’ = M(x)
trace
correlate trace with Pass/Fail test outcomes
Models in diagnosis
x z y1 y2 i1 i3 i2
y1=y2=x
Reasoning about faults
1 1 i1 i3 i2
Reasoning about faults
1 1 i1 i3 i2
Reasoning about faults
1 1 i1 i3 i2
Reasoning about faults
1 1 i1 i3 i2
Invalid explanation!
Reasoning about faults
1 1 i1 i3 i2
valid (h1,h2,h3) invalid (1,0,1) (1,1,1) (0,0,1) (0,1,1) (1,0,0) (1,1,0) (0,1,0) (0,0,0)
Reasoning about faults
1 1 i1 i3 i2
valid invalid (1,0,1) 0.009801 (1,1,1) (0,0,1) 0.000099 (0,1,1) (1,0,0) 0.000099 (1,1,0) (0,1,0) 0.000099 (0,0,0) 0.000001 P(fail)=0.01
Model-based diagnosis
i hi xi yi model component i: hi ⇒ (yi = ¬xi) model system: h1 ⇒ (y1 = ¬x1) h2 ⇒ (y2 = ¬x2) h3 ⇒ (y3 = ¬x3) y1=z z=x2 z=x3 x1 z y2 y3 i1 i3 i2 h1 h2 h3
Model-based diagnosis
f : health states x input → output
f -1 : input x output → health states
system
Improving MBD accuracy
1 1 i1 i3 i2
(1,0,1) (0,0,1) (1,0,0) (0,1,0) (0,0,0)
Improving MBD accuracy
1 i1 i3 i2
multiple (1,0,1) (0,0,1) (0,0,1) (1,0,0) (1,0,0) (0,1,0) (0,1,0) (0,0,0) (0,0,0) Add a second observation
Improving MBD accuracy
1 i1 i3 i2
multiple z=1 (1,0,1) (0,0,1) (0,0,1) (1,0,0) (1,0,0) (0,1,0) (0,1,0) (0,1,0) (0,0,0) (0,0,0) (0,0,0) Add more probes
1
Model strength
hi = ok ⇒ (yi = ¬xi) hi = stuck at 1 ⇒ (yi = 1) hi = stuck at 0 ⇒ (yi = 0) hi = bypass ⇒ (yi = xi)
Model strength
i hi xi yi model component i: hi ⇒ (yi = ¬xi) ¬ hi ⇒ ¬ yi “stuck-at-zero”
1 1 i1 i3 i2
Improving MBD accuracy
weak strong (1,0,1) (1,0,1) (0,0,1) (0,0,1) (1,0,0) (0,1,0) (0,0,0)
Weak model
x y1 y2
y1=y2=x c1 c2 c3
Weak model
1 0 1
c1 c2 c3
behavior
involved in the computation of an incorrect result
Spectrum-based fault localization (SFL)
coincide with the occurrence of failures
that tells us which parts of a system are involved in a computation
– Statistics-based – Based on (logic) reasoning
Program spectra
parts of a software system are used in a particular test case
problems
– Spectra of program locations – Spectra of branches / paths – Spectra of data dependencies – Spectra of method call sub-sequences
Block / function hit spectra
x1 x2 … xi … xM 1: function i called 0: function i not called Function hit spectrum 1: block i executed 0: block i not executed Block hit spectrum Block:
Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN
M components N cases
Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN
Row i: the blocks that are executed in case i
Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN
Column j : the test cases in which block j was executed
Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN
ei=1 : error in the i-th test ei=0 : no error in the i-th test
Statistics-based Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN Compare every column vector with the error vector. similarity sj block j error vector
Statistics-based Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = n11+n10+n01 n11
n11+n10+n01 n11
Statistics-based Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj =
2 +n10+n01
Statistics-based Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
2 + 1 +n01
Statistics-based Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
2 + 1 + 1
Statistics-based Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
Statistics-based Fault diagnosis
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN s1 s2 … sM For every block: similarity with the error “block” The component with the highest si most likely contains the fault. m cases M components error vector
Statistics-based Fault diagnosis
component a b c d e f g fail test 1 1 1 1 1 test 2 1 1 1 1 test 3 1 1 1 1 1 test 4 test 5 1 1 1 1 1 1 ⅔ ½ ¼ ¾ ¼ ⅓ ⅔ s = n11+n10+n01 n11
Example: rational bubble sort
void RationalSort( int n, int *num, int *den ) { int i,j; /* block 1 */ for ( i=n-1; i>=0; i-- ) { assert( den[i] != 0 ); /* block 2 */ for ( j=0; j<i; j++ ) { if ( RationalGT( num[j], den[j], /* block 3 */ num[j+1], den[j+1] ) ) { swap( &num[j], &num[j+1] ); /* block 4 */ /* swap( &den[j], &den[j+1] ); */ } } } }
Fault: forgot to swap denominators Error: sequence is not a permutation of input sequence Failure: output is not a sorted version of the input
4 2 0 1 2 1 2 0 4 1 2 1 2 4 0 1 2 1 0 2 4 1 2 1 ERROR!
earlier example
Example (2)
Example (3)
Block 4 has highest similarity coefficient -> most likely suspect
Reasoning-based Fault Diagnosis
59– Reasoning approach based on behavioral comp models – High(er) diagnostic accuracy – Prohibitive (modeling and/or diagnosis) cost
– Statistical based on execution spectra – Lower diagnostic accuracy: cannot reason over multiple faults – No modeling (except test oracle) + low diagnosis cost
Idea: Extend SFL with MBD
– Reasoning approach based on behavioral comp models – High(er) diagnostic accuracy – Prohibitive (modeling and/or diagnosis) cost
– Statistical based on execution spectra – Lower diagnostic accuracy: cannot reason over MF – No modeling (except test oracle) + low diagnosis cost
60Working Example
61SFL
62TARANTULA
Reasoning
63Reasoning
64Reasoning
65Ranking Candidates
– where
Ranking Candidates
– Ideally
– But estimating hj is far from trivial, hence approximations
have been used so far (BAYES-A, [Abreu et al., WODA’08])
68Barinel
– for each dk , compute hj for the candidate’s faulty components that maximizes the probability Pr(e|dk) of
Barinel Algorithm
c1 c2 c3 e 1 1 0 1 (F) 0 1 1 1 (F) 1 0 0 1 (F) 1 0 1 0 (P)
Barinel Algorithm
– Maximum likelihood estimation – Gradient ascent procedure – Pr(e|d1): h1 = 0.47 ; h2 = 0.19 Pr(d1) = 0.19 – Pr(e|d2): h1 = 0.41 ; h3 = 0.50 Pr(d2) = 0.04
– D = <{1,2}, {1,3}> – Inspection starts with components 1 and 2
LIVE DEMO
– The Zoltar toolset (www.fdir.org/zoltar) – LLVM – OS: Linux
– Soon
In Proceedings of the 24th International Conference on Automated Software Engineering (ASE'09) - Tools Track, pp. 662--664, Auckland, New Zealand, November 2009. IEEE Computer Society. (Best Demo Award)
Model-based vs. Spectrum-based
Model-based
reasoning
are valid
not be actual cause
Spectrum-based
error detection
explanations
rank high
Outline
– Diagnosis principles – Model-Based Diagnosis – Spectrum-Based Fault Localization – Live Demo
– Existing systems – Lessons learned – Case studies – Further applications – Related work
Existing applications
systems (search engines, web mail) [Chen02]
manual debugging [Jones02]
Similarity Coefficients
Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = n11+n10+n01 n11
n11+n10+n01 n11
Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj =
2 +n10+n01
Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
2 + 1 +n01
Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
2 + 1 + 1
Fault diagnosis
1 1 1 1 1 1 Jaccard similarity coefficient: block j error vector sj = 2
Diagnostic quality
Discussion
Ochiai outperforms 8 other coefficients.
conditions of our experiment?
– Quality of the passed / failed information – Numers of runs – Artificial bugs in Siemens set
Ochiai outperforms Tarantula
n11/(n11+n01) n11/(n11+n01) + n10/(n10+n00) 1 / (1 + ) 1 / (1 + c ), with c = =
n10 n10+n00 n11+n01 n11 n10 n11 n11+n01 n10+n00 NF NP n11>0
Ochiai outperforms Tarantula
Tarantula 1 / (1 + c ) Ochiai n11 √((n11+n01).(n11+n10))
n10 n11
Ochiai outperforms Tarantula
Tarantula 1 / (1 + c ) Ochiai n11 √((n11+n01).(n11+n10))
n10 n11 Only presence in passed runs lowers the similarity Absence in failed runs also lowers the similarity
Ochiai outperforms Jaccard
Jaccard n11 n11+n01+n10 Ochiai n11 √((n11+n01).(n11+n10))
Ochiai outperforms Jaccard
n11 √((n11+n01)(n11+n10)) square n11
2
((n11+n01)(n11+n10)) rewrite denominator n11
2
n11
2+n11n10+n11n01+n01n10
eliminate a11 n11 n11+n10+n01+ n01n10/n11 None of these steps modifies the ranking!
Ochiai outperforms Jaccard
Jaccard n11 n11+n01+n10 Ochiai n11 n11+n10+n01+ n01n10/n11
differences are amplified
Quality of the passed / failed info
mechanism.
average for schedule2 to 20.3% on average for tot_info.
contributes to n10
contributes to n11
Quality of the passed / failed info
Small fraction of fault activations detected is enough
Number of runs
– Adding more failed tests is safe – 6 failed tests are enough – The number of passed tests has no influence
– For individual runs the effect of adding passed tests differs – It stabilizes around 20 passed tests
Influence of #runs
Influence of #runs
benchmark:
– Adding failed runs is safe – 6 failed runs is enough – The number of passed runs has no influence
– For individual runs, the effect of more passed runs differs – It stabilizes around 20
Dependence on Siemens set faults
project: improve the user-perceived reliability of high-volume consumer electronics devices
– Universities of Delft, Twente, Leiden, – Embedded Systems Institute, Design Technology Institute, IMEC Leuven – NXP (former Philips Semiconductors)
Embedded systems
– No time for exhaustive debugging – Helps to identify responsible teams / developers
rebooting suspect processes
Case study – platform
menu, teletext, optimizes parameters for audio / video processing based on signal analysis, etc.
Case study
TV TXT TV
the logical threads (one per second): 60 sec. TV, 30 sec. TXT, 60 sec. TV
Diagnosis
Case study
– Existing problem in another product line – Copied to our platform, triggered by a remote control key sequence – Inconsistency in two state variables, for which only specific combinations are allowed
Lock-up problem
– In text mode, the sequence introduces a state inconsistency
– Check on the two variables involved in the inconsistency (Hasan Sozer)
– Small Koala component for caching / transmitting spectra – Transaction: time between two key presses
– block that introduces the inconsistency
2 ? 1 1
Bool mgkey__rkeyntf_OnUp (KeySource source, KeySystem system, KeyCommand command) { hook_log (20345); if ((1) && Enabled) { Bool translated=0; hook_log (20346); hook_EndTransaction (); ... if ( !translated) { hook_log (20349); Translate (source, system, &command); } if (command >= 1000 && command <= 1009) { hook_log (20350); seq[0] = seq[1]; seq[1] = seq[2]; seq[2] = seq[3]; seq[3] = command - 1000; if ( !triggered) { hook_log (20351); if (seq[0] == 1 && seq[1] == 2) { hook_log (20353); triggered = 1; switch (seq[3]) { case 1: hook_log (20354); tmode = 6; break; case 2: hook_log (20355); ...
inconsistency start a new spectrum log use of the block in the current spectrum
Remember block 20354
Sample code Used for testing purposes only!
Experiments
x11 x12 … x1M e1 x21 x22 ... x2M e2 … … ... ... … xN1 xN2 … xNM eN M > 60,000 6 - 26 trans. 13,451 – 13,796 blocks were executed in the scenarios
Scenario 1
23 key presses: P+ P- Vol+ Vol- Txt 751 100 121 100 Txt Txt Txt 751
Block numbers sorted on decreasing similarity to the error vector:
20353 (1/1) 20354 (1/1) 58890 (1/4) 3134 (1/5) 3664 (1/6) 3135 (1/6) 58889 (1/7) 59839 (1/8) 29569 (1/9) 1256 (1/9)15755 (1/10) 20351 (1/10) 15781 (1/11) 15777 (1/11) 15778 (1/11) 15779 (1/11) 15782 (1/11) 15823 (1/11) 20432 (1/11) 15727 (1/11) ...
Diagnosis
Scenario 2
26 key presses: P+ P- Vol+ Vol- Txt 121 751 100 121 100 Txt Txt Txt 751
The sequence 121 7 exonerates block 20353
Diagnosis for scenario 2
large as that of any other block
20354 (1/1) 20353 (1/2) 3134 (1/5) 50466 (1/11) 20432 (1/11) 15755 (1/11) 58208 (1/12) 58207 (1/12) 59816 (1/12) 50439 (1/12) 50436 (1/12) 14817 (1/12) 50432 (1/12) 50437 (1/12) 50288 (1/12) 50428 (1/12) 14814 (1/12) 14816 (1/12) 50422 (1/12) 14813 (1/12) ...
void hook_EndTransaction() { ... if (IS_TXT_OFF(tmode) == IS_DISPLAY_TXT(CurrentDisplayProfile) ) { if ( gv_error_prev == 0 ) { hook_log( PROFILE_SIZE * 2 - 1 ); } gv_error_prev = 1; } else { gv_error_prev = 0; } ... }
Error detection
Log an error on each transition from a consistent state To an inconsistent state:
Sample code Used for testing purposes only!
Error detection
Definition of error is important
inconsistency are considered to demonstrate an
the cause if the scenario includes TV mode to Txt transitions after the first inconsistency.
Case Studies (Summary)
Case To Inspect Out of / Previous Load Problem 2 logical threads 315 Teletext Lock-Up 2 blocks 60K NVM corrupt 96 blocks, 10 files 150K, 1.8K Scrolling Bug 5 blocks 150K Invisible Pages 12 blocks 150K Tuner Problem 2 files 1.8K Zapping Crash 1 run (15 mins) 1 day (develop) Wrong Audio 1 run (15 mins) ½ day (expert)
Experiments
stable
Resource constraints
Memory constraints
software yields spectra of over 60.000 flags
seconds
Update counters at run-time
Current sp. … 1 … 1 … a00 … ++ … … a10 … ++ … … a01 … … ++ … a11 … … ++ … passed failed s = n11+n10+n01 n11
Perform diagnosis anytime
a00 … 3 4 … 10 12 … a10 … 10 11 … 3 4 … a01 … 1 … 1 1 … a11 … 1 2 … 1 1 … s = n11+n10+n01 n11
1/7 1/11 1/5 1/6
Self diagnosing system
a b c d e f g fail test 1 test 2 test 3 test 4 test 5 a00 a01 a10 a11 Jaccard
Self diagnosing system
a b c d e f g fail test 1 1 1 1 1 test 2 test 3 test 4 test 5 a00 1 1 1 a01 a10 1 1 1 1 a11 Jaccard
Self diagnosing system
a b c d e f g fail test 1 test 2 1 1 1 1 test 3 test 4 test 5 a00 1 1 1 a01 1 1 1 1 a10 1 1 1 1 a11 1 1 1 Jaccard
½
1 1
Self diagnosing system
a b c d e f g fail test 1 test 2 test 3 1 1 1 1 1 test 4 test 5 a00 1 1 1 a01 1 1 1 2 1 1 a10 1 1 1 1 a11 1 1 1 2 1 1 Jaccard
½ ⅓ ⅓ ⅔ ½ ½
Self diagnosing system
a b c d e f g fail test 1 test 2 test 3 test 4 test 5 a00 2 1 1 1 1 2 2 a01 1 1 1 2 1 1 a10 1 1 1 1 a11 1 1 1 2 1 1 Jaccard
½ ⅓ ⅓ ⅔ ½ ½
Self diagnosing system
a b c d e f g fail test 1 test 2 test 3 test 4 test 5 1 1 1 1 1 1 a00 2 1 1 1 1 2 2 a01 1 1 2 2 2 1 a10 1 1 1 1 a11 2 2 1 3 1 1 2 Jaccard
⅔ ½ ¼ ¾ ¼ ⅓ ⅔
Self diagnosing system
a b c d e f g fail test 1 test 2 test 3 test 4 test 5 a00 2 1 1 1 1 2 2 a01 1 1 2 2 2 1 a10 1 1 1 1 a11 2 2 1 3 1 1 2 Jaccard
⅔ ½ ¼ ¾ ¼ ⅓ ⅔ We obtain the same diagnosis without storing any data related to the individual test cases
CPU time constraints
constraints (e.g., update display area during vertical blank)
every block / function / etc. executed: unavoidable, but affordable
Spectrum cache
Spectrum currently being recorded Spectrum currently being processed during idle time Tests / transactions should allow sufficient idle time to prevent overflow of the spectrum cache
Concurrency
modifying different bits in the same word lead to incorrect results
– Critical section per update (time) – Use a word per block/function/etc. (space) – Record spectra per thread (time + space)
Trade-offs
Time Space Small cache Idle time in tests critical sections bit encoded spectra Large cache Fast tests atomic updates word encoded spectra
Further applications
themselves [Reps97]
– Obtain spectra for nominal behavior in a warming-up period – Generate a warning if previously unseen behavior is detected
appears to correlate with potentially dangerous situations
– Form of software rejuvenation [Huang95] – Requires recovery-oriented design
Related work
Delta Debugging [Zeller]:
initial state (input) of a passed run and a failed run that causes the failure of interest
– Maintain dependencies between variables to guarantee valid states
and repeat the search on the current state
states that helps to locate the fault
Related work
– Single failed run – Most similar passed run
Related work
DD + dynamic slicing [Gupta et al]:
influence the value of a variable at a point in the execution.
variable at a point in the execution.
– Forward slice of the minimal failure inducing input difference – Backward slice of the variables where the failure
Related work
X
faulty output
Related work
Model-based debugging
void f( int x ) { int z,y1,y2; 1. z = x+1; 2. y1 = z*2; 3. y2 = z+2; 4. printf( “y1=%d, y2=%2\n”, y1, y2 ); }
Related work
Model-based debugging
void f( int x ) { int z,y1,y2; 1. z = x+1; 2. y1 = z*2; 3. y2 = z+2; 4. printf( “y1=%d, y2=%2\n”, y1, y2 ); } hi: statement i contributes to the intended behavior of the program
h1⇒zOK h2⇒(zOK⇒y1OK) h3⇒(zOK⇒y2OK)
Related work
Model-based software debugging
dependency-based models is equivalent to slicing
SFL vs. Related Work
135Conclusion
method, SFL is
– cheap – practicable, and – appears to work in practice
– Diagnosis-based Approach to Test Sequencing – Automatic Recovery from Software Failures [QSIC10]
Help me! I’ve got a problem. We might lose the picture for a while… No Way, Not now! They’re about to score! I’ll recover for you!
Questions