Design by contract DbC
Programming philosophy: every function has formal pre-conditions, post-conditions and invariants.
Bertrand Meyer (the Eiffel language, 1986). Assertions on "what must be true before we begin" + "what we guarantee after". Drives explicit contract thinking. Migrated into modern languages via type systems and property-based testing.