Knowledge

Design by contract

Source đź“ť

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:
USPTO Trademark Application and Registration Retrieval
1338:"Trademark Status & Document Retrieval - 78342308" 1324:
USPTO Trademark Application and Registration Retrieval
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:(

Index


designing software
formal
software components
abstract data types
preconditions
postconditions
invariants
conceptual metaphor
assumes
distributed computing
inverse approach
Bertrand Meyer
Eiffel programming language
Object-Oriented Software Construction
formal verification
formal specification
Hoare logic
inheritance
dynamic binding
exception handling
software documentation
method
class
object-oriented programming
precondition
postcondition
class invariant
Hoare triple
programming languages

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑