# Defensive Programming

Record: `arch: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#arch-defensive-programming

## 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/lex/tests.md)

## requires

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

## reinforces

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

## enables

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

## conflicts-with

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

## tensions-with

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

## tensions

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