Test Component Factorization for Build System Efficiency

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional build systems face inefficiencies in large software projects due to over-testing and storage overhead from metadata, leading to performance issues and false positives during component-level regression testing.

Innovation Solution

The factorization of test components across multiple builds to improve performance metrics, reducing over-testing and the need for additional metadata, by iteratively identifying and evaluating different factorizations of test components to optimize testing speed, complexity, and reliability.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If component-level regression testing is performed using conventional build systems, then testing coverage is maintained, but testing efficiency deteriorates due to over-testing

Engineering Contradiction:
Improvetesting coverageVSAvoidtesting efficiency
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The patent segments test components into smaller units organized in a dependency graph structure. Each test component is divided into testable units with defined dependencies on working components. This segmentation allows the build system to execute only the specific test units that depend on changed working components, rather than executing all test components, thereby reducing over-testing while maintaining coverage.

Inventive Principle:
Principle #1Segmentation

2Measurement precision

If additional metadata is stored to enable fine-grained dependency tracking, then testing precision is improved, but storage and processing overhead increases

Engineering Contradiction:
Improvedependency tracking precisionVSAvoidmetadata storage overhead
Core Design Contradiction:
Measurement precisionVSQuantity of substance

Solution Approach 1:

The patent makes the build dependency graph serve multiple functions: it tracks dependencies for regression test selection, identifies impacted test components, and guides execution decisions. By reusing the existing build dependency graph structure and metadata that already exists in conventional build systems, the patent avoids creating separate metadata structures, thereby achieving fine-grained dependency tracking without additional storage overhead.

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

3Reliability

If all test components are executed to ensure comprehensive testing, then testing reliability is improved, but build time increases

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

Solution Approach 1:

The patent extracts and executes only the necessary test components from the full test suite. By analyzing the dependency graph to identify which test components are actually impacted by changes in working components, the system extracts and runs only those specific test components, excluding unrelated tests. This extraction approach maintains testing reliability for changed code while significantly reducing build time by avoiding execution of unaffected tests.

Inventive Principle:
Principle #2Taking out (Extraction)

Data Source

PatentUS10241904B2Test components factorization in a build system
Publication Date: 2019.03.26 MICROSOFT TECHNOLOGY LICENSING LLC
  • US10241904B2 patent drawing
  • US10241904B2 patent drawing
  • US10241904B2 patent drawing

AI summary

The factorization of test components when performing component-level regression testing in iterative builds of a computing system that consists of many working components. Performance metrics for test components are maintained across multiple builds of the computing program. To perform factorization, multiple factorings of a test component are identified and evaluated until a suitable improvement in the maintained performance metric for each corresponding test component is achieved (e.g., via simulation). This may be performed, across multiple of the test components. This process may be iterated through such that the set of test components being factored and evaluated in a subsequent iteration may in fact be a test component created by factorization in a prior iteration. The net result is that the factorization achieves improvement in performance metrics of the test components.