Abstract:Model checking is a fundamental technique for verifying finite state concurrent systems. Traditionally, model designs were initially created to facilitate the application of model checking. This process, representative of Model Driven Development (MDD), involves generating an equivalent code from a given model which is verified before implementation begins. However, this approach is considerably slower compared to agile development methods and lacks flexibility in terms of expandability and refactoring. We have proposed "CodoMo: Python Code to Model Generator for pyModelChecking." This tool automates the transformation of a Python code by an AST static analyzer and a concolic testing tool into intermediate models suitable for verification with pyModelChecking, bridging the gap between traditional model checking and agile methodologies. Additionally, we have implemented a multiprocess approach that integrates the execution of PyExZ3 with the generation of Kripke structures achieving greater work efficiency. By employing CodoMo, we successfully verified a Tello Drone programming with gesture-based image processing interfaces, showcasing the tool's powerful capability to enhance verification processes while maintaining the agility required for today's fast-paced development cycles.
What problem does this paper attempt to address?
The problem that this paper attempts to solve is the incompatibility between traditional model - driven development (MDD) methods and agile development methods, especially the challenges encountered when applying model - checking techniques in computer vision systems. Specifically:
1. **Problems of speed and flexibility in traditional model - driven development (MDD)**: Traditional MDD methods create models and perform verification at the early stage of system development. Although this method can ensure the correctness of the system, it is slow and lacks flexibility, and it is difficult to adapt to the rapidly changing requirements in agile development.
2. **Challenges in applying model - checking in actual systems**: Model - checking is an automatic verification technique used to verify finite - state concurrent systems, but in practical applications, it faces problems such as the state - explosion problem and the mismatch with the agile development process.
3. **Integrating model - checking and agile development**: How to combine the precise model - checking techniques with the flexibility required by agile development to improve development efficiency and ensure the correctness and reliability of software is the core problem of this paper.
To solve these problems, the author proposes the "CodoMo" tool, which aims to bridge the gap between traditional model - checking and agile development by automating the conversion from Python code to an intermediate model. CodoMo uses an abstract syntax tree (AST) static analyzer and a symbolic execution tool (such as PyExZ3) to convert Python code into an intermediate model suitable for verification with pyModelChecking, and improves work efficiency through a multi - process method. In addition, CodoMo has been successfully applied to the gesture - control programming of Tello drones, demonstrating its powerful verification ability in complex systems.
### Formula representation
The formulas involved in the paper are mainly concentrated on the representation of CTL* logic. The following are the relevant formulas and their explanations:
- **CTL* state formulas**:
- \( p\in AP \): Atomic proposition.
- If \( f \) and \( g \) are state formulas, then \( \neg f \), \( f\vee g \), \( f\wedge g \), \( f\rightarrow g \) are also state formulas.
- If \( f \) is a path formula, then \( E f \) and \( A f \) are state formulas.
- **CTL* path formulas**:
- Every state formula is a path formula.
- If \( f \) and \( g \) are path formulas, then \( \neg f \), \( f\vee g \), \( f\wedge g \), \( X f \), \( G f \), \( F f \), \( f U g \), \( f R g \) are path formulas.
- **Kripke structure**:
- A Kripke structure is defined as an ordered quadruple \( M:=\langle S, R, P, S_0\rangle \), where:
- \( S \) is a finite set of states.
- \( R\subseteq S\times S \) is a binary relation between states, representing possible state transitions.
- \( P:S\rightarrow 2^{AP} \) is a function for assigning atomic propositions to states.
- \( S_0\subseteq S \) is a set of initial states.
These formulas and definitions help describe the working principle and verification process of the CodoMo tool.