Continuous Incremental Software Checking for Robotic and Satellite Missions
20 likes | 142 Vues
This work presents a framework for continuous incremental software checking tailored for robotic and satellite missions, emphasizing invariant generation and likely invariant code checking. By integrating automatic test generation, execution, and systematic analysis within a development environment, it aims to shorten the software development cycle, reduce costs, and enhance reliability. Unlike traditional methods where testing is a separate phase, this approach merges coding and testing, allowing for rapid feedback and iterative fixes, ultimately improving mission outcomes for ventures such as SPHERES on the ISS.
Continuous Incremental Software Checking for Robotic and Satellite Missions
E N D
Presentation Transcript
Continuous Incremental Software Checking for Robotic and Satellite Missions – CorinaPasareanu, CMU/NASA Ames Target Applications Invariant Generation Likely Invariants Code (Android) + JML Specs Systematic Analysis JUnit Tests Test Generation Test Execution User SymExe Tree Fail Pass Quick Fixes • Insert pre-condition • Modify code • Modify test Integrated Development Environment • Goals: • Shorten development cycle for flight SW; Reduce cost; Increase reliability • Current SW development cycle: • Coding and testing performed as separate activities • Testing is costly; performed after code development • Continuous Incremental Checking: • Testing performed during code development • Excess workstation cycles used to continuously generate and run tests and to suggest repairs and invariants • Seamless integration in coding environment familiar to developers SPHERESon ISS • Features: • Automatic test generation and execution • Automatic program and test repair • Rapid feedback to user: test failures, code and test fixes, invariants NASA PhoneSat
Symbolic execution tree: x: X, y: Y, d: D Path condition PC: true [1:] Example code: x: X, y: Y, d: D+1 PC: true 1: d=d+1; 2: if (x > y) 3: return d / (x-y); else 4:return d / (y-x); [2:] [2:] PC: X>Y PC: X<=Y [4:] [4:] [3:] PC: X<=Y& Y-X!=0 return: (D+1)/(Y-X) PC: X<=Y& Y-X=0 Div by zero! PC: X>Y return: (D+1)/(X-Y) Solve path conditions → test inputs