20:
589:
697:
630:
374:, where the supplier is responsible for figuring out what to do when a precondition is broken. More often than not, the supplier throws an exception to inform the client that the precondition has been broken, and in both cases—DbC and defensive programming alike—the client must figure out how to respond to that. In such cases, DbC makes the supplier's job easier.
348:
All class relationships are between client classes and supplier classes. A client class is obliged to make calls to supplier features where the resulting state of the supplier is not violated by the client call. Subsequently, the supplier is obliged to provide a return state and data that does not
352:
For instance, a supplier data buffer may require that data is present in the buffer when a delete feature is called. Subsequently, the supplier guarantees to the client that when a delete feature finishes its work, the data item will, indeed, be deleted from the buffer. Other design contracts are
400:
Contract conditions should never be violated during execution of a bug-free program. Contracts are therefore typically only checked in debug mode during software development. Later at release, the contract checks are disabled to maximize performance.
414:
This effectively eliminates the run-time costs of asserts in production code—irrespective of the number and computational expense of asserts used in development—as no such instructions will be included in production by the compiler.
438:
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.
1641:. Proceedings of the Second International Workshop on Behaviour Modelling: Foundation and Applications (BM-FA '10). ACM, New York, NY, USA, 2010. This paper discusses generalized notions of
652:
381:
If the class invariant AND precondition are true before a supplier is called by a client, then the invariant AND the postcondition will be true after the service has been completed.
711:
388:
Design by contract can also facilitate code reuse, since the contract for each piece of code is fully documented. The contracts for a module can be regarded as a form of
357:. The class invariant guarantees (for the local class) that the state of the class will be maintained within specified tolerances at the end of each feature execution.
2471:
1497:
411:
Launching the Python interpreter with "-O" (for "optimize") as an argument will likewise cause the Python code generator to not emit any bytecode for asserts.
435:. Rather, it complements external testing with internal self-tests that can be activated both for isolated tests and in production code during a test-phase.
296:
The notion of a contract extends down to the method/procedure level; the contract for each method will normally contain the following pieces of information:
341:
are allowed to weaken preconditions (but not strengthen them) and strengthen postconditions and invariants (but not weaken them). These rules approximate
233:—an obligation for the client, and a benefit for the supplier (the method itself), as it frees it from having to handle cases outside of the precondition.
521:(including higher order contracts, and emphasizing that contract violations must blame the guilty party and must do so with an accurate explanation)
761:
Various libraries, preprocessors and other tools have been developed for existing programming languages without native design by contract support:
1294:
1269:
3152:
1536:
58:
255:
which formalises the obligations. This can be summarised by the "three questions" that the designer must repeatedly answer in the contract:
367:
DbC's "fail hard" property simplifies the debugging of contract behavior, as the intended behaviour of each method is clearly specified.
1584:
987:
789:
1629:
338:
164:
1553:
1363:
3221:
717:
199:. The metaphor comes from business life, where a "client" and a "supplier" agree on a "contract" that defines, for example, that:
830:
203:
The supplier must provide a certain product (obligation) and is entitled to expect that the client has paid its fee (benefit).
191:
The central idea of DbC is a metaphor on how elements of a software system collaborate with each other on the basis of mutual
3226:
133:
2007:
1147:
969:
602:
360:
When using contracts, a supplier should not try to verify that the contract conditions are satisfied—a practice known as
3170:
1965:
1489:
1414:
168:
3180:
748:
678:
616:
1672:
3411:
3030:
1704:
405:
274:
1376:
131:
and first described in various articles starting in 1986 and the two successive editions (1988, 1997) of his book
497:
240:—an obligation for the supplier, and obviously a benefit (the main benefit of calling the method) for the client.
1440:
3593:
3175:
2533:
1295:"United States Patent and Trademark Office registration for the graphic design with words "Design by Contract""
1152:
850:
512:
507:
313:
286:
278:
141:
in
December 2003, and it was granted in December 2004. The current owner of this trademark is Eiffel Software.
3246:
2799:
2322:
1899:
1889:
1074:
868:
518:
502:
492:
342:
128:
3052:
3035:
2757:
2597:
2032:
1948:
1921:
1120:
534:
529:
487:
477:
408:. Asserts are by default compiled away in release mode in C/C++, and similarly deactivated in C# and Java.
328:
218:
174:
74:
812:
2349:
1911:
1110:
1104:
887:
548:
467:
222:
3544:
3416:
3278:
3190:
2560:
2099:
1298:
1273:
1036:
765:
553:
542:
364:—the general idea being that code should "fail hard", with contract verification being the safety net.
209:
Both parties must satisfy certain obligations, such as laws and regulations, applying to all contracts.
1337:
1319:
229:
Expect a certain condition to be guaranteed on entry by any client module that calls it: the method's
3373:
3042:
2657:
2652:
2582:
2327:
2312:
2123:
2039:
1677:
1529:
1021:
874:
560:
214:
3588:
3378:
3135:
3047:
2809:
2523:
2496:
2426:
2287:
2143:
2054:
1928:
775:
660:
656:
640:
482:
462:
384:
When making calls to a supplier, a software module should not violate the supplier's preconditions.
3530:
3343:
3308:
3236:
3195:
3147:
3005:
2824:
2782:
2747:
2727:
2491:
1197:
707:
608:
282:
3558:
2863:
2732:
2697:
2148:
2049:
2022:
1960:
1192:
911:
389:
180:
1252:
3328:
3211:
3025:
2831:
2804:
2794:
2762:
2752:
2717:
2632:
2577:
2572:
2555:
2501:
2339:
2292:
2153:
2017:
1938:
1794:
1666:
1600:"No chance of releasing under Apache/Eclipse/MIT/BSD license? · Issue #5 · nhatminhle/cofoja"
1452:
1157:
371:
361:
104:
100:
85:
839:
provides a mechanism named
ContractChecker that verifies a class follows design by contract.
723:
648:
3498:
3353:
3313:
3067:
3020:
2841:
2789:
2712:
2702:
2602:
2565:
2545:
2476:
2466:
1874:
1864:
1821:
1799:
1754:
1697:
538:
270:
149:
1560:
8:
3293:
3216:
3125:
3010:
2858:
2836:
2742:
2722:
2587:
2446:
2431:
2344:
2111:
2064:
1845:
1355:
1177:
820:
798:
428:
145:
78:
3406:
3358:
3333:
2772:
2607:
2592:
2267:
2138:
2084:
1816:
1202:
1187:
1182:
858:
307:
62:
206:
The client must pay the fee (obligation) and is entitled to get the product (benefit).
3513:
3483:
3288:
3241:
3097:
3087:
2908:
2903:
2898:
2868:
2707:
2692:
2647:
2637:
2622:
2617:
2550:
2486:
2481:
2384:
2219:
2116:
2094:
2044:
2002:
1992:
1906:
1784:
1724:
1578:
1107:, via Brian McCallister's DesignByContract, Ruby DBC ruby-contract or contracts.ruby.
1660:
1007:
3488:
3453:
3428:
3141:
3115:
3077:
2883:
2819:
2767:
2672:
2662:
2642:
2528:
2518:
2436:
2389:
2359:
2334:
2302:
2262:
2202:
2133:
1972:
1162:
1011:
961:
111:
tests that all relevant preconditions hold true (before, or while, processing the
3478:
3458:
3438:
3433:
3423:
3318:
2953:
2943:
2928:
2888:
2853:
2846:
2777:
2737:
2506:
2379:
2369:
2277:
2234:
2214:
1943:
1894:
1690:
1270:"United States Patent and Trademark Office registration for "DESIGN BY CONTRACT""
973:
917:
354:
244:
47:
1599:
966:
377:
Design by contract also defines criteria for correctness for a software module:
3503:
3448:
3401:
3383:
3185:
2933:
2923:
2918:
2893:
2687:
2667:
2540:
2511:
2461:
2394:
2364:
2354:
2317:
2239:
2197:
2192:
2074:
2069:
2059:
1977:
1955:
1789:
1779:
1167:
1097:. A permanent change to Python to support design by contracts was proposed in
1040:
862:
432:
124:
54:
3565:
3582:
3508:
3493:
3473:
3396:
3298:
3130:
3120:
2948:
2938:
2913:
2878:
2441:
2374:
2297:
2272:
2224:
2209:
1916:
1836:
1636:
1472:
1054:
928:
323:
237:
70:
3551:
3537:
77:. These specifications are referred to as "contracts", in accordance with a
3391:
3368:
3338:
3323:
2612:
2229:
2170:
1982:
1933:
1884:
1859:
1811:
1804:
1476:
1418:
1225:, Technical Report TR-EI-12/CO, Interactive Software Engineering Inc., 1986
1094:
1010:, AspectJS (specifically, AJS_Validator), Cerny.js, ecmaDebug, jsContract,
836:
826:
783:
424:
318:
252:
230:
66:
882:
243:
Maintain a certain property, assumed on entry and guaranteed on exit: the
3468:
3463:
3443:
3363:
3283:
3092:
2997:
2307:
2282:
2254:
2183:
2128:
2106:
1854:
1831:
1826:
1769:
1764:
1667:
Building bug-free O-O software: An introduction to Design by
Contract(TM)
1415:"Write Cleaner, Higher Quality Code with Class Contracts in Delphi Prism"
1172:
1017:
442:
281:
that they should be part of the design process. In effect, DbC advocates
153:
1124:
1090:
1086:
1064:
423:
Design by contract does not replace regular testing strategies, such as
3082:
2677:
2456:
2178:
2158:
2012:
1850:
1024:
1003:
905:
293:, or both, even if there is no special language support for contracts.
290:
277:
like these. However, DbC considers these contracts to be so crucial to
1511:
1082:
99:
Where this assumption is considered too risky (as in multi-channel or
96:
will meet the preconditions specified as required for that operation.
3348:
3072:
3057:
3015:
2627:
2187:
2027:
1114:
842:
726:
by removing items or incorporating them into the text of the article.
575:
that allow writing contracts as auxiliary methods, among other uses.
300:
Acceptable and unacceptable input values or types, and their meanings
19:
1098:
978:
2682:
1729:
1663:
A top-level description of DbC, with links to additional resources.
659:
external links, and converting useful links where appropriate into
1530:"Software Testing Help from the Experts | Parasoft Resources"
1392:
896:
3303:
3231:
2971:
1841:
1068:
1030:
900:
472:
333:(more rarely) Performance guarantees, e.g. for time or space used
1078:
878:
3062:
1713:
1242:, eds. D. Mandrioli and B. Meyer, Prentice Hall, 1991, pp. 1–50
524:
404:
In many programming languages, contracts are implemented with
1774:
1134:
939:
806:
458:
Languages that implement most DbC features natively include:
115:
s request) and replies with a suitable error message if not.
1475:
as another "contract enforcing" in Scala, see discussion at
310:
condition values or types that can occur, and their meanings
2814:
1050:
1046:
769:
81:
with the conditions and obligations of business contracts.
445:, a way of testing the design by contract implementation.
137:. Eiffel Software applied for trademark registration for
1682:
1130:
1060:
923:
441:
The use of assertions can be considered to be a form of
1384:
1342:
1338:"Trademark Status & Document Retrieval - 78342308"
1324:
1320:"Trademark Status & Document Retrieval - 78342277"
57:, precise and verifiable interface specifications for
1638:
A framework for the semantics of behavioral contracts
578:
559:
Additionally, the standard method combination in the
1445:
53:
It prescribes that software designers should define
418:
236:Guarantee a certain property on exit: the method's
1673:Benefits and drawbacks; implementation in RPS-Obix
942:(active but DbC seems not to be supported anymore)
643:may not follow Knowledge's policies or guidelines
370:This approach differs substantially from that of
167:, in particular a formalism for redefinition and
3580:
1240:Advances in Object-Oriented Software Engineering
453:
1393:"D Programming Language, Contract Programming"
349:violate the state requirements of the client.
1698:
1632:describing DBC closely to the original model.
1330:
772:pragmas for preconditions and postconditions.
251:The contract is semantically equivalent to a
1312:
1287:
160:A clear metaphor to guide the design process
144:Design by contract has its roots in work on
1262:
617:Learn how and when to remove these messages
395:
1705:
1691:
1453:"Scala Standard Library Docs - Assertions"
1417:. Embarcadero Technologies. Archived from
303:Return values or types, and their meanings
225:provides a certain functionality, it may:
61:, which extend the ordinary definition of
749:Learn how and when to remove this message
679:Learn how and when to remove this message
3222:Good Design Award (Museum of Modern Art)
1412:
1259:(IEEE), 25, 10, October 1992, pp. 40–51.
18:
1057:) or Carp::Datum (by Raphael Manfredi).
3581:
1583:: CS1 maint: archived copy as title (
1390:
156:. The original contributions include:
3267:
3227:Good Design Award (Chicago Athenaeum)
2970:
2415:
1742:
1686:
996:highly customizable java-on-contracts
134:Object-Oriented Software Construction
127:in connection with his design of the
1441:Contracts for Higher-Order Functions
1148:Component-based software engineering
690:
623:
582:
1678:Using Code Contracts for Safer Code
1661:The Power of Design by Contract(TM)
1621:Mitchell, Richard, and McKim, Jim:
448:
13:
3268:
3171:American Institute of Graphic Arts
1500:from the original on Nov 15, 2018.
1366:from the original on Aug 22, 2018.
579:Languages with third-party support
515:(formerly Chrome and Delphi Prism)
14:
3605:
3181:Design and Industries Association
1654:
598:This section has multiple issues.
392:for the behavior of that module.
262:What does the contract guarantee?
1542:from the original on 2022-10-09.
1071:or Stuart Herbert's ContractLib.
1020:, via the macro facility or the
853:(and other .NET languages), via
695:
628:
587:
419:Relationship to software testing
265:What does the contract maintain?
1743:
1614:
1592:
1546:
1522:
1512:"Bean Validation specification"
1504:
1482:
1466:
1433:
1406:
606:or discuss these issues on the
16:Approach for designing software
3176:Chartered Society of Designers
2416:
1623:Design by Contract: by example
1370:
1348:
1245:
1228:
1215:
1153:Correctness (computer science)
920:(only pre- and postconditions)
285:. Contracts can be written by
259:What does the contract expect?
186:
179:The connection with automatic
92:that invoke an operation on a
44:design-by-contract programming
1:
3247:Prince Philip Designers Prize
1890:Architectural lighting design
1391:Bright, Walter (2014-11-01).
1253:Applying "Design by Contract"
454:Languages with native support
3053:Electronic design automation
3036:Virtual home design software
2008:Automotive suspension design
1356:"Assertions in Managed Code"
1053:modules Class::Contract (by
861:project integrated into the
283:writing the assertions first
7:
1912:Environmental impact design
1494:Microsoft Developer Network
1360:Microsoft Developer Network
1141:
223:object-oriented programming
129:Eiffel programming language
107:is taken, meaning that the
23:A design by contract scheme
10:
3610:
3191:International Forum Design
2561:Engineering design process
1712:
1137:object-oriented extension.
845:Design by contract for C++
563:has the method qualifiers
118:
3526:
3274:
3263:
3204:
3163:
3106:
2996:
2992:
2966:
2422:
2411:
2313:Integrated circuit design
2248:
2235:Stage/set lighting design
2167:
2124:Hardware interface design
2083:
2040:Hardware interface design
1991:
1873:
1753:
1749:
1738:
1720:
1101:in 2003, but is deferred.
561:Common Lisp Object System
3148:Industrial design rights
3136:Fashion design copyright
3048:Design quality indicator
2497:Creative problem-solving
2288:Electrical system design
2144:Sonic interaction design
2055:Photographic lens design
1929:Healthy community design
1208:
960:SpringContracts for the
396:Performance implications
273:have facilities to make
3344:New product development
3309:Enterprise architecture
3237:IF Product Design Award
3196:Design Research Society
2748:Reliability engineering
1198:Test-driven development
990:using extension of Java
957:Google CodePro Analytix
123:The term was coined by
40:programming by contract
2800:Top-down and bottom-up
2149:User experience design
2050:Packaging and labeling
2023:Electric guitar design
1961:Landscape architecture
1669:Older material on DbC.
1625:, Addison-Wesley, 2002
1377:Official Python Docs,
1077:, using packages like
993:chex4j using javassist
931:(with safe references)
912:Java Modeling Language
390:software documentation
181:software documentation
24:
3594:Programming paradigms
3329:Innovation management
3212:European Design Award
2978:Intellectual property
2795:Theory of constraints
2758:Responsibility-driven
2598:For manufacturability
2502:Creativity techniques
2340:Nuclear weapon design
2154:User interface design
2018:Corrugated box design
1939:Interior architecture
1158:Defensive programming
984:JavaDbC using AspectJ
981:(successor is Cofoja)
945:iContract2/JContracts
372:defensive programming
362:offensive programming
343:behavioural subtyping
339:inheritance hierarchy
271:programming languages
101:distributed computing
46:, is an approach for
22:
3374:Unintelligent design
3354:Philosophy of design
3068:Design specification
3021:Comprehensive layout
2593:For behaviour change
2566:Probabilistic design
2328:Power network design
1865:Visual merchandising
1822:Instructional design
1800:Postage stamp design
1362:. 15 November 2016.
1125:cocoapod by Jim Boyd
649:improve this article
279:software correctness
150:formal specification
36:contract programming
3294:Creative industries
3217:German Design Award
3126:Design infringement
3011:Architectural model
2350:Organization design
2345:Nucleic acid design
2293:Experimental design
1846:Traffic sign design
1439:Findler, Felleisen
1178:Modular programming
1025:metaobject protocol
1008:decorator-contracts
821:formal verification
799:formal verification
661:footnote references
429:integration testing
173:The application to
163:The application to
146:formal verification
79:conceptual metaphor
63:abstract data types
59:software components
3359:Process simulation
3334:Intelligent design
2658:Intelligence-based
2653:Integrated topside
2583:Framework-oriented
2268:Behavioural design
2139:Information design
1817:Information design
1516:beanvalidation.org
1251:Meyer, Bertrand: "
1236:Design by Contract
1223:Design by Contract
1203:Typestate analysis
1188:Program refinement
1183:Program derivation
1012:dbc-code-contracts
972:2003-04-03 at the
936:Inactive/unknown:
906:Contracts for Java
859:Microsoft Research
724:clean up the lists
213:Similarly, if the
175:exception handling
139:Design by Contract
48:designing software
28:Design by contract
25:
3576:
3575:
3522:
3521:
3289:Conceptual design
3259:
3258:
3255:
3254:
3242:James Dyson Award
3098:Website wireframe
3088:Technical drawing
2962:
2961:
2810:Transgenerational
2551:Ecological design
2427:Activity-centered
2407:
2406:
2403:
2402:
2385:Spacecraft design
2179:Public art design
2117:Video game design
2095:Experience design
2065:Production design
2045:Motorcycle design
2003:Automotive design
1907:Ecological design
1785:Film title design
1635:McNeile, Ashley:
1234:Meyer, Bertrand:
1221:Meyer, Bertrand:
829:C++ compiler via
759:
758:
751:
741:
740:
689:
688:
681:
621:
337:Subclasses in an
113:client component'
90:client components
84:The DbC approach
34:), also known as
3601:
3568:
3561:
3554:
3547:
3540:
3533:
3265:
3264:
3142:Geschmacksmuster
3116:Community design
2994:
2993:
2968:
2967:
2728:Process-centered
2524:Design–bid–build
2492:Cradle-to-cradle
2472:Concept-oriented
2413:
2412:
2390:Strategic design
2360:Processor design
2335:Mechanism design
2303:Geometric design
2263:Algorithm design
2203:Jewellery design
2134:Immersive design
2028:Furniture design
1973:Landscape design
1751:
1750:
1740:
1739:
1707:
1700:
1693:
1684:
1683:
1647:Substitutability
1608:
1607:
1596:
1590:
1588:
1582:
1574:
1572:
1571:
1565:
1559:. Archived from
1558:
1550:
1544:
1543:
1541:
1534:
1526:
1520:
1519:
1508:
1502:
1501:
1490:"Code Contracts"
1486:
1480:
1470:
1464:
1463:
1461:
1460:
1449:
1443:
1437:
1431:
1430:
1428:
1426:
1421:on 26 April 2021
1410:
1404:
1403:
1401:
1400:
1388:
1382:
1379:assert statement
1374:
1368:
1367:
1352:
1346:
1345:
1334:
1328:
1327:
1316:
1310:
1309:
1307:
1306:
1297:. Archived from
1291:
1285:
1284:
1282:
1281:
1272:. Archived from
1266:
1260:
1249:
1243:
1232:
1226:
1219:
1163:Fail-fast system
962:Spring Framework
754:
747:
736:
733:
727:
699:
698:
691:
684:
677:
673:
670:
664:
632:
631:
624:
613:
591:
590:
583:
574:
570:
566:
449:Language support
289:, enforced by a
109:server component
105:inverse approach
94:server component
3609:
3608:
3604:
3603:
3602:
3600:
3599:
3598:
3589:Software design
3579:
3578:
3577:
3572:
3566:
3559:
3552:
3545:
3538:
3531:
3518:
3319:Futures studies
3270:
3251:
3200:
3159:
3108:
3102:
2988:
2987:
2958:
2864:Value sensitive
2854:User innovation
2733:Public interest
2698:Object-oriented
2418:
2399:
2380:Software design
2370:Research design
2323:Physical design
2278:Database design
2252:
2250:
2244:
2220:Property design
2215:Game art design
2169:
2163:
2086:
2079:
1994:
1987:
1944:Interior design
1895:Building design
1876:
1869:
1756:
1745:
1734:
1716:
1711:
1657:
1652:
1617:
1612:
1611:
1598:
1597:
1593:
1576:
1575:
1569:
1567:
1563:
1556:
1554:"Archived copy"
1552:
1551:
1547:
1539:
1532:
1528:
1527:
1523:
1510:
1509:
1505:
1488:
1487:
1483:
1477:scala-lang.org/
1471:
1467:
1458:
1456:
1451:
1450:
1446:
1438:
1434:
1424:
1422:
1411:
1407:
1398:
1396:
1389:
1385:
1375:
1371:
1354:
1353:
1349:
1336:
1335:
1331:
1318:
1317:
1313:
1304:
1302:
1293:
1292:
1288:
1279:
1277:
1268:
1267:
1263:
1250:
1246:
1233:
1229:
1220:
1216:
1211:
1144:
1014:or jscategory.
974:Wayback Machine
918:Bean Validation
755:
744:
743:
742:
737:
731:
728:
721:
700:
696:
685:
674:
668:
665:
646:
637:This section's
633:
629:
592:
588:
581:
572:
568:
564:
539:static analysis
456:
451:
421:
398:
355:class invariant
245:class invariant
189:
169:dynamic binding
121:
17:
12:
11:
5:
3607:
3597:
3596:
3591:
3574:
3573:
3571:
3570:
3563:
3556:
3549:
3542:
3535:
3527:
3524:
3523:
3520:
3519:
3517:
3516:
3511:
3506:
3501:
3496:
3491:
3486:
3481:
3476:
3471:
3466:
3461:
3456:
3451:
3446:
3441:
3436:
3431:
3426:
3421:
3420:
3419:
3414:
3404:
3399:
3394:
3387:
3386:
3384:Wicked problem
3381:
3376:
3371:
3366:
3361:
3356:
3351:
3346:
3341:
3336:
3331:
3326:
3321:
3316:
3311:
3306:
3301:
3296:
3291:
3286:
3281:
3275:
3272:
3271:
3269:Related topics
3261:
3260:
3257:
3256:
3253:
3252:
3250:
3249:
3244:
3239:
3234:
3229:
3224:
3219:
3214:
3208:
3206:
3202:
3201:
3199:
3198:
3193:
3188:
3186:Design Council
3183:
3178:
3173:
3167:
3165:
3161:
3160:
3158:
3157:
3156:
3155:
3153:European Union
3145:
3138:
3133:
3128:
3123:
3118:
3112:
3110:
3104:
3103:
3101:
3100:
3095:
3090:
3085:
3080:
3075:
3070:
3065:
3060:
3055:
3050:
3045:
3040:
3039:
3038:
3033:
3023:
3018:
3013:
3008:
3002:
3000:
2990:
2989:
2986:
2985:
2982:
2979:
2976:
2972:
2964:
2963:
2960:
2959:
2957:
2956:
2951:
2946:
2941:
2936:
2931:
2926:
2921:
2916:
2911:
2906:
2901:
2896:
2891:
2886:
2881:
2874:
2873:
2872:
2871:
2861:
2856:
2851:
2850:
2849:
2839:
2834:
2832:Usage-centered
2829:
2828:
2827:
2825:Design for All
2817:
2812:
2807:
2805:Transformation
2802:
2797:
2792:
2787:
2786:
2785:
2775:
2770:
2765:
2760:
2755:
2753:Research-based
2750:
2745:
2740:
2735:
2730:
2725:
2720:
2718:Platform-based
2715:
2710:
2705:
2700:
2695:
2690:
2685:
2680:
2675:
2670:
2668:KISS principle
2665:
2660:
2655:
2650:
2645:
2640:
2635:
2630:
2625:
2620:
2615:
2610:
2605:
2600:
2595:
2590:
2585:
2580:
2578:Fault-tolerant
2575:
2573:Error-tolerant
2570:
2569:
2568:
2558:
2556:Energy neutral
2553:
2548:
2543:
2538:
2537:
2536:
2526:
2521:
2516:
2515:
2514:
2512:Design fiction
2504:
2499:
2494:
2489:
2484:
2479:
2474:
2469:
2464:
2459:
2454:
2449:
2444:
2439:
2434:
2429:
2423:
2420:
2419:
2409:
2408:
2405:
2404:
2401:
2400:
2398:
2397:
2395:Systems design
2392:
2387:
2382:
2377:
2372:
2367:
2365:Protein design
2362:
2357:
2355:Process design
2352:
2347:
2342:
2337:
2332:
2331:
2330:
2325:
2320:
2318:Circuit design
2310:
2305:
2300:
2295:
2290:
2285:
2280:
2275:
2270:
2265:
2259:
2257:
2246:
2245:
2243:
2242:
2240:Textile design
2237:
2232:
2227:
2222:
2217:
2212:
2207:
2206:
2205:
2200:
2198:Costume design
2193:Fashion design
2190:
2181:
2175:
2173:
2165:
2164:
2162:
2161:
2156:
2151:
2146:
2141:
2136:
2131:
2126:
2121:
2120:
2119:
2114:
2104:
2103:
2102:
2091:
2089:
2081:
2080:
2078:
2077:
2075:Service design
2072:
2070:Sensory design
2067:
2062:
2060:Product design
2057:
2052:
2047:
2042:
2037:
2036:
2035:
2025:
2020:
2015:
2010:
2005:
1999:
1997:
1989:
1988:
1986:
1985:
1980:
1978:Spatial design
1975:
1970:
1969:
1968:
1958:
1956:Keyline design
1953:
1952:
1951:
1941:
1936:
1931:
1926:
1925:
1924:
1922:Computer-aided
1914:
1909:
1904:
1903:
1902:
1892:
1887:
1881:
1879:
1871:
1870:
1868:
1867:
1862:
1857:
1848:
1839:
1834:
1829:
1824:
1819:
1814:
1809:
1808:
1807:
1802:
1797:
1790:Graphic design
1787:
1782:
1780:Exhibit design
1777:
1772:
1767:
1761:
1759:
1747:
1746:
1736:
1735:
1733:
1732:
1727:
1721:
1718:
1717:
1710:
1709:
1702:
1695:
1687:
1681:
1680:
1675:
1670:
1664:
1656:
1655:External links
1653:
1651:
1650:
1633:
1626:
1618:
1616:
1613:
1610:
1609:
1591:
1545:
1521:
1503:
1481:
1465:
1444:
1432:
1413:Hodges, Nick.
1405:
1395:. Digital Mars
1383:
1369:
1347:
1329:
1311:
1286:
1261:
1244:
1227:
1213:
1212:
1210:
1207:
1206:
1205:
1200:
1195:
1190:
1185:
1180:
1175:
1170:
1168:Formal methods
1165:
1160:
1155:
1150:
1143:
1140:
1139:
1138:
1128:
1118:
1108:
1102:
1095:zope.interface
1072:
1058:
1044:
1034:
1028:
1015:
1001:
1000:
999:
998:
997:
994:
991:
985:
982:
976:
964:
958:
955:
952:
949:
946:
943:
934:
933:
932:
926:
921:
915:
909:
903:
885:
872:
871:via GContracts
866:
863:.NET Framework
855:Code Contracts
848:
847:
846:
840:
834:
833:extension of C
824:
815:
813:Boost.Contract
804:
803:
802:
793:
786:
773:
757:
756:
739:
738:
718:embedded lists
712:indiscriminate
703:
701:
694:
687:
686:
641:external links
636:
634:
627:
622:
596:
595:
593:
586:
580:
577:
557:
556:
551:
546:
532:
527:
522:
516:
510:
505:
500:
495:
490:
485:
480:
475:
470:
465:
455:
452:
450:
447:
433:system testing
420:
417:
397:
394:
386:
385:
382:
335:
334:
331:
326:
324:Postconditions
321:
316:
311:
304:
301:
267:
266:
263:
260:
249:
248:
241:
234:
211:
210:
207:
204:
188:
185:
184:
183:
177:
171:
161:
125:Bertrand Meyer
120:
117:
71:postconditions
15:
9:
6:
4:
3:
2:
3606:
3595:
3592:
3590:
3587:
3586:
3584:
3569:
3564:
3562:
3557:
3555:
3550:
3548:
3543:
3541:
3536:
3534:
3529:
3528:
3525:
3515:
3512:
3510:
3507:
3505:
3502:
3500:
3499:specification
3497:
3495:
3492:
3490:
3487:
3485:
3482:
3480:
3477:
3475:
3472:
3470:
3467:
3465:
3462:
3460:
3457:
3455:
3452:
3450:
3447:
3445:
3442:
3440:
3437:
3435:
3432:
3430:
3427:
3425:
3422:
3418:
3415:
3413:
3412:architectural
3410:
3409:
3408:
3405:
3403:
3400:
3398:
3395:
3393:
3389:
3388:
3385:
3382:
3380:
3379:Visualization
3377:
3375:
3372:
3370:
3367:
3365:
3362:
3360:
3357:
3355:
3352:
3350:
3347:
3345:
3342:
3340:
3337:
3335:
3332:
3330:
3327:
3325:
3322:
3320:
3317:
3315:
3312:
3310:
3307:
3305:
3302:
3300:
3299:Cultural icon
3297:
3295:
3292:
3290:
3287:
3285:
3282:
3280:
3277:
3276:
3273:
3266:
3262:
3248:
3245:
3243:
3240:
3238:
3235:
3233:
3230:
3228:
3225:
3223:
3220:
3218:
3215:
3213:
3210:
3209:
3207:
3203:
3197:
3194:
3192:
3189:
3187:
3184:
3182:
3179:
3177:
3174:
3172:
3169:
3168:
3166:
3164:Organizations
3162:
3154:
3151:
3150:
3149:
3146:
3144:
3143:
3139:
3137:
3134:
3132:
3131:Design patent
3129:
3127:
3124:
3122:
3121:Design around
3119:
3117:
3114:
3113:
3111:
3105:
3099:
3096:
3094:
3091:
3089:
3086:
3084:
3081:
3079:
3076:
3074:
3071:
3069:
3066:
3064:
3061:
3059:
3056:
3054:
3051:
3049:
3046:
3044:
3041:
3037:
3034:
3032:
3029:
3028:
3027:
3024:
3022:
3019:
3017:
3014:
3012:
3009:
3007:
3004:
3003:
3001:
2999:
2995:
2991:
2983:
2981:Organizations
2980:
2977:
2974:
2973:
2969:
2965:
2955:
2952:
2950:
2947:
2945:
2942:
2940:
2937:
2935:
2932:
2930:
2927:
2925:
2922:
2920:
2917:
2915:
2912:
2910:
2907:
2905:
2902:
2900:
2897:
2895:
2892:
2890:
2887:
2885:
2882:
2880:
2876:
2875:
2870:
2867:
2866:
2865:
2862:
2860:
2857:
2855:
2852:
2848:
2845:
2844:
2843:
2842:User-centered
2840:
2838:
2835:
2833:
2830:
2826:
2823:
2822:
2821:
2818:
2816:
2813:
2811:
2808:
2806:
2803:
2801:
2798:
2796:
2793:
2791:
2790:Tableless web
2788:
2784:
2781:
2780:
2779:
2776:
2774:
2771:
2769:
2766:
2764:
2761:
2759:
2756:
2754:
2751:
2749:
2746:
2744:
2741:
2739:
2736:
2734:
2731:
2729:
2726:
2724:
2721:
2719:
2716:
2714:
2713:Participatory
2711:
2709:
2706:
2704:
2701:
2699:
2696:
2694:
2691:
2689:
2686:
2684:
2681:
2679:
2676:
2674:
2671:
2669:
2666:
2664:
2661:
2659:
2656:
2654:
2651:
2649:
2646:
2644:
2641:
2639:
2636:
2634:
2631:
2629:
2626:
2624:
2621:
2619:
2616:
2614:
2611:
2609:
2606:
2604:
2603:For Six Sigma
2601:
2599:
2596:
2594:
2591:
2589:
2586:
2584:
2581:
2579:
2576:
2574:
2571:
2567:
2564:
2563:
2562:
2559:
2557:
2554:
2552:
2549:
2547:
2546:Domain-driven
2544:
2542:
2539:
2535:
2534:architect-led
2532:
2531:
2530:
2527:
2525:
2522:
2520:
2517:
2513:
2510:
2509:
2508:
2505:
2503:
2500:
2498:
2495:
2493:
2490:
2488:
2485:
2483:
2480:
2478:
2477:Configuration
2475:
2473:
2470:
2468:
2465:
2463:
2460:
2458:
2455:
2453:
2450:
2448:
2445:
2443:
2442:Brainstorming
2440:
2438:
2435:
2433:
2430:
2428:
2425:
2424:
2421:
2414:
2410:
2396:
2393:
2391:
2388:
2386:
2383:
2381:
2378:
2376:
2375:Social design
2373:
2371:
2368:
2366:
2363:
2361:
2358:
2356:
2353:
2351:
2348:
2346:
2343:
2341:
2338:
2336:
2333:
2329:
2326:
2324:
2321:
2319:
2316:
2315:
2314:
2311:
2309:
2306:
2304:
2301:
2299:
2298:Filter design
2296:
2294:
2291:
2289:
2286:
2284:
2281:
2279:
2276:
2274:
2273:Boiler design
2271:
2269:
2266:
2264:
2261:
2260:
2258:
2256:
2247:
2241:
2238:
2236:
2233:
2231:
2228:
2226:
2225:Scenic design
2223:
2221:
2218:
2216:
2213:
2211:
2210:Floral design
2208:
2204:
2201:
2199:
2196:
2195:
2194:
2191:
2189:
2185:
2182:
2180:
2177:
2176:
2174:
2172:
2166:
2160:
2157:
2155:
2152:
2150:
2147:
2145:
2142:
2140:
2137:
2135:
2132:
2130:
2127:
2125:
2122:
2118:
2115:
2113:
2110:
2109:
2108:
2105:
2101:
2098:
2097:
2096:
2093:
2092:
2090:
2088:
2082:
2076:
2073:
2071:
2068:
2066:
2063:
2061:
2058:
2056:
2053:
2051:
2048:
2046:
2043:
2041:
2038:
2034:
2031:
2030:
2029:
2026:
2024:
2021:
2019:
2016:
2014:
2011:
2009:
2006:
2004:
2001:
2000:
1998:
1996:
1990:
1984:
1981:
1979:
1976:
1974:
1971:
1967:
1964:
1963:
1962:
1959:
1957:
1954:
1950:
1947:
1946:
1945:
1942:
1940:
1937:
1935:
1932:
1930:
1927:
1923:
1920:
1919:
1918:
1917:Garden design
1915:
1913:
1910:
1908:
1905:
1901:
1900:Passive solar
1898:
1897:
1896:
1893:
1891:
1888:
1886:
1883:
1882:
1880:
1878:
1875:Environmental
1872:
1866:
1863:
1861:
1858:
1856:
1852:
1849:
1847:
1843:
1840:
1838:
1837:Retail design
1835:
1833:
1830:
1828:
1825:
1823:
1820:
1818:
1815:
1813:
1810:
1806:
1803:
1801:
1798:
1796:
1793:
1792:
1791:
1788:
1786:
1783:
1781:
1778:
1776:
1773:
1771:
1768:
1766:
1763:
1762:
1760:
1758:
1755:Communication
1752:
1748:
1741:
1737:
1731:
1728:
1726:
1723:
1722:
1719:
1715:
1708:
1703:
1701:
1696:
1694:
1689:
1688:
1685:
1679:
1676:
1674:
1671:
1668:
1665:
1662:
1659:
1658:
1648:
1644:
1640:
1639:
1634:
1631:
1627:
1624:
1620:
1619:
1605:
1601:
1595:
1586:
1580:
1566:on 2016-03-28
1562:
1555:
1549:
1538:
1531:
1525:
1517:
1513:
1507:
1499:
1495:
1491:
1485:
1478:
1474:
1473:Strong typing
1469:
1454:
1448:
1442:
1436:
1420:
1416:
1409:
1394:
1387:
1381:
1380:
1373:
1365:
1361:
1357:
1351:
1343:
1339:
1333:
1325:
1321:
1315:
1301:on 2016-12-21
1300:
1296:
1290:
1276:on 2016-12-21
1275:
1271:
1265:
1258:
1254:
1248:
1241:
1237:
1231:
1224:
1218:
1214:
1204:
1201:
1199:
1196:
1194:
1193:Strong typing
1191:
1189:
1186:
1184:
1181:
1179:
1176:
1174:
1171:
1169:
1166:
1164:
1161:
1159:
1156:
1154:
1151:
1149:
1146:
1145:
1136:
1132:
1129:
1126:
1122:
1119:
1116:
1112:
1109:
1106:
1103:
1100:
1096:
1092:
1088:
1084:
1080:
1076:
1073:
1070:
1066:
1062:
1059:
1056:
1055:Damian Conway
1052:
1048:
1045:
1042:
1038:
1035:
1033:, via macros.
1032:
1029:
1026:
1023:
1019:
1016:
1013:
1009:
1005:
1002:
995:
992:
989:
986:
983:
980:
977:
975:
971:
968:
965:
963:
959:
956:
953:
950:
947:
944:
941:
938:
937:
935:
930:
927:
925:
922:
919:
916:
913:
910:
907:
904:
902:
898:
895:
894:
892:
891:
889:
886:
884:
880:
876:
873:
870:
867:
864:
860:
856:
852:
849:
844:
841:
838:
835:
832:
828:
825:
822:
819:
816:
814:
811:
810:
808:
805:
800:
797:
794:
792:
791:
787:
785:
782:
779:
778:
777:
774:
771:
767:
764:
763:
762:
753:
750:
735:
725:
719:
715:
713:
709:
704:This section
702:
693:
692:
683:
680:
672:
662:
658:
657:inappropriate
654:
650:
644:
642:
635:
626:
625:
620:
618:
611:
610:
605:
604:
599:
594:
585:
584:
576:
562:
555:
552:
550:
547:
544:
540:
536:
533:
531:
528:
526:
523:
520:
517:
514:
511:
509:
506:
504:
501:
499:
496:
494:
491:
489:
486:
484:
481:
479:
476:
474:
471:
469:
466:
464:
461:
460:
459:
446:
444:
439:
436:
434:
430:
426:
416:
412:
409:
407:
402:
393:
391:
383:
380:
379:
378:
375:
373:
368:
365:
363:
358:
356:
350:
346:
344:
340:
332:
330:
327:
325:
322:
320:
319:Preconditions
317:
315:
312:
309:
305:
302:
299:
298:
297:
294:
292:
288:
287:code comments
284:
280:
276:
272:
264:
261:
258:
257:
256:
254:
246:
242:
239:
238:postcondition
235:
232:
228:
227:
226:
224:
220:
216:
208:
205:
202:
201:
200:
198:
194:
182:
178:
176:
172:
170:
166:
162:
159:
158:
157:
155:
151:
147:
142:
140:
136:
135:
130:
126:
116:
114:
110:
106:
102:
97:
95:
91:
87:
82:
80:
76:
72:
68:
67:preconditions
64:
60:
56:
51:
49:
45:
41:
37:
33:
29:
21:
3369:STEAM fields
3339:Lean startup
3324:Indie design
3140:
3107:Intellectual
2859:Value-driven
2837:Use-centered
2743:Regenerative
2723:Policy-based
2683:Mind mapping
2588:For assembly
2529:Design–build
2451:
2447:By committee
2432:Adaptive web
2230:Sound design
2188:glass design
2186: /
2171:applied arts
2112:Level design
1983:Urban design
1934:Hotel design
1885:Architecture
1860:Video design
1853: /
1844: /
1812:Illustration
1805:Print design
1775:Brand design
1646:
1642:
1637:
1622:
1615:Bibliography
1603:
1594:
1568:. Retrieved
1561:the original
1548:
1524:
1515:
1506:
1493:
1484:
1468:
1457:. Retrieved
1447:
1435:
1423:. Retrieved
1419:the original
1408:
1397:. Retrieved
1386:
1378:
1372:
1359:
1350:
1341:
1332:
1323:
1314:
1303:. Retrieved
1299:the original
1289:
1278:. Retrieved
1274:the original
1264:
1256:
1247:
1239:
1235:
1230:
1222:
1217:
854:
837:Loki Library
827:Digital Mars
817:
795:
788:
784:preprocessor
780:
760:
745:
732:January 2022
729:
722:Please help
706:may contain
705:
675:
669:January 2022
666:
651:by removing
638:
614:
607:
601:
600:Please help
597:
558:
457:
440:
437:
425:unit testing
422:
413:
410:
403:
399:
387:
376:
369:
366:
359:
353:concepts of
351:
347:
336:
314:Side effects
295:
268:
253:Hoare triple
250:
231:precondition
212:
196:
192:
190:
143:
138:
132:
122:
112:
108:
98:
93:
89:
83:
52:
43:
39:
35:
31:
27:
26:
3407:competition
3364:Slow design
3314:Form factor
3284:Concept art
3093:HTML editor
2773:Sustainable
2608:For testing
2452:By contract
2308:Work design
2283:Drug design
2255:engineering
2129:Icon design
2107:Game design
2085:Interaction
2033:Sustainable
1966:Sustainable
1855:Type design
1832:Photography
1827:News design
1770:Book design
1765:Advertising
1744:Disciplines
1173:Hoare logic
1091:dpcontracts
1087:PyContracts
1018:Common Lisp
979:Modern Jass
951:jContractor
883:gocontracts
714:information
443:test oracle
193:obligations
187:Description
165:inheritance
154:Hoare logic
3583:Categories
3567:Wiktionary
3560:Wikisource
3514:technology
3484:principles
3083:Storyboard
2909:management
2904:leadership
2869:Privacy by
2708:Parametric
2678:Metadesign
2648:Integrated
2638:High-level
2623:Generative
2618:Functional
2487:Continuous
2482:Contextual
2457:C-K theory
2417:Approaches
2159:Web design
2013:CMF design
1993:Industrial
1851:Typography
1570:2016-03-25
1459:2019-05-24
1425:20 January
1399:2014-11-10
1305:2009-06-22
1280:2009-06-22
1133:, via the
1049:, via the
1004:JavaScript
948:Contract4J
708:unverified
603:improve it
329:Invariants
306:Error and
291:test suite
275:assertions
75:invariants
3553:Wikiquote
3539:Wikibooks
3489:rationale
3454:knowledge
3429:education
3349:OODA loop
3073:Prototype
3058:Flowchart
3016:Blueprint
2884:computing
2820:Universal
2768:Safe-life
2673:Low-level
2663:Iterative
2643:Inclusive
2628:Geodesign
2519:Defensive
2467:Co-design
2437:Affective
1115:contracts
1083:icontract
781:DBC for C
653:excessive
609:talk page
545:programs)
308:exception
3546:Wikinews
3479:paradigm
3459:language
3439:engineer
3434:elements
3424:director
3109:property
2954:thinking
2944:strategy
2929:research
2889:controls
2847:Empathic
2778:Systemic
2738:Rational
2693:New Wave
2507:Critical
1730:Designer
1643:Contract
1630:wikibook
1579:cite web
1537:Archived
1498:Archived
1364:Archived
1257:Computer
1142:See also
1123:via the
1113:via the
988:JavaTESK
970:Archived
908:(Cofoja)
893:Active:
790:GNU Nana
498:Fortress
463:Ada 2012
197:benefits
3532:Commons
3504:studies
3449:history
3417:student
3402:classic
3390:Design
3304:.design
3232:Graphex
2934:science
2924:pattern
2919:methods
2894:culture
2877:Design
2688:Modular
2541:Diffuse
2462:Closure
2184:Ceramic
1842:Signage
1725:Outline
1099:PEP-316
1069:Praspel
1065:PhpDeal
1031:Nemerle
924:valid4j
901:AspectJ
843:DBC C++
647:Please
639:use of
573::around
565::before
513:Oxygene
508:Mercury
473:Clojure
119:History
103:), the
86:assumes
3509:studio
3494:review
3474:museum
3397:change
3205:Awards
3078:Sketch
3063:Mockup
3043:CAutoD
2984:Awards
2949:theory
2939:sprint
2914:marker
2879:choice
2253:&
2251:design
2087:design
1995:design
1877:design
1795:Motion
1757:design
1714:Design
1604:GitHub
1455:. EPFL
1255:", in
1117:crate.
1075:Python
1063:, via
1041:macros
1039:, via
1006:, via
869:Groovy
768:, via
569::after
525:Sather
519:Racket
503:Kotlin
493:Eiffel
406:assert
215:method
55:formal
3392:brief
3279:Agile
2998:Tools
2975:Tools
2613:For X
2249:Other
2168:Other
1564:(PDF)
1557:(PDF)
1540:(PDF)
1533:(PDF)
1238:, in
1209:Notes
1135:XOTcl
1121:Swift
1093:, or
940:Jtest
929:SafeR
914:(JML)
899:with
831:CTESK
823:tools
818:eCv++
801:tools
537:(via
535:SPARK
530:Scala
488:Dafny
478:Cobra
269:Many
219:class
217:of a
65:with
3469:load
3464:life
3444:firm
3031:CAID
2899:flow
2815:TRIZ
2703:Open
1645:and
1589:p. 2
1585:link
1427:2016
1111:Rust
1105:Ruby
1079:deal
1051:CPAN
1047:Perl
1022:CLOS
967:Jass
897:OVal
888:Java
877:via
865:4.0)
770:GNAT
571:and
549:Vala
468:Ciao
431:and
195:and
152:and
88:all
73:and
42:and
3026:CAD
3006:AAD
2783:SOD
2763:RWD
2633:HCD
2100:EED
1949:EID
1131:Tcl
1089:,
1061:PHP
1037:Nim
954:C4J
881:or
879:dbc
857:(a
807:C++
796:eCv
766:Ada
716:in
710:or
655:or
554:VDM
543:Ada
541:of
221:in
32:DbC
3585::
1628:A
1602:.
1581:}}
1577:{{
1535:.
1514:.
1496:.
1492:.
1358:.
1340:.
1322:.
1085:,
1081:,
1067:,
890::
875:Go
851:C#
809::
612:.
567:,
427:,
345:.
148:,
69:,
50:.
38:,
1706:e
1699:t
1692:v
1649:.
1606:.
1587:)
1573:.
1518:.
1479:.
1462:.
1429:.
1402:.
1344:.
1326:.
1308:.
1283:.
1127:.
1043:.
1027:.
776:C
752:)
746:(
734:)
730:(
720:.
682:)
676:(
671:)
667:(
663:.
645:.
619:)
615:(
483:D
247:.
30:(
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.