# Defensive Programming

> A design rule that code checks its inputs and assumptions before acting on them, and reports a violation as an explicit error.

Record: `architecture:defensive-programming`
Kind: principle
Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)
Severity: mandatory
Scope: function, module, boundary
Canonical: https://banes-lab.com/ontology#architecture-defensive-programming

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Competing Consumers](https://banes-lab.com/records/architecture/competing-consumers.md) and before [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md).

## Repair

- Refactored by: Add Guards, Validate Inputs
- Detected by: null/empty/range unsafe access
- Violated by: unchecked assumptions
- Measured by: guard coverage, runtime exception rate
- Enforced by: linting, [tests](https://banes-lab.com/records/lexicon/tests.md)

## Requires

- [Input Validation](https://banes-lab.com/records/architecture/input-validation.md)
- [Error Handling](https://banes-lab.com/records/architecture/error-handling.md)

## Reinforces

- [Robustness](https://banes-lab.com/records/lexicon/robustness.md)
- [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md)

## Enables

- [Safe Failure](https://banes-lab.com/records/lexicon/safe-failure.md)

## Conflicts with

- [Trusting Invalid Inputs](https://banes-lab.com/records/lexicon/trusting-invalid-inputs.md)

## In tension with

- [Verbosity](https://banes-lab.com/records/lexicon/verbosity.md)

## Tensions

- [Defensive Programming / Verbosity](https://banes-lab.com/records/tension/defensive-programming-verbosity.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Error Handling / Resilience](https://banes-lab.com/records/architecture-category/error-handling-resilience.md)

## Linked from

- [Execution joins the halves](https://banes-lab.com/software-architecture/principles/execution-joins-the-halves.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
- [Security / Privacy / Compliance / Governance](https://banes-lab.com/ontology/principles/architecture-category-security-privacy-compliance-governance.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/lexicon/lexicon-category-error-handling-resilience.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
