Declarative Testing via Dependency Injection

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current software testing methods are cumbersome and lack a mechanism for defining test values in a declarative manner, especially for combinatorial testing, leading to increased costs and residual errors due to limited testing capabilities in budget-constrained environments.

Innovation Solution

The implementation of declarative testing using dependency injection, where annotations in the source code declare injection points and test values, allowing for the creation and execution of tests in a configuration phase, simplifying the testing process and enabling combinatorial testing.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If manual test case definition is used, then test customization is flexible, but testing cost increases and efficiency decreases

Engineering Contradiction:
Improvetesting efficiencyVSAvoidtest definition complexity
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The patent replaces manual mechanical test case definition with automated declarative testing. The test framework automatically generates test cases from high-level test descriptions and combinatorial design, eliminating the need for manual duplication of test code while maintaining flexibility through declarative syntax.

Inventive Principle:
Principle #28Mechanics substitution (Replace mechanical system)

Solution Approach 2:

The patent changes the parameter of test definition from imperative programming style to declarative specification style. Instead of writing executable test code, users specify test parameters and constraints declaratively, and the framework automatically generates the test cases, reducing complexity while improving efficiency.

Inventive Principle:
Principle #35Parameter changes

2Reliability

If exhaustive testing is performed, then testing completeness improves, but cost increases and time consumption increases

Engineering Contradiction:
Improvetesting completenessVSAvoidtesting time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent applies partial combinatorial testing instead of exhaustive testing. By focusing on the most critical interactions between parameters using combinatorial design algorithms, the framework achieves high testing completeness for the most important scenarios without requiring time-consuming exhaustive coverage of all possible input combinations.

Inventive Principle:
Principle #16Partial or excessive action

Solution Approach 2:

The patent performs preliminary combinatorial design to identify the most critical test cases before execution. The framework analyzes parameter relationships and pre-determines the optimal test coverage strategy, allowing efficient testing of the most important scenarios without unnecessary time expenditure on less critical cases.

Inventive Principle:
Principle #10Preliminary action

3Reliability

If test code is manually duplicated across test suites, then test coverage can be achieved, but development time increases and maintainability decreases

Engineering Contradiction:
Improvetest coverageVSAvoiddevelopment time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent creates universal test templates and frameworks that can be applied across multiple test scenarios. Instead of manually duplicating test code for each scenario, users define a single universal test structure with parameterized inputs, and the framework generates variations for different test cases, achieving comprehensive coverage without repeated development effort.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Solution Approach 2:

The patent uses automated code generation to create test cases by copying and varying a template structure. The framework generates test case code automatically based on declarative specifications and combinatorial designs, eliminating manual copying of test code while maintaining comprehensive test coverage across different scenarios.

Inventive Principle:
Principle #26Copying

4Reliability

If declarative test value definition is implemented, then testing effectiveness improves, but framework complexity increases

Engineering Contradiction:
Improvetesting effectivenessVSAvoidframework complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent introduces an intermediary layer between the user's declarative test specifications and the actual test execution. This intermediary framework handles the complexity of parsing declarative definitions, generating combinatorial test cases, and executing tests, allowing users to define tests simply while the framework manages the underlying complexity.

Inventive Principle:
Principle #24Intermediary (Mediator)

Data Source

PatentUS9208064B2Declarative testing using dependency injection
Publication Date: 2015.12.08 RED HAT INC
  • US9208064B2 patent drawing
  • US9208064B2 patent drawing
  • US9208064B2 patent drawing

AI summary

Methods and systems for declarative testing using dependency injection are described. In one embodiment, a computing system inspects a first annotation that declares an injection point in source code of a test subject and a second annotation that declares a set of test values to be injected at the injection point. The first and second annotations are metadata in an input domain and are added in a designated place in the source code. The computing system executes a test runner that creates a set of one or more tests during a configuration phase based on the inspection of the source code, including the first and second annotations. Each of the set of tests includes one of the test values injected at the injected point as declaratively provided by the second annotation. The set of tests are to be executed during a run phase.