complements external testing with internal self-tests that can be activated both for isolated tests and in production code during a test-phase. The advantage of internal self-tests is that they can detect errors before they manifest themselves as invalid results observed by the client. This leads to earlier and more specific error detection. The use of assertions can be considered to be a form of test oracle, a way of testing the design by contract implementation. Language support Languages with native support Languages that implement most DbC features natively include: Ada 2012 Ciao Clojure Cobra D Dafny Eiffel Fortress Kotlin Mercury Oxygene (formerly Chrome and Delphi Prism) Racket (including higher order contracts, and emphasizing that contract violations must blame the guilty party and must do so with an accurate explanation) Sather ScalaStrong typing as another "contract enforcing" in Scala, see discussion at scala-lang.org/. SPARK (via static analysis of Ada programs) Vala VDM Additionally, the standard method combination in the Common Lisp Object System has the method qualifiers :before, :after and :around that allow writing contracts as auxiliary methods, among other uses. Languages with third-party support Various libraries, preprocessors and other tools have been developed for existing programming languages without native design by contract support: Ada, via GNAT pragmas for preconditions and postconditions. C and C++: Boost.Contract DBC for C preprocessor GNU Nana eCv and eCv++ formal verification tools Digital Mars C++ compiler via CTESK extension of C Loki Library provides a mechanism named ContractChecker that verifies a class follows design by contract. DBC C++ Design by contract for C++ C# (and other .NET languages), via Code Contracts (a Microsoft Research project integrated into the .NET Framework 4.0) Groovy via GContracts Go via dbc or gocontracts Java: Active: OVal with AspectJ Contracts for Java (Cofoja) Java Modeling Language (JML) Bean Validation (only pre- and postconditions) valid4j SafeR (with safe references) Inactive/unknown: Jtest (active but DbC seems not to be supported anymore) iContract2/JContracts Contract4J jContractor C4J Google CodePro Analytix SpringContracts for the Spring Framework Jass Modern Jass (successor is Cofoja) JavaDbC using AspectJ JavaTESK using extension of Java chex4j using javassist highly customizable java-on-contracts JavaScript, via decorator-contracts, AspectJS (specifically, AJS_Validator), Cerny.js, ecmaDebug, jsContract, dbc-code-contracts or jscategory. Common Lisp, via the macro facility or the CLOS metaobject protocol. Nemerle, via macros. Nim, via macros. Perl, via the CPAN modules Class::Contract (by Damian Conway) or Carp::Datum (by Raphael Manfredi). PHP, via PhpDeal, Praspel or Stuart