Incremental Symbolic Execution Sarmad ¡Makhdoom ¡ 2012-‑03-‑0019 ¡ ¡ Supervisors ¡ Dr ¡Junaid ¡Haroon ¡Siddiqui ¡ Dr ¡Arif ¡Zaman ¡
Introduction • What ¡is ¡soAware ¡tesCng? ¡ ▫ It’s ¡all ¡about ¡finding ¡bugs ¡ • Why ¡do ¡we ¡need ¡to ¡test? ¡ ▫ Bugs ¡fixing ¡cost ¡is ¡increasing ¡ • How ¡do ¡we ¡test? ¡ ▫ StaCc ¡vs ¡Dynamic ¡analysis ¡ • Famous ¡failures ¡ ¡ ▫ Ariane ¡5 ¡Explosion ¡($500m) ¡ [h#p://www.ima.umn.edu/~arnold/disasters/ariane.html] ¡ ▫ NASA ¡Mars ¡Climate ¡Orbiter ¡($125m) ¡ [h#p://mars.jpl.nasa.gov/msp98/news/mco991110.html] ¡
Outline • Background ¡ • MoCvaCon ¡ • Technique ¡ • EvaluaCon ¡ • Related ¡Work ¡ • Conclusion ¡
Background
Concrete Execution x=1 ¡ y=3 ¡ z=2 ¡ int ¡mid(int ¡x, ¡int ¡y, ¡int ¡z) ¡{ ¡ ¡ ¡if ¡(x<y){ ¡ ¡ ¡ ¡ ¡if ¡(y<z){ ¡ Concrete ¡test ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡y; ¡ {} ¡ ¡ ¡ ¡}else{ ¡ ¡ ¡ ¡ ¡ ¡ ¡if ¡(x<z) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡z; ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡ x < y ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡x; ¡ ¡ ¡ ¡ ¡} ¡ ¡ ¡}else{ ¡ x < y, y ≥ z ¡ ¡ ¡ ¡if ¡(x<z){ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡x; ¡ ¡ ¡ ¡ ¡}else{ ¡ ¡ ¡ ¡ ¡ ¡ ¡if ¡(y<z) ¡ x < z ≤ y ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡z; ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡y; ¡ ¡ ¡ ¡ ¡} ¡ ¡ ¡} ¡ } ¡
Symbolic Execution Demo int ¡mid(int ¡x, ¡int ¡y, ¡int ¡z) ¡{ ¡ {} {} ¡ ¡if ¡(x<y){ ¡ ¡ ¡ ¡ ¡if ¡(y<z){ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡y; ¡ ¡ ¡ ¡ ¡}else{ ¡ x < y x < y x ≥ y x ≥ y ¡ ¡ ¡ ¡ ¡ ¡if ¡(x<z) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡z; ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡x; ¡ x < y, y < z x < y, y < z x < y, y ≥ z x < y, y ≥ z x ≥ y, x < z x ≥ y, x < z x ≥ y, x ≥ z x ≥ y, x ≥ z ¡ ¡ ¡ ¡} ¡ ¡ ¡}else{ ¡ ¡ ¡ ¡ ¡if ¡(x<z){ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡x; ¡ x < z ≤ y x < z ≤ y z ≤ x < y z ≤ x < y y < z ≤ x y < z ≤ x z ≤ y ≤ x z ≤ y ≤ x ¡ ¡ ¡ ¡}else{ ¡ ¡ ¡ ¡ ¡ ¡ ¡if ¡(y<z) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡z; ¡ ¡ ¡ ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡return ¡y; ¡ ¡ ¡ ¡ ¡} ¡ ¡ ¡} ¡ x=1 ¡ Path ¡condiCon ¡ } ¡ Concrete ¡Test ¡ Solve ¡ y=3 ¡ (feasible) ¡ z=2 ¡
Symbolic Execution [CACM’76] • Concrete ¡execuCon ¡fixes ¡input ¡variables ¡and ¡exercises ¡one ¡path ¡per ¡ input ¡ • Symbolic ¡execuCon ¡uses ¡symbols ¡with ¡no ¡restricCons ¡other ¡than ¡type ¡ • Both ¡branches ¡of ¡every ¡condiCon ¡in ¡the ¡program ¡are ¡explored ¡ • A ¡path ¡condiCon ¡is ¡built ¡for ¡every ¡path ¡and ¡contains ¡the ¡constraints ¡ required ¡to ¡take ¡this ¡path ¡ “Symbolic ¡ExecuFon ¡and ¡Program ¡TesFng” ¡– ¡CACM ¡1976 ¡
Ranged Symbolic Execution [OOPSLA’12] {} x > y x ≥ y x < y, y < z x < y, y ≥ z x ≥ y, x < z x ≥ y, x ≥ z x < z ≤ y z ≤ x < y y < z ≤ x z ≤ y ≤ x x=1 ¡ explored ¡ unexplored ¡ y=3 ¡ z=2 ¡ Scaling ¡symbolic ¡execuFon ¡using ¡ranged ¡analysis. ¡ACM-‑OOPSLA ¡2012 ¡
Ranged Symbolic Execution [OOPSLA’12] {} x > y x ≥ y x < y, y < z x < y, y ≥ z x ≥ y, x < z x ≥ y, x ≥ z x < z ≤ y z ≤ x < y y < z ≤ x z ≤ y ≤ x x=1 ¡ x=2 ¡ Skip ¡ Skip ¡ Explore ¡ y=3 ¡ y=1 ¡ z=2 ¡ z=3 ¡ Scaling ¡symbolic ¡execuFon ¡using ¡ranged ¡analysis. ¡ACM-‑OOPSLA ¡2012 ¡
KLEE [OSDI’08] • An ¡open ¡source ¡symbolic ¡executor ¡based ¡on ¡LLVM ¡ ▫ Generate ¡high ¡coverage ¡test ¡cases ¡ • LLVM ¡(Low ¡Level ¡Virtual ¡Machine) ¡ ▫ Converts ¡ code ¡into ¡ bytecode ¡ • Constraint ¡Solving ¡ L L LLVM C code bytecode ▫ STP ¡(fast ¡SMT ¡solver) ¡ V M x ¡= ¡-‑2 ¡ SYMBOLIC K L E E x ¡= ¡1234 ¡ ENVIRONMENT x ¡= ¡3 ¡ x ¡ ≥ ¡0 ¡ x ¡= ¡3 ¡ x ¡ ≠ ¡1234 ¡ Constraint Solver (STP) KLEE: ¡Unassisted ¡and ¡AutomaFc ¡GeneraFon ¡of ¡High-‑Coverage ¡Tests ¡for ¡Complex ¡Systems ¡Programs, ¡OSDI ¡2008 ¡
Incremental Testing X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡ Test ¡Suite ¡ ModificaCon ¡ Code ¡v1.0 ¡ Code ¡v1.1 ¡
Incremental Testing X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡ Test ¡Suite ¡ ModificaCon ¡ Code ¡v1.0 ¡ Code ¡v1.1 ¡
Incremental Testing X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡ X ¡X ¡X ¡X ¡X ¡ Test ¡Suite ¡ Test ¡Suite ¡ ModificaCon ¡ Code ¡v1.0 ¡ Code ¡v1.1 ¡
Incremental Testing X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡X ¡ X ¡X ¡X ¡X ¡X ¡ Test ¡Suite ¡ Test ¡Suite ¡ Final ¡Test ¡Suite ¡ ModificaCon ¡ Code ¡v1.0 ¡ Code ¡v1.1 ¡
Motivation
Motivation • All ¡execuCon ¡paths ¡may ¡be ¡very ¡large ¡and ¡may ¡not ¡be ¡of ¡interest ¡ • Only ¡execuCon ¡paths ¡that ¡differ ¡between ¡two ¡versions ¡are ¡of ¡interest ¡ • Test ¡only ¡program ¡changes ¡not ¡the ¡whole ¡program ¡ • Incremental ¡symbolic ¡execuCon ¡is ¡useful ¡in ¡bug ¡finding ¡and ¡regression ¡ tesCng ¡
Technique
Key Ideas • Majority ¡of ¡search ¡space ¡is ¡invalid ¡ • Solving ¡path ¡condiCons ¡is ¡expensive ¡ • Comparing ¡and ¡validaCng ¡of ¡path ¡condiCons ¡is ¡cheap ¡ • One ¡way ¡is ¡to ¡compare ¡both ¡CFGs ¡ [DiSE’11] ¡ ▫ StaCc ¡analysis ¡ ▫ Inexact ¡(in-‑depth ¡node ¡changes ¡are ¡problemaCc) ¡ ¡ ¡ ▫ Scalability ¡issues ¡
Technique • Full ¡symbolic ¡execuCon ¡with ¡iniCal ¡version: ¡ ▫ Generates ¡inputs ¡for ¡each ¡disCnct ¡path ¡ • Incremental ¡symbolic ¡execuCon ¡on ¡subsequent ¡versions ¡ ▫ On ¡exploraCon ¡divide ¡tests ¡based ¡on ¡each ¡branch ¡condiCon ¡ ▫ Compare ¡and ¡validate ¡tests ¡ If ¡test ¡is ¡valid, ¡don’t ¡use ¡solver ¡ If ¡test ¡is ¡invalid, ¡explore ¡the ¡program ¡for ¡new ¡states ¡
Algorithm Algorithm ¡to ¡explore ¡new ¡ranges ¡and ¡not ¡solving ¡the ¡present ¡ path ¡condiCons ¡in ¡the ¡new ¡program ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ t 1 , ¡t 2 , ¡t 3 , ¡t 4 ¡ ¡ ¡ t 1 , ¡t 2 , ¡t 3 ¡ t 1 , ¡t 2 ¡ t 1 ¡ Evaluate ¡& ¡Compare ¡ P ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ t 1 , ¡t 2 , ¡t 3 , ¡t 4 ¡ ¡ ¡ t 1 , ¡t 2 , ¡t 3 ¡ t 1 , ¡t 2 ¡ t 2 ¡ Evaluate ¡& ¡Compare ¡ P ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ Ï ¡ Invalidates ¡ ¡ ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ Ï ¡ Invalidates ¡ ¡ ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ t 5 , ¡t 6 , ¡t 7 , ¡t 8 ¡ ¡ ¡ t 5 , ¡t 6 , ¡t 7 ¡ t 6 , ¡t 7 ¡ t 8 ¡ Evaluate ¡& ¡Compare ¡ P ¡
Technique t 1 , ¡t 2 , ¡t 3 , ¡t 4 , ¡t 5 , ¡t 6 ,…, ¡t n ¡ ¡ ¡ Range ¡need ¡to ¡be ¡explored ¡
What ¡if ¡there ¡is ¡some ¡infeasible ¡path ¡become ¡feasible ¡now? ¡ ”New ¡code ¡in ¡two ¡consecuFve ¡valid ¡test ¡cases” ¡
Explanation Change ¡ Infeasible ¡area ¡ Ï ¡ Valid ¡Test ¡1 ¡ Valid ¡Test ¡2 ¡
Evaluation
Recommend
More recommend