wikillm

Concept · 1 paper · updated 2026-10-25

Fuzz testing

Fuzz testing searches for inputs that make a system fail by mutating candidates and keeping those that expose new failures. This page covers simulation-based fuzzing of driving software, where a candidate is a traffic scenario. One card so far: a genetic fuzzer with a learned violation score, author-reported to beat three baselines on one system and one map.

testingsimulation-testingautonomous-drivinggenetic-algorithm

Markdown3 min read

AI-compiled overview, updated 2026-10-25, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

Overview

Fuzz testing is a search over test inputs. The system under test is run on a candidate input, the run is scored for signs of failure, and promising inputs are kept and varied. For self-driving software the input is a whole scenario: routes for the ego vehicle and other traffic, pedestrians and weather 2412.13802 §4.2. The problem is that the space of scenarios is very large, so the question is which ones to run next 2412.13802 §1.

The shared core is a population of scenarios that is scored by feedback, selected, crossed over and mutated 2412.13802 §4.2. What differs between designs is the feedback, the score and how the variation is done. The only card in this wiki so far covers one such design; see Variants.

Variants

Simulation-feedback genetic fuzzing (SimADFuzz)

The fuzzer runs each scenario in CARLA and reads per-vehicle position, speed, acceleration and heading at every frame 2412.13802 §4.1 tab. 2. A Transformer encoder reads that sequence and outputs a violation score that is one of four fitness objectives. The others are a road-feature classifier (SDC-Scissor), the minimum distance to the ego vehicle and the count of unique violations. These are combined with NSGA-II 2412.13802 §4.2.1. The design changes two parts of earlier genetic fuzzers. The score reads the whole run instead of one aggregate, and mutation removes vehicles that are stuck or moving away from the ego vehicle instead of changing them at random 2412.13802 §3 alg. 1. Card: SimADFuzz: Simulation-Feedback Fuzz Testing for Autonomous Driving Systems.

Author-reported results use InterFuser on Town03 with 6-hour runs. It finds 35 unique violations, against 3 for AV-Fuzzer, 18 for DriveFuzz and 26 for TM-Fuzzer 2412.13802 §5.2.2 fig. 8. Its first collision comes at 17 minutes, against 21 minutes for TM-Fuzzer 2412.13802 §5.2.2.

When to use which

The choice depends on what you can run and what you can build. The only design with evidence here is the simulation-feedback one, so the rows below are about its constraints.

SituationUseWhy
You have a driving simulator that logs per-vehicle state each frame and a GPUSimulation-feedback genetic fuzzingThe method is built on that feedback 2412.13802 §4.1. The reference runs used CARLA at 20 Hz with 10-minute simulations 2412.13802 §5.1.2.
You can afford hours of simulation per campaign and want many distinct failuresSimulation-feedback genetic fuzzingThe comparison runs were 6 hours per fuzzer 2412.13802 §5.2.2. The gain over baselines is author-reported.
You cannot produce labelled training scenarios for a learned scoreNot covered by this pageThe learned score is trained on 1,000 scenarios of 2 minutes each 2412.13802 §5.1.2. No cited result shows the method without it.
You need results for a system other than InterFuser or on another mapRe-run before relying on the numbersOnly one system and one map were evaluated, and the authors list this as a threat to validity 2412.13802 §5.3.
You need the gain attributed to one componentNot answerable from this pageThe 3-hour ablation compares a random baseline with a combined setting 2412.13802 §5.2.1. The cited results do not isolate the learned score.

Implementation sketch

Language-agnostic outline of the loop in the simulation-feedback design. Where the variants differ, the choices are marked. Parameters are the paper's 2412.13802 §5.1.2.

Pseudocode
# Seed a population of random scenarios  [arxiv:2412.13802 §5.1.2]
population = [random_scenario() for _ in range(20)]

# Repeat until the time budget is spent  [arxiv:2412.13802 §5.2]
while not budget_spent():
    # Run each scenario and record per-vehicle states per frame  [§4.1]
    traces = [simulate(s) for s in population]

    # Score each scenario on several objectives, e.g. a learned score,
    # a road score, minimum distance and unique violations  [§4.2.1]
    scores = [objectives(s, t) for s, t in zip(population, traces)]

    # Make offspring; each operator runs with probability 0.5  [§5.1.2]
    children = []
    for pair in pick_parents(population, scores):
        # Swap routes between parents, keeping the ego route  [§4.2.2]
        child = crossover(pair)
        # Remove stuck or leaving NPCs and redraw the rest  [§4.2.3]
        child = mutate(child)
        children.append(child)

    # Keep the best of parents and children under NSGA-II  [§4.2.1]
    population = nsga2_select(population + children, scores)

# Report violations found in the run  [§4.3]
return unique_violations(population)

Variants differ in the objectives used (this design uses four 2412.13802 §4.2.1), in the mutation rule 2412.13802 §4.2.3, and in the run length 2412.13802 §5.2.

Contradictions

Within the one card so far: the 6-hour DriveFuzz margin is stated as 27 in the text and conclusion 2412.13802 §5.2.2 2412.13802 §7. The counts in the same results give 35 − 18 = 17 2412.13802 §5.2.2. Both sides are cited here and not resolved.

Papers

Source and license

Compiled from the papers listed on this page, all published under CC BY, CC BY-SA or CC0, with citations. See each paper's page for its authors and license.