Static analysis tools for embedded C and C++ (2026)
A practical comparison of SAST and static analysis tools for embedded software
We make one of these tools
Interpretica develops Visao, the static analyzer in its Midair platform. Visao is listed last in each table and profile, and marked as ours. We judge it by the same criteria as the others. Its standards coverage is narrower than that of the established vendors, and the page says where.
No static analyzer is the best choice for every embedded C or C++ project. The right tool depends on the job: finding defects, proving the absence of runtime errors, or producing compliance evidence for MISRA (the Motor Industry Software Reliability Association coding guidelines).
This page compares 11 tools by what their documentation says they do. Start with the shortlist below if that is all you need. Read the tool profiles and the pilot guide if you are about to buy.
Which tools to shortlist
Your main requirement
Prove absence of selected runtime errors
Start with
Polyspace Code Prover, Astrée
Why
Both are sound analyzers. They aim to prove that a class of runtime error cannot happen.
Enterprise C/C++ defect and security analysis
Start with
Coverity, CodeSonar, Klocwork
Why
Whole-program or interprocedural analysis, centralized triage and broad support for continuous integration and delivery (CI/CD).
MISRA and safety-compliance workflow
Start with
Perforce QAC, Parasoft C/C++test, Coverity, Klocwork
Why
Extensive coding-standard support, compliance reporting and qualification options.
Static analysis plus unit testing and coverage
Start with
Parasoft C/C++test
Why
Static analysis, unit testing, coverage, traceability and reporting are delivered as one C/C++ verification suite.
Large multi-branch or multi-variant codebases
Start with
Klocwork, Coverity, CodeSonar
Why
Built for centralized governance and analysis across large, changing codebases.
Source plus binary analysis
Start with
CodeSonar
Why
The product explicitly supports source, binary and mixed source-binary analysis.
Lower-barrier commercial adoption
Start with
PVS-Studio
Why
Broad IDE, build and CI integration with a practical defect-oriented workflow.
Free C/C++ analysis baseline
Start with
Cppcheck, Clang Static Analyzer
Why
Open-source tools that are straightforward to automate and useful alongside compiler warnings.
Project-specific rules and behavior checks
Start with
Visao (ours), plus the custom-rule features of the commercial suites
Why
Visao takes project detectors and function contracts as input. Coverity, Klocwork and others also let you write custom checkers.
Static analysis and SAST by the numbers
Seven figures from primary sources. They show why memory safety matters in C and C++, and why one static application security testing (SAST) tool is rarely enough.
-
~70%
For more than a decade, about 70% of the CVEs Microsoft assigned each year were memory safety defects. Most of that code was C and C++.
-
70% of 912
In a sample of 912 high and critical Chrome security bugs since 2015, about 70% were memory safety bugs in C and C++. About half of those are use-after-free.
-
76% → 24%
Memory safety bugs fell from 76% to 24% of Android vulnerabilities between 2019 and 2024 (the 2024 figure is a full-year projection). New code moved to memory-safe languages; the old C and C++ stayed.
-
7 of 25
Seven of the 25 entries in the 2025 CWE Top 25 are memory and pointer defects. C and C++ SAST tools look for all seven. They are out-of-bounds write (#5), use after free (#7), out-of-bounds read (#8) and NULL pointer dereference (#13). The other three are buffer overflows: classic (#11), stack-based (#14) and heap-based (#16).
Source: MITRE, 2025 CWE Top 25
-
143 + 16
The first edition of MISRA C:2012 has 143 rules and 16 directives. Amendments 1 and 2 raise that to 158 rules and 17 directives. Tools check rules and some directives in full or in part. The rest needs manual review.
-
10 years of SATE
In ten years of NIST Static Analysis Tool Exposition data, tools looked for different weaknesses and warning volumes varied widely. They overlapped much only in known classes such as buffer errors.
Source: NIST SP 500-326, SATE V report
-
7 agencies
In December 2023, CISA, the NSA, the FBI and agencies from Australia, Canada, New Zealand and the UK asked vendors to publish memory-safe roadmaps. They called memory safety bugs the most common type of disclosed vulnerability.
The Microsoft, Chrome and Android figures show how much memory safety matters in large C and C++ codebases. Agencies now expect a plan for it. The NIST data shows that analyzers disagree on what they look for. None of these figures measure how well any analyzer works.
Scope and methodology
We compared the tools from their documentation. We did not benchmark them side by side. We read public product pages, manuals and release notes from July 2026, and checked them again in October 2026. The list covers commercial, open-source, compliance and proof tools used for embedded C and C++.
The following rules were applied:
- A capability is marked as supported only when the vendor or project documentation states it.
- Coding-standard support is described at family level. Exact rule coverage, standard edition and licensing can differ by product version or module.
- We give no scores for accuracy, false-positive rate or speed. Those need the same codebase, configuration, hardware and acceptance criteria.
- "Best fit" describes product positioning and documented capabilities. It is not a universal ranking.
- Pricing is excluded because most enterprise vendors use project-specific quotes and package features differently.
Comparison at a glance
A documentation-based comparison of 11 commercial and open-source tools by analysis method, standards support, embedded workflow and best fit.
| Tool | Main category | Languages relevant to this comparison | Analysis emphasis | Best suited for |
|---|---|---|---|---|
| Coverity | Enterprise SAST and defect analysis | C/C++ plus a broad multi-language portfolio | Whole-codebase, path-sensitive defect and vulnerability analysis | Large organizations that need security, quality and compliance in one governed platform |
| Polyspace | Bug finding and formal verification | C/C++; separate Ada products | Bug Finder for defects and standards, Code Prover for proof of selected runtime-error absence | Embedded and regulated projects that need both finding and proof workflows |
| Klocwork | Enterprise SAST | C/C++ and several other languages, including Rust in current releases | Interprocedural analysis, differential analysis and centralized governance | Large, multi-branch, multi-variant and cross-compiler environments |
| CodeSonar | High-assurance SAST | C/C++ plus Java, C#, Go, Python, JavaScript, TypeScript, Kotlin, Rust and binary code | Abstract interpretation, symbolic execution, taint and memory modeling | Safety, security, legacy and third-party code analysis |
| Parasoft C/C++test | Integrated C/C++ verification | C/C++ | Static analysis combined with unit testing, coverage and traceability | Regulated embedded development that wants one verification suite |
| Perforce QAC | Compliance-centered static analysis | C, C++ and initial Rust support | MISRA-focused analysis, sound abstract interpretation and compliance governance | Organizations where coding-standard compliance and audit evidence are primary |
| Astrée | Sound static verification | C and C++ | Proof of absence of runtime errors and data races under modeled assumptions | Safety-critical control software and components requiring strong assurance |
| PVS-Studio | Developer-oriented commercial SAST | C/C++, C# and Java, with additional language support evolving | Defect detection, taint analysis and standards mappings | Product groups seeking practical commercial analysis without a full verification suite |
| Cppcheck | Open-source and commercial static analysis | C/C++ | Undefined behavior, dangerous constructs and low-noise defect checks | A free baseline, CI checks and code with non-standard embedded syntax |
| Clang Static Analyzer | Open-source compiler-based analysis | C, C++ and Objective-C | Path-sensitive, interprocedural symbolic execution | Clang-compatible projects needing fast developer feedback |
| Visao (ours) | Static analysis in the Midair platform | C and C++ first; 19 languages, one rule set for all | Abstract interpretation with SMT-backed path reasoning, function contracts, taint and resource analysis, custom detectors | Complex codebases with project-specific rules |
Standards and workflow comparison
| Tool | Publicly documented standards or mappings | Embedded and compiler fit | Workflow and deployment |
|---|---|---|---|
| Coverity | MISRA C, MISRA C++, AUTOSAR C++14, CERT, CWE and multiple functional-safety standards | Strong C/C++ and embedded positioning with extensive compiler support | On-premises Coverity, cloud delivery through Polaris and IDE feedback through Code Sight |
| Polyspace | MISRA C/C++, AUTOSAR C++14, CERT C/C++, CWE, JSF++ and ISO/IEC TS 17961 | Direct support for major embedded compilers and generated-code workflows | Desktop, server, CI and centralized review through Polyspace Access |
| Klocwork | MISRA, AUTOSAR, CERT and CWE taxonomies | Designed for hundreds of cross-compilers and complex build variants | Desktop and IDE feedback, centralized server analysis, differential scans, APIs and CI quality gates |
| CodeSonar | MISRA C/C++, AUTOSAR C++14, CERT C/C++, CWE and JSF++ | Broad compiler support, including GCC, Clang, IAR, TASKING, Green Hills, Wind River and QNX | IDE and CI/CD integration with a central Hub for persistent findings and review |
| Parasoft C/C++test | MISRA C/C++, AUTOSAR C++14, CERT, CWE and security and functional-safety frameworks | Extensive toolchain and target integration for embedded C/C++ | IDE, command line, CI/CD and containerized use, with testing and reporting in the same suite |
| Perforce QAC | MISRA, AUTOSAR, CERT and associated safety and security compliance modules | Dedicated C/C++ analysis with mixed-language Rust support emerging | Developer analysis, centralized Validate platform, deviation management, CI quality gates and qualification packs |
| Astrée | Runtime-error and data-race proof is the core. The bundled RuleChecker checks MISRA, AUTOSAR C++14, CERT and CWE rules | Specialized for high-assurance embedded and control software | Commercial desktop or automated analysis with a Qualification Support Kit |
| PVS-Studio | CWE, CERT, MISRA, AUTOSAR and OWASP mappings, with coverage varying by language and release | Cross-platform analysis, compilation databases, build tracing and cross-compiler workflows | IDE, command line, Docker and common CI systems |
| Cppcheck | Open-source checks plus optional addons; Premium adds broader MISRA and CERT coverage and compliance reporting | Designed to tolerate compiler extensions, inline assembly and non-standard embedded syntax | CLI, GUI, project imports and straightforward CI automation |
| Clang Static Analyzer | No dedicated MISRA compliance or qualification package | Best where Clang can parse the project accurately; cross-translation-unit analysis is available | Built into Clang, available through scan-build, CodeChecker and IDE integrations |
| Visao (ours) | MISRA C:2012 profile with checks for 67 of the 174 rules and directives in its catalogue; the report names the unchecked ones. CWE IDs in SARIF, JSON and GitLab reports where a check has one. No MISRA C++, AUTOSAR or CERT profile yet | Probes gcc, clang and clang-cl for the target triple, macros and include paths. Cross-compilers such as arm-none-eabi-gcc are registered by path. Targets x86, x86_64, arm, arm64 and mips; bare-metal OS model; reads compile_commands.json | One command in CI with SARIF 2.1.0, GitLab SAST or JSON output, a baseline for new-findings-only gating and a fail-on threshold. Docker image, server mode, Linux, Windows and macOS. Runs alone or in Midair, in the cloud or on premises |
What the categories mean
-
SAST and static analysis: the same thing?
SAST stands for static application security testing. Security teams use it for analysis of source or binary code, without running it, to find exploitable weaknesses. Examples are buffer overflows, injection paths and unsafe memory handling. In embedded work, static analysis is wider. It also covers coding standards, runtime-error proof and maintainability.
Most products here are sold as SAST tools. A platform built for web stacks may parse C and C++ yet fail to model a cross-compiler, a real-time operating system (RTOS) or generated code. For embedded C and C++, the build and environment model usually decides, more than the checker count.
-
Defect-oriented analysis
Most static analyzers are designed to find likely defects and vulnerabilities. They combine syntax and semantic checks with control-flow, data-flow, taint, path and interprocedural analysis. The result is a set of findings for human review.
This model suits continuous use on a large codebase. It does not prove that an error class is absent. A clean run means the configured analyzer reported nothing. It does not mean the program is correct.
-
Sound or proof-oriented analysis
Sound analyzers intentionally over-approximate possible program behavior. When the analysis proves a property under its stated assumptions, the result can establish the absence of a defined class of errors. The cost is stricter modeling, more configuration and potential alarms caused by behavior that is possible in the model but impossible in the real system.
Polyspace Code Prover and Astrée are the clearest proof-oriented products in this comparison. They should not be evaluated by the same criteria as a fast pull-request scanner.
-
Coding-standard compliance
For MISRA, AUTOSAR or CERT support, check:
- The exact edition required by the project
- Which rules are enforced automatically
- Which guidelines are not statically decidable
- How deviations are documented and approved
- Whether compliance reports match the required audit format
- Whether a qualification kit covers the selected tool version and configuration
A tool can find many MISRA violations and still lack a compliance process. A compliance product can enforce rules well while another analyzer finds more logic or security defects.
-
Compiler and environment modeling
Embedded code rarely looks like portable desktop C++. Real projects contain compiler intrinsics, target-specific integer models, generated code, conditional compilation, RTOS APIs, custom allocators, hardware registers and inline assembly.
If the analyzer cannot rebuild your real build, the rest of the feature list matters much less. Test compiler and environment modeling first, then compare dashboards.
Tool-by-tool analysis
11 tools
Coverity
Coverity is an enterprise static analysis platform for security and code-quality defects. Its current documentation positions the product strongly for C and C++ in safety-critical and embedded development while also supporting a large multi-language portfolio.
The analysis builds a model across files and components to find defects that local linters cannot see. Coverity also offers extensive MISRA coverage, CERT and CWE mappings, custom checkers through CodeXM, centralized issue management and qualification support for regulated projects. Deployment can remain on premises or use the Coverity engine through the cloud-based Polaris platform.
- Best fit
- Large organizations that need one governed SAST program across embedded C/C++ and other software stacks.
- Watch for
- Coverity is a platform with several delivery modes and add-ons. Confirm whether the proposed license includes the exact MISRA edition, qualification material, compiler coverage, IDE features and cloud or on-premises workflow required by the project.
Sources: Black Duck, ISO 26262 white paper, Coverity on Polaris docs
Polyspace
Polyspace is a product family rather than one analyzer. Polyspace Bug Finder identifies C and C++ defects, coding-rule violations and code metrics. Polyspace Code Prover uses formal methods to prove the absence of selected runtime errors under modeled assumptions. Polyspace as You Code brings a subset of checks into the IDE, while server products support automated CI analysis and Polyspace Access centralizes review.
Keep the two apart. Compare Bug Finder with defect-oriented analyzers and Code Prover with formal verification tools. Together they cover MISRA, AUTOSAR, CERT and CWE checks. They support common embedded compilers and trace results back to Simulink models for generated code.
- Best fit
- Regulated embedded development that needs a mature path from developer feedback to project-wide analysis and proof-oriented verification.
- Watch for
- Do not treat every capability described under the Polyspace name as part of one license. Define which product is needed for coding rules, defect discovery, formal proof, test integration, CI execution and result management.
Klocwork
Klocwork is built for large, fast-changing codebases with many branches, variants and cross-compilers. It combines centralized analysis with developer feedback, incremental and differential scans, coding-standard taxonomies, custom C/C++ checkers and CI quality gates.
Its strongest differentiator is workflow at scale. A full-system analysis can establish shared context, while changed code can be checked earlier without forcing every developer to wait for a complete scan. Current Perforce documentation also emphasizes containerized and cloud-ready deployment and support for modern C, C++ and Rust alongside several enterprise languages.
- Best fit
- Organizations maintaining large C/C++ products across many variants, branches and toolchains.
- Watch for
- Klocwork is a defect and compliance platform, not a formal proof tool. A pilot should measure both central analysis time and local change-analysis latency on the real build matrix.
Sources: Perforce, Klocwork, What is new in Klocwork
CodeSonar
CodeSonar is a high-assurance SAST product now offered by AdaCore following the 2025 combination with CodeSecure. It uses abstract interpretation and symbolic execution, with control-flow, data-flow, taint and memory modeling across procedure and module boundaries.
CodeSonar has particularly broad scope for a product associated with embedded development. It supports C and C++, multiple enterprise languages and binary analysis. The binary capability is relevant when source is unavailable or when proprietary and third-party libraries must be assessed alongside source code. Its Hub tracks findings across analyses and provides path and call-tree visualizations.
- Best fit
- Safety-critical, security-sensitive or legacy systems where whole-program analysis, persistent findings and source-binary coverage matter.
- Watch for
- Broad language support does not guarantee identical analysis depth in every language. Evaluate the C/C++ engine, compiler model, binary scope and desired qualification path separately.
Sources: AdaCore, CodeSonar
Parasoft C/C++test
Parasoft C/C++test combines static analysis with unit testing, structural code coverage, requirements traceability, runtime analysis and compliance reporting. Its static analysis uses several techniques, including pattern checks, data flow and abstract interpretation.
It fits when you need more than "find bugs in source code". A regulated program may need MISRA enforcement, unit tests and MC/DC evidence. It may also need requirements links and audit reports. C/C++test puts these activities in one product family and supports embedded toolchains, IDEs, CI/CD pipelines and containerized environments.
- Best fit
- Automotive, aerospace, medical, rail and industrial C/C++ development seeking an integrated verification workflow.
- Watch for
- If the only need is a lightweight static scan, the suite may be wider than necessary. Evaluate the specific modules, target integrations and reporting components included in the proposed package.
Sources: Parasoft C/C++test
Perforce QAC
Perforce QAC is a compliance-centered analyzer for C and C++, with initial Rust support introduced in 2026. Its positioning is closely tied to MISRA, coding-standard governance and safety-critical development.
The product combines interprocedural data-flow analysis and sound abstract interpretation with centralized compliance reporting, deviation management, custom rules, CI quality gates and qualification packs. Pick it when the question is "can we prove compliance year after year?" more than "what defects can it find?"
- Best fit
- Regulated C/C++ programs where MISRA coverage, deviations, traceability and audit evidence drive the tool decision.
- Watch for
- Separate coding-standard enforcement from broader application-security requirements. If supply-chain, web, mobile or multi-language SAST is also needed, QAC may form one layer of a wider toolchain rather than the entire program.
Sources: Perforce QAC, Rust support announcement
Astrée
Astrée is a sound static analyzer based on abstract interpretation. Its central purpose is to prove the absence of runtime errors in C and C++ software and to analyze data races under modeled assumptions. It is especially associated with safety-critical, real-time and control software.
This makes Astrée a different kind of tool from a warning-oriented SAST scanner. It reasons about every possible execution for defined error classes: undefined behavior, arithmetic faults, invalid memory use and floating-point behavior. AbsInt offers a qualification support kit.
- Best fit
- Selected safety-critical components where a proof-oriented result justifies the modeling and configuration effort.
- Watch for
- Astrée ships with RuleChecker for MISRA, AUTOSAR and CERT rules, but its value is the proof. Do not compare it with a MISRA checker by warning count or scan speed.
Sources: AbsInt, Astrée fact sheet
PVS-Studio
PVS-Studio is a commercial static analyzer for C/C++, C# and Java, with additional language support continuing to evolve. It detects defects, suspicious constructs and potential vulnerabilities and maps findings to CWE, CERT, MISRA, AUTOSAR and OWASP categories.
The product supports Windows, Linux and macOS workflows, common IDEs, compilation databases, build tracing, Docker and popular CI services. It also provides incremental analysis, baselining, suppressions, annotations and several report formats. These features make it practical for introducing static analysis into an existing product without adopting a full functional-safety suite.
- Best fit
- Organizations seeking broad developer integration and commercial support with a comparatively direct adoption path.
- Watch for
- Standards coverage changes by release and is still expanding for newer MISRA editions. Verify the exact rule set and decide whether the project also needs certified qualification material or proof-oriented analysis.
Sources: PVS-Studio
Cppcheck
Cppcheck is an open-source C and C++ analyzer focused on undefined behavior, dangerous constructs and defects that compilers may not report. Its manual explicitly notes that it is designed to handle non-standard syntax, compiler extensions and inline assembly commonly found in embedded projects.
The open-source edition is useful as a low-cost baseline in local development and CI. Cppcheck Premium extends the product with broader MISRA and CERT coverage, compliance reporting and commercial support. This distinction matters because references to "Cppcheck MISRA support" may describe an addon, a limited open-source workflow or the Premium product.
- Best fit
- Projects that need an accessible first analysis layer, a second opinion alongside another analyzer or a free CI gate.
- Watch for
- The project documentation states clearly that checks are not perfect and that some bugs will be missed. Cppcheck should complement design review, testing, fuzzing and compiler diagnostics rather than serve as evidence that the code is safe.
Sources: Cppcheck manual, Cppcheck Premium manual
Clang Static Analyzer
Clang Static Analyzer is part of the Clang project. It analyzes C, C++ and Objective-C using path-sensitive, interprocedural symbolic execution. It can run through scan-build, integrate with CodeChecker and use cross-translation-unit analysis when configured.
Its main advantages are open-source availability and proximity to the compiler. For projects already compatible with Clang, it can provide fast feedback with relatively little procurement overhead. It also works well as one layer beside clang-tidy, compiler warnings and project-specific checks.
- Best fit
- Clang-based or Clang-compatible projects that want automated defect checks in developer and CI workflows.
- Watch for
- It does not provide the compliance governance, qualification packs, broad target-toolchain support or centralized enterprise workflow offered by commercial embedded analyzers.
Sources: Clang Static Analyzer docs
Visao (ours)
Visao is the static analyzer in Midair, the Interpretica verification platform. Midair also runs distributed tests (TS Factory) and checks deployed devices against a baseline (Delta). Visao works alone too, as one command in an existing CI pipeline.
The analyzer lowers 19 languages, C and C++ first, to one intermediate representation and runs one rule set over it. It tracks value ranges and pointer identity with abstract interpretation. When the domains cannot decide, it asks an SMT (satisfiability modulo theories) solver. Findings include integer overflow, out-of-range access, null dereference, use after release, leaked handles and untrusted data that reaches a shell or a query. It also checks function contracts written in the style of ACSL (ANSI/ISO C Specification Language). Project-specific detectors run beside the built-in rules.
For embedded builds, Visao probes gcc, clang and clang-cl for the target triple, macros and include paths. You register a cross-compiler by its path, and Visao reads compile_commands.json. In CI it writes SARIF 2.1.0, GitLab SAST or JSON. A baseline hides known findings, and a severity threshold fails the job. The MISRA C:2012 profile has checks for 67 of the 174 rules and directives in its bundled catalogue. Many checks cover part of a rule. The report lists the unchecked guidelines. The local analyzer has no network client and sends nothing from a run.
- Best fit
- Complex or long-lived systems with failure rules that generic checkers do not know. Also teams that want static analysis, tests and device checks on one platform.
- Watch for
- MISRA coverage is partial. There is no MISRA C++, AUTOSAR or CERT profile yet, and no tool-qualification kit for ISO 26262 or DO-178C. Confirm support for IAR, TASKING or Green Hills builds in a pilot on your real code.
Why a feature checklist is not enough
Two vendors can both claim C++, MISRA and CI/CD support and still give very different results. The difference is in details like these:
- Whether the analyzer reproduces the real preprocessing and build configuration
- Whether it understands the target's integer widths and compiler extensions
- Whether findings cross function, file and module boundaries
- Whether generated code and third-party code can be handled separately
- Whether a developer can understand and reproduce the reported path
- Whether existing warnings can be baselined without hiding new risk
- Whether suppressions and deviations remain traceable
- Whether the central scan and pull-request scan use comparable rules
- Whether reports satisfy an assessor, customer or internal security process
- Whether custom models can describe project-specific APIs and state transitions
Whether the analyzer reproduces the real preprocessing and build configuration Whether it understands the target's integer widths and compiler extensions Whether findings cross function, file and module boundaries Whether generated code and third-party code can be handled separately Whether a developer can understand and reproduce the reported path Whether existing warnings can be baselined without hiding new risk Whether suppressions and deviations remain traceable Whether the central scan and pull-request scan use comparable rules Whether reports satisfy an assessor, customer or internal security process Whether custom models can describe project-specific APIs and state transitions Put real technical scenarios in your request for proposal. A spreadsheet of vendor claims will not show these differences.
How to run a tool evaluation
-
01
Select representative code
Pick a component that contains what most often breaks analysis. That means target headers and intrinsics, build variants, generated source, RTOS primitives and custom memory management. Add a few known defects and one recent change that crossed several modules.
Do not use a small demo project. It rewards quick setup and tells you little about production fit.
-
02
Define the expected outcome
Write down what the pilot tests. Typical goals are defect discovery, MISRA or CERT enforcement, proof of runtime-error absence, feedback on changed code, governance across branches, third-party code and custom detectors.
One pilot can cover several goals, but each goal needs separate acceptance criteria.
-
03
Measure useful signal
Do not rank tools by warning count. More warnings can mean better detection, duplicate rules, bad configuration or noise. Count confirmed high-impact findings and new actionable ones. Count false or irrelevant ones too. Time how long each report takes to understand, and check that findings stay stable after small code changes.
-
04
Test the full workflow
Run both a clean project analysis and an incremental change. Connect the tool to the intended CI system and IDE. Test baselining, suppression, assignment, quality gates, exports and access controls. If the code cannot leave the organization, verify what data is processed or stored outside the selected environment.
-
05
Check the evidence
For regulated projects, ask which documents the proposed license includes. Look for qualification material, a rule-coverage matrix for your standard edition and a guideline compliance summary. Also check deviation records, versioned configuration, audit exports and the long-term support policy.
Pilot scorecard
Score every candidate on the same metrics.
| Metric | What to measure | Why it matters |
|---|---|---|
| Build capture | Percentage of production translation units analyzed with the correct configuration | Missing or misparsed code invalidates later comparisons |
| Important true positives | Confirmed defects with meaningful safety, security or reliability impact | Measures actual risk reduction |
| Signal ratio | Actionable findings divided by reviewed findings | Approximates triage burden |
| Time to first useful result | Setup time plus analysis time until the first validated finding | Reveals adoption cost |
| Incremental feedback time | Time from a code change to developer feedback | Determines whether analysis can run before merge |
| Triage time | Median engineer time needed to confirm or reject a finding | Often costs more than the scan itself |
| Environment modeling | Effort to model compilers, RTOS APIs, generated code and custom libraries | Embedded accuracy depends on context |
| Standards evidence | Coverage, deviations and reports for the required standard edition | A checker list is not a compliance process |
| Finding stability | Whether unchanged defects remain traceable across commits and branches | Essential for governance and audit history |
| Customization effort | Time to add a useful project-specific rule or model | Tests fit for non-standard systems |
| Deployment fit | Data location, access control, scaling and maintenance | Determines operational feasibility |
| Total operating cost | License, infrastructure, onboarding, tuning, triage and support | Purchase price alone is misleading |
Can one analyzer cover the entire embedded verification process?
Usually not. A layered embedded workflow may combine:
- 01Compiler warnings for immediate language and build diagnostics
- 02clang-tidy or another linter for local coding practices
- 03Cppcheck or Clang Static Analyzer for an additional open-source defect layer
- 04A commercial SAST or compliance analyzer for centralized control, standards and cross-module findings
- 05A proof-oriented analyzer for selected high-criticality components
- 06Unit, integration, hardware-in-the-loop and system testing
- 07Fuzzing and security testing for behavior that source analysis cannot establish
- 08Runtime monitoring for failures that depend on the deployed environment
Each layer should cover a risk that the others cannot cover cheaply. More tools for their own sake only add triage work.
Custom analysis pays off here. Your own APIs, state machines and failure rules often matter more than one more generic checker. A custom detector turns a recurring review comment into an automatic check.
Midair puts several of these layers on one platform. Visao does the static analysis, TS Factory runs the tests and Delta checks deployed devices against a baseline.
Recommendations by project type
Safety-critical C or C++
Start with Perforce QAC, Parasoft C/C++test, Coverity or Klocwork for coding standards and governed analysis. Add Polyspace Code Prover or Astrée when the safety case needs proof of selected runtime properties. Add CodeSonar when security, binary code or whole-program defect search matter most.
Automotive software
Check the exact MISRA C, MISRA C++, AUTOSAR and ISO 26262 support the program needs. Perforce QAC, Parasoft, Coverity, Klocwork, Polyspace and CodeSonar are all worth a look. Compiler, generated-code, variant and qualification needs will narrow the list fast.
Large embedded product with many variants
Klocwork, Coverity and CodeSonar are strong starting points for centralized analysis and persistent findings. The deciding factors are likely to be build capture, cross-compiler coverage, differential analysis speed, issue stability and integration with existing governance.
Smaller product without a formal certification target
Begin with compiler warnings, Cppcheck and Clang-based tools. Add PVS-Studio when commercial support, broader diagnostics and managed integration justify the cost. A heavy compliance suite may not be necessary unless customer or regulatory requirements are approaching.
Complex system with unusual internal APIs or failure rules
Look at custom checkers and modeling first. Coverity, Klocwork, Polyspace and PVS-Studio each offer some form of customization. Visao (ours) takes project-defined detectors and function contracts as input.
Frequently asked questions
What are the best SAST tools for C?
It depends on the job. Coverity, Klocwork and CodeSonar are the established enterprise SAST platforms for whole-codebase defect and vulnerability analysis. Polyspace Code Prover and Astrée aim to prove that defined runtime errors cannot happen. Perforce QAC and Parasoft C/C++test lead when you need MISRA C or CERT C compliance evidence. PVS-Studio suits smaller commercial teams, and Cppcheck and Clang Static Analyzer are good free baselines. Visao (ours) adds project-specific detectors. The best tool for your project is the one that models your cross-compiler and build correctly. Only a pilot on real code shows that.
What are the best alternatives to Coverity for C/C++ static analysis?
The closest alternatives are Klocwork and CodeSonar. Both are enterprise SAST platforms with interprocedural analysis, central governance and strong C/C++ support. The right choice depends on why you are leaving Coverity. For proof instead of defect finding, look at Polyspace Code Prover or Astrée. For MISRA C, MISRA C++ or CERT C reporting, look at Perforce QAC or Parasoft C/C++test. If budget is the constraint, evaluate PVS-Studio, or the free Cppcheck and Clang Static Analyzer. If generic checkers miss your system's own failure rules, Visao (ours) is built around custom detectors. If license cost, build-modeling effort or triage volume is your reason to switch, test exactly that in the pilot.
What is the best static analysis tool for embedded C and C++?
There is no universal best tool. Polyspace Code Prover and Astrée are strong for proof of runtime-error absence. Perforce QAC and Parasoft are strong for compliance work. Coverity, CodeSonar and Klocwork are strong enterprise SAST candidates. PVS-Studio is a practical commercial option, and Cppcheck and Clang Static Analyzer are useful free baselines. Visao (ours) suits complex systems that need project-specific detectors. Decide after a pilot on representative production code.
Which static analysis tools support MISRA?
Coverity, Polyspace Bug Finder, Klocwork, CodeSonar, Parasoft C/C++test, Perforce QAC, Astrée (with RuleChecker), PVS-Studio and Cppcheck Premium publish MISRA support. Visao (ours) has a MISRA C:2012 profile with checks for 67 of the 174 rules and directives in its catalogue. Its report names the unchecked ones. Coverage differs by MISRA edition, language, product version and license. Ask each vendor for the rule-coverage matrix and the deviation workflow.
What does Visao add as part of Midair?
Midair puts static analysis, testing and device checks on one platform. Visao reports source findings, TS Factory runs distributed tests and Delta checks deployed devices against a baseline. You do not need Midair to use Visao. In an existing CI pipeline, Visao runs as one command with SARIF output.
Is MISRA support the same as functional-safety certification?
No. MISRA is a set of coding guidelines. Functional-safety standards such as ISO 26262, IEC 61508 and DO-178C with DO-330 add lifecycle, process and evidence requirements. A tool can check MISRA rules without supplying qualification material for a safety project.
Can static analysis prove that embedded software is safe?
Most analyzers find potential defects but do not prove safety. Sound tools can prove the absence of defined error classes under stated assumptions. Even then, static analysis does not replace requirements validation, system and hardware testing, security assessment or field monitoring.
Can Cppcheck or Clang replace a commercial analyzer?
For some unregulated projects, yes, and they are useful in almost any C/C++ workflow. They usually lack the central governance, qualification kits, broad compiler modeling, compliance reports and vendor support that large or regulated programs need.
Should a project use more than one static analyzer?
Often, yes. Different analyzers use different models and checkers. A fast local tool can run on every change. A commercial platform can run central analysis, and a proof tool can verify the most critical parts. Plan the overlap, or duplicate findings will add triage work.
How should false positives be compared?
Use the same code, build configuration, rule policy and environment models for every tool. Review a large enough sample and mark each finding as confirmed, irrelevant or uncertain. Vendor false-positive claims do not replace a measurement on your own code.
Where to start
Pick the tool that understands your real build, finds the defects you care about and produces evidence your reviewers accept. The longest feature list rarely wins.
Run a two- to four-week pilot on one representative component. Fix the acceptance criteria before you start. Let the engineers who will triage the results do the review, and compare the total effort, not the scan output.
Comparing analyzers for a complex C or C++ system?
Start with a scoped pilot built around your compiler, codebase and real failure modes. Interpretica can help define it.
Start your pilot