Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • Meet DCRouter
  • Glossary
  • Part 0: What Verification Is8
  • Part 1: What Can Go Wrong11
  • Part 2: Specifications as Checkable Rules8
  • Part 3: Observability and Controllability7
  • Part 4: Stimulus11
  • Part 5: Checking11
  • Part 6: Coverage10
  • Part 7: Formal and Simulation10
  • Part 8: Verification Levels and Reuse8
  • Part 9: Planning and Risk9
    • The Verification Plan
    • Feature Extraction
    • Risk-Based Prioritisation
    • Estimating Effort
    • Metrics and Their Traps
    • Regression Strategy
    • Managing Change
    • Planning DCRouter
    • Drills: Planning and Risk
  • Part 10: Emulation and Prototyping8
  • Part 11: Post-Silicon Validation8
  • Part 12: Bug Economics8
  • Part 13: Debug7
  • Part 14: Sign-Off7
  • Part 15: Verification in Context8
  • Part 16: Case Studies5
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 9: Planning and Risk
  1. Topics
  2. First Principles of Verification Strategy
  3. Part 9: Planning and Risk
  4. Regression Strategy

Part 9 · Planning and Risk · Senior (S)

Regression Strategy

A regression is the set of tests re-run as the design changes, so that new bugs and reintroduced old ones are caught quickly. Its design is a trade between speed and thoroughness: a fast check on every commit, broader runs nightly, everything weekly. How to tier a regression, keep it fast, handle failures and flaky tests, and what DCRouter's regression would look like.

On this page

    Note

    Level: Senior (S) · Answers: What should we verify first, and how much?

    Before this: Metrics and Their Traps, Seeds and Regressions

    A designer fixes a typo in DCRouter's arbiter and commits. The full set of tests from this course (directed, error injection, back-pressure, the random hunts and their Bug Zoo runs, the formal proofs) takes over an hour on a laptop. Nobody waits an hour per commit, so the designer runs nothing, and the next morning's run shows that the typo fix broke round-robin rotation. Three other commits landed overnight; which one did it?

    How do you design a regression that catches breakage quickly without taking forever?

    The obvious answer, and why it breaks

    One obvious answer is "run everything, always": thorough, and so slow that people stop running it, failures pile up between runs, and finding the commit that broke something becomes its own project. The other, "run a few smoke tests", is fast and misses most breakage. The answer is tiers: different sets of tests at different frequencies, each sized for when it runs.

    The idea: tiers by frequency

    Tier

    When

    Budget

    Contents

    Pre-commit or commit check

    Every change, before or as it lands

    Minutes

    Smoke tests, quick directed tests, fast formal checks, lint

    Nightly

    Every night

    Hours

    All directed tests, a few seeds of every random test, all formal proofs

    Weekly or milestone

    Weekly, and before milestones

    A day or more

    Many seeds of every random test, long tests, full coverage merge, mutation or bug-seeding runs

    On demand

    When a feature changes

    As needed

    Deep runs focused on the changed feature

    DCRouter's regression

    Tier

    DCRouter contents

    Commit check (minutes)

    Smoke test (lesson 0.7), directed tests (4.1), the formal proof of FIFO, arbiter and credit properties (7.9, seconds)

    Nightly

    Error injection, back-pressure, checked and covered hunts with fresh seeds; merged coverage

    Weekly

    Twenty or more seeds of each random test; the full Bug Zoo runs against the main testbenches, as a check that the testbench still catches every planted bug

    The Bug Zoo runs are worth noting: they test the testbench, not the design. A weekly run that suddenly catches 22 of 24 instead of 24 means a check was weakened by some change.

    Keeping it fast and useful

    • Order tests by value: those that fail most often or cover most, first (Part 12).

    • Select by change: run more of the tests that exercise what changed.

    • Kill redundancy: tests that never fail and cover nothing unique are candidates for the weekly tier.

    • Triage every failure the same day: a failure left a week becomes several overlapping failures.

    • Treat flaky tests as bugs: a test that fails intermittently is either a testbench bug or a rare design bug (lesson 4.9); never ignore it.

    • Log seeds and builds: every failure reproducible exactly.

    How real teams run regressions

    Practice

    Purpose

    Continuous integration with tiered regressions

    Breakage caught within minutes or hours, with a short list of suspect changes

    Regression ranking and test selection

    Most bugs found per simulation hour

    Automatic bisection of failures to a commit

    The breaking change found without human search

    Dashboards of failures by first-seen commit and owner

    Every failure owned

    What breaks

    A team (illustrative) had a strong nightly regression and no commit check. Each morning brought ten to thirty failures from a dozen overnight commits, and engineers spent their mornings working out whose change caused what. A ten-minute commit check catching the most common breakage would have pointed at a single change each time, before others were stacked on top.

    Why this matters

    Senior lens. Design the regression as tiers sized for when they run, measure it by bugs caught per hour and time-to-blame, and protect the fast tier fiercely. Include runs that test the testbench, such as planted bugs, so a weakened check shows up as a number that drops.

    Interview

    Asked: "How do you design a regression?"

    Weak answer: Run all the tests every night.

    Strong answer: In tiers sized for when they run. A commit check of minutes: smoke tests, quick directed tests, fast formal proofs. A nightly run: all directed tests, a few fresh seeds of every random test, all proofs, merged coverage. A weekly run: many seeds, long tests, mutation or planted-bug runs that check the testbench itself. I order and select tests by value and by what changed, triage every failure the same day, treat flaky tests as bugs, log seeds for reproduction, and bisect failures to a commit automatically.

    Follow-ups: (1) What goes in the commit check? (2) How do you handle a flaky test?

    Check yourself Why do DCRouter's Bug Zoo runs belong in the weekly tier?

    They take a long time (24 builds per testbench) and they check the testbench's strength rather than the design, which changes slowly; a drop in the catch count flags a weakened check.

    Check yourself Why does a commit check reduce debug time even if it misses many bugs?

    The bugs it does catch are pinned to a single change immediately, instead of being found overnight among many changes.

    Key takeaways

    • Tier the regression: minutes per commit, hours nightly, a day weekly.

    • Order and select tests by value and by what changed; triage failures the same day.

    • Treat flaky tests as bugs, log seeds, and include runs that test the testbench itself.

    Keep going

    Next: Lesson 9.7, Managing Change. Late changes, bug fixes and re-verification.

    Related topics

    • Part 9 overview: Planning and Risk

    Previous

    95 / 160

    Next: Managing Change

    Up next

    Up nextManaging Change

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • The Verification Plan
    • Feature Extraction
    • Risk-Based Prioritisation