Janina Voigt, Warwick Irwin, Neville Churcher


The idea of using contracts to specify interfaces and interactions between software components was proposed several decades ago. Since then, a number of tools providing support for software contracts have been developed. In this paper, we explore eleven such technologies to investigate their approach to various aspects of software contracts. We present the similarities as well as the areas of significant disagreement and highlight the shortcomings of existing technologies. We conclude that the large variety of approaches to even some basic concepts of software contracts indicate a lack of maturity in the field and the need for more research.


  1. Barnett, M., Chang, B.-Y. E., DeLine, R., Jacobs, B., and Leino, K. R. M. (2006). Boogie: A modular reusable verifier for object-oriented programs. In FMCO 2005, volume 4111 of Lecture notes in computer science. Springer Verlag.
  2. Barnett, M., Deline, R., Fähndrich, M., Leino, K. R. M., and Schulte, W. (2004a). Verification of object-oriented programs with invariants. Journal of Object Technology, 3(6):27-56.
  3. Barnett, M., Fähndrich, M., Halleux, P. d., Logozzo, F., and Tillmann, N. (2009). Exploiting the synergy between automated-test-generation and programmingby-contract. In Proceedings of ICSE 2009, 31th International Conference on Software Engineering, Companion, pages 401-402.
  4. Barnett, M., Leino, K. R. M., and Schulte, W. (2004b). The Spec # programming system: an overview. In CASSIS 2004, volume 3362 of Lecture notes in computer science. Springer Verlag.
  5. Barnett, M., Naumann, D., Schulte, W., and Sun, Q. (2004c). 99.44% pure: useful abstractions in specifications. In ECOOP workshop on Formal Techniques for Java-like Programs (FTfJP) 2004.
  6. Bartetzko, D., Fischer, C., Möller, M., and Wehrheim, H. (2001). Jass - Java with assertions. Electronic Notes in Theoretical Computer Science, 55(2).
  7. Bruce, K. B. (2002). Foundations of object-oriented languages: types and semantics. MIT Press, Cambridge, MA, USA.
  8. Canning, P. S., Cook, W. R., Hill, W. L., and Olthoff, W. G. (1989). Interfaces for strongly-typed object-oriented programming. In OOPSLA 7889: Conference proceedings on Object-oriented programming systems, languages and applications, pages 457-467, New York, NY, USA. ACM.
  9. Duncan, A. and Hoelzle, U. (1998). Adding contracts to Java with Handshake. Technical Report TRCS98-32, University of California at Santa Barbara, Santa Barbara, CA, USA.
  10. Fähndrich, M., Barnett, M., and Logozzo, F. (2010). Embedded contract languages. In SAC 7810: Proceedings of the 2010 ACM Symposium on Applied Computing, pages 2103-2110, New York, NY, USA. ACM.
  11. Findler, R. and Felleisen, M. (2000). Behavioral interface contracts for Java. Technical Report TR00-366, Rice University.
  12. Flanagan, C., Leino, K. R. M., Lillibridge, M., Nelson, G., Saxe, J. B., and Stata, R. (2002). Extended static checking for Java. In PLDI 7802: Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation, pages 234-245, New York, NY, USA. ACM.
  13. Hoare, C. A. R. (1969). An axiomatic basis for computer programming. Communications of the ACM, 12(10):576-580.
  14. Hoare, C. A. R. (1972). Proof of correctness of data representations. Acta Informatica, 1(4):271 - 281.
  15. Karaorman, M. and Abercrombie, P. (2005). jContractor: Introducing design-by-contract to Java using reflective bytecode instrumentation. Formal Methods in System Design, 27(3):275-312.
  16. Karaorman, M., Hölzle, U., and Bruno, J. L. (1999). jContractor: A reflective Java library to support design by contract. In Reflection 7899: Proceedings of the Second International Conference on Meta-Level Architectures and Reflection, pages 175-196, London, UK. Springer-Verlag.
  17. Kramer, R. (1998). iContract - the Java(tm) design by contract(tm) tool. In TOOLS 7898: Proceedings of the Technology of Object-Oriented Languages and Systems, page 295, Washington, DC, USA. IEEE Computer Society.
  18. Leavens, G., Baker, A., and Ruby, C. (2006). Preliminary design of JML: a behavioral interface specification language for Java. SIGSOFT Software Engineering Notes, 31(3):1-38.
  19. Leavens, G. and Cheon, Y. (2006). Design by contract with JML.
  20. Leavens, G., Cheon, Y., Clifton, C., Ruby, C., and Cok, D. (2005). How the design of JML accommodates both runtime assertion checking and formal verification. Science of Computer Programming, 55(1-3):185-208.
  21. Leino, K. R. M. and Monahan, R. (2008). Program verification using the Spec # programming system. http://research.microsoft.com/enus/projects/specsharp/etaps-specsharp-tutorial.ppt. Machine Systems (2009). Design by contract for Java using JMSAssert.
  22. Martin, R. (1996). The Liskov Substitution Principle. C++ Report, 8(3):16 - 17, 20 - 23.
  23. Meyer, B. (1989). Writing correct software. Dr. Dobb's Journal, 14(12):48-60.
  24. Meyer, B. (1992). Applying “design by contract”. Computer, 25(10):40-51.
  25. Meyer, B. (1997). Object-oriented software construction. Prentice Hall, 2nd edition edition.
  26. Meyer, B., Ciupa, I., Leitner, A., and Liu, L. L. (2007). Automatic testing of object-oriented software. In SOFSEM 7807: Proceedings of the 33rd conference on Current Trends in Theory and Practice of Computer Science, pages 114-129, Berlin, Heidelberg. SpringerVerlag.
  27. Microsoft Corporation (2010). Code contracts user manual. http://research.microsoft.com/enus/projects/contracts/userdoc.pdf.
  28. Object Management Group (2010). ject constraint language version http://www.omg.org/spec/OCL/2.2.
  29. Offutt, A. J., Xiong, Y., and Liu, S. (1999). Criteria for generating specification-based tests. In ICECCS 7899: Proceedings of the 5th International Conference on Engineering of Complex Computer Systems, page 119, Washington, DC, USA. IEEE Computer Society.
  30. Tillmann, N. and Halleux, J. d. (2008). Pex - white box test generation for .NET. In Proceedings of TAP 2008: the 2nd International Conference on Tests and Proofs, Lecture Notes in Computer Science, pages 134 - 153. Springer Verlag.
  31. Turing, A. (1949). Checking a large routine. In Report of a Conference on High Speed Automatic Calculating Machines, pages 67 - 69.
  32. Warmer, J. and Kleppe, A. (2003). The Object Constraint Language: Getting Your Models Ready for MDA. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA.

Paper Citation

in Harvard Style

Voigt J., Irwin W. and Churcher N. (2011). A CRITICAL COMPARISON OF EXISTING SOFTWARE CONTRACT TOOLS . In Proceedings of the 6th International Conference on Evaluation of Novel Approaches to Software Engineering - Volume 1: ENASE, ISBN 978-989-8425-57-7, pages 38-47. DOI: 10.5220/0003421200380047

in Bibtex Style

author={Janina Voigt and Warwick Irwin and Neville Churcher},
booktitle={Proceedings of the 6th International Conference on Evaluation of Novel Approaches to Software Engineering - Volume 1: ENASE,},

in EndNote Style

JO - Proceedings of the 6th International Conference on Evaluation of Novel Approaches to Software Engineering - Volume 1: ENASE,
SN - 978-989-8425-57-7
AU - Voigt J.
AU - Irwin W.
AU - Churcher N.
PY - 2011
SP - 38
EP - 47
DO - 10.5220/0003421200380047