Symbolic Execution Tool for C++ Software Validation

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current software testing methods, such as regression testing, often fail to detect corner-case bugs and provide limited coverage, while existing symbolic execution tools for C++ are inefficient due to lack of good abstractions, fast solvers, and domain-specific handlers.

Innovation Solution

A symbolic execution and automatic test generation tool for C, C#, and C++ software that compiles programs into LLVM bytecode, uses customized low-level libraries, and implements efficient solvers for common data structures, along with domain-specific handlers to optimize processing and generate high-coverage test cases.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If symbolic execution tools are used for C++ software validation, then testing coverage is improved, but execution efficiency deteriorates due to lack of good abstractions, fast solvers, and domain-specific handlers

Engineering Contradiction:
Improvetesting coverageVSAvoidexecution efficiency
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The patent segments the C++ standard library into multiple abstraction levels (low-level libraries vs. standard library) and processes them differently during symbolic execution. Low-level libraries are executed concretely while standard library calls are handled symbolically, dividing the execution workload to improve efficiency while maintaining coverage.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The patent changes the execution mode parameter for different library levels - low-level libraries use concrete execution mode while standard libraries use symbolic execution mode. This parameter differentiation allows the system to optimize performance for critical sections while maintaining thorough testing coverage for higher-level abstractions.

Inventive Principle:
Principle #35Parameter changes

2Reliability

If exhaustive symbolic execution is performed on all input values, then bug detection capability is improved, but processing time increases significantly

Engineering Contradiction:
Improvebug detection capabilityVSAvoidprocessing time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent performs preliminary concrete execution of low-level library functions to establish baseline behavior and cached results before symbolic execution proceeds. This preliminary action reduces redundant symbolic analysis and accelerates the overall bug detection process while maintaining exhaustive coverage where needed.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The patent introduces an intermediary layer (low-level libraries) that bridges concrete execution and symbolic execution. This intermediary handles time-consuming operations concretely, acting as a buffer that reduces the symbolic execution burden and overall processing time while preserving bug detection capability through the symbolic layer.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Adaptability or versatility

If C++ programs are compiled and linked with standard libraries for symbolic execution, then program functionality is preserved, but execution speed deteriorates due to lack of optimization

Engineering Contradiction:
Improveprogram functionalityVSAvoidexecution speed
Core Design Contradiction:
Adaptability or versatilityVSSpeed

Solution Approach 1:

The patent segments the library ecosystem into standard C++ libraries (for functionality and adaptability) and customized low-level libraries (for speed optimization). This segmentation allows the system to maintain full program functionality through standard libraries while achieving execution speed improvements through optimized low-level implementations.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The patent creates customized copies of low-level library implementations that are optimized for symbolic execution performance. These copied and adapted low-level libraries maintain the same interface and functionality as standard libraries but are optimized for the symbolic execution context, improving execution speed without sacrificing functionality.

Inventive Principle:
Principle #26Copying

Data Source

PatentUS8869113B2Software architecture for validating C++ programs using symbolic execution
Publication Date: 2014.10.21 FUJITSU LTD
  • US8869113B2 patent drawing
  • US8869113B2 patent drawing
  • US8869113B2 patent drawing

AI summary

Particular embodiment compile a C++ program having one or more input variables to obtain bytecode of the C++ program; compile a C++ library to obtain bytecode of the C++ library; symbolically execute the bytecode of the C++ program and the bytecode of the C++ library, comprising assign a symbolic input to each input variable of the C++ program; determine one or more execution paths in the C++ program; and for each execution path, construct a symbolic expression that if satisfied, causes the C++ program to proceed down the execution path; and generate one or more test cases for the C++ program by solving the symbolic expressions.