Sensor family 05
Adversarial
“Can we make our evidence of correctness fail?”
What belongs here
The sensor supplies its own inputs or its own faults. Nobody wrote down the case that fails; the technique searched for it. That is what separates this family from Behavioral, whose inputs are all human-chosen.
Contested placements
Static Security Analysis executes nothing and is adversarial in intent rather than in mechanism. Property-Based Testing and Metamorphic Testing straddle Behavioral: they check properties a human stated, but generate the inputs themselves.
Where its signals arrive
- Property / metamorphic — Test stage. Does it obey generalized properties across input spaces?
- Mutation testing — Test stage. Would our tests detect plausible wrong implementations?
The atlas places every family on the same lifecycle grid; the framework defines the six dimensions each entry below is characterized along.
Entries (7)
Differential Testing
implementation_A(input) == implementation_B(input). You don’t know which is right. But disagreement is an excellent sensor.
Fault Injection
Kill a node. Drop a network connection. Inject latency. A sensor of resilience — does the system continue to satisfy its invariants under partial failure?
Fuzzing
What happens on inputs humans didn’t think of? Fuzzing is a sensor of robustness against the infinite space of inputs the system will actually encounter — including inputs no engineer would ever…
Live Chaos Experiments
Fault injection against the running production system: kill a node, sever a region, corrupt a fraction of messages, and watch whether runtime invariants hold.
Metamorphic Testing
You don’t know the answer, but you know how the answer should change. This is a particularly beautiful sensor because you don’t need an oracle.
Property-Based Testing
You state a property that should hold for every input, and the tool generates inputs trying to break it.
Static Security Analysis
Attacking the code before it runs. Taint tracking, dataflow analysis, and pattern-based scanners (Semgrep, CodeQL) ask: “is there any path through this program where an adversary’s input reaches a…
Adjacent families
- Previous: Invariants — What must always be true?
- Next: Runtime — What is it actually doing?
- All of them: the complete catalog (this family is also anchored there at /catalog/#adversarial).