Safeguard
Security Guides•

How do you test a vulnerability scanner in a proof of concept?

Test a scanner stage by stage with a project you know: seeded components, known advisories, a withdrawn record, a fix change and a rescan. Use this plan.

Safeguard Security Team
4 min read

To test a vulnerability scanner in a proof of concept, use a project you understand and check each pipeline stage on purpose: seed known components, confirm matching, inspect enrichment, test prioritization, read the reports, and run a fix through to a clean rescan. Judge the tool on what it explains, not on how many findings it prints.

Prepare a test project

Pick one repository you know well, and prepare a short answer key before scanning:

  • Its real dependency list, direct and transitive, from the lockfile.
  • Two or three components you know have published advisories.
  • One vendored or copied library with no manifest entry.
  • One component you know is development-only.
  • One advisory that has since been withdrawn, if you can find one.

The answer key is the point. Without it you are comparing counts, which tells you little.

Test each stage

StageTestPass looks like
InventoryCompare the tool's component list with your answer keyEvery real component found; vendored code flagged or listed as unidentified
MatchingCheck the known advisories appear, and one clean package does notCorrect ecosystem, name and version range handling
MatchingCheck the withdrawn advisoryNot reported, or clearly marked
EnrichmentInspect severity, exploit and fix fieldsSource and version of each score shown
PrioritizationAsk why finding A ranks above BA reason you can read, with reachability and exploit data
ReportingExport in a machine format and a readable oneBoth are complete and agree
HandoffOpen a fix for one findingSpecific version, correct repository, reviewable change

For exports, check that the formats you need are supported. SARIF is the OASIS standard for static analysis results, and the OSV schema is a common format for advisory data.

Then test the awkward cases

  1. Run it twice. Results on unchanged code should match, with no finding flipping to new.
  2. Change nothing but wait. Rescan after a few days and see whether new advisories arrive without a rebuild.
  3. Break a path. Move a manifest and see whether the tool warns about the coverage change.
  4. Ask what it skipped. A good tool tells you what it could not read.
  5. Run the fix. Apply a suggested change, rebuild, rescan and check the finding closes.

Questions for the vendor

  • How often is advisory data refreshed, and can you see the data version on each result?
  • Which sources does it read, and how are aliases merged?
  • How does it treat an unidentifiable component?
  • Can reachability verdicts be inspected?
  • What can you export if you leave?

Score it honestly

Use a simple sheet: for each stage, record pass, partial or fail, with evidence. Weight stages by what you care about. A tool that is excellent at matching but cannot explain ranking may suit a team with strong triage staff, and poorly suit one without. Avoid a single combined score that hides the shape.

Keep the answer key, the scan outputs and your notes together, so the decision can be reviewed later.

Where Safeguard fits

Safeguard's free scan is an easy way to run a first test on a project you know, covering SBOM and dependency scanning, with reachability analysis, policies and gates available beyond that.

Quick check

How many findings should a good scanner report?

There is no right number. Judge accuracy against your answer key and look at how well each finding is explained.

Why include a vendored library in the test?

It shows how the tool handles components with no manifest entry, which is where many scans go quiet.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.