Modern QA2026AI vs Dedicated Combinatorial Tools — tiles
Log inJoin
27 / 87 · 02 AI-Augmented Test Design · Combinatorial Test Suite Generation← prev⊞ allnext →☰ Read as one page

5.4AI vs Dedicated Combinatorial Tools

Approach Best For Limitation
AI-generated pairwise Quick exploration, small parameter spaces (5-7 params) Not mathematically optimal for large spaces
PICT (Microsoft) Large parameter spaces (10+ params), provable coverage Requires installation and configuration
ACTS (NIST) Research-grade n-way coverage with constraints Java dependency, steeper learning curve
AI + PICT hybrid AI identifies parameters and constraints, PICT generates combos Extra setup, but most rigorous

The AI + PICT Hybrid Workflow

This is the most rigorous approach and worth mentioning in interviews:

Step 1: Ask AI to identify all relevant parameters and their values
        from the specification or requirements document.

Step 2: Ask AI to identify constraints (invalid combinations that
        should be excluded, e.g., "SAML auth is only available for
        Enterprise accounts").

Step 3: Generate PICT model file from AI output:
# registration.pict (generated by AI, verified by human)
Browser:  Chrome, Firefox, Safari, Edge
OS:       Windows, macOS, Linux
Language: English, Spanish, Japanese
Account:  Free, Pro, Enterprise
Auth:     EmailPassword, GoogleSSO, SAML

# Constraints (AI-identified)
IF [Auth] = "SAML" THEN [Account] = "Enterprise";
IF [OS] = "macOS" THEN [Browser] <> "Edge";
Step 4: Run PICT to generate the optimal test suite:
        $ pict registration.pict > test_combinations.tsv

Step 5: Ask AI to convert the TSV into executable test code
        matching your framework and style.

Converting Combinatorial Tables to Test Code

import pytest
import csv

def load_pairwise_tests(filepath: str) -> list[dict]:
    """Load pairwise test cases from a TSV file."""
    with open(filepath) as f:
        reader = csv.DictReader(f, delimiter='\t')
        return list(reader)

PAIRWISE_TESTS = load_pairwise_tests("test_combinations.tsv")

class TestRegistrationCombinatorial:
    """Pairwise combinatorial tests for user registration."""

    @pytest.mark.parametrize("combo", PAIRWISE_TESTS,
        ids=[f"combo-{i}" for i in range(len(PAIRWISE_TESTS))])
    def test_registration_combination(self, browser_driver, combo):
        """Each pairwise combination should either succeed or fail gracefully."""
        driver = browser_driver(
            browser=combo["Browser"],
            os=combo["OS"],
            language=combo["Language"]
        )

        # Navigate to registration
        driver.navigate("/register")

        # Fill form based on combination
        driver.select_account_type(combo["Account"])
        driver.select_auth_method(combo["Auth"])

        # Assert: registration either succeeds or shows a clear error
        # (no crashes, no blank pages, no 500 errors)
        assert driver.current_url in ["/dashboard", "/register"]
        if driver.current_url == "/register":
            assert driver.find_element(".error-message").is_displayed()