Barnett, M., Naumann, D., Schulte, W., and Sun, Q.
(2004c). 99.44% pure: useful abstractions in speci-
fications. In ECOOP workshop on Formal Techniques
for Java-like Programs (FTfJP) 2004.
Bartetzko, D., Fischer, C., M
¨
oller, M., and Wehrheim, H.
(2001). Jass - Java with assertions. Electronic Notes
in Theoretical Computer Science, 55(2).
Bruce, K. B. (2002). Foundations of object-oriented lan-
guages: types and semantics. MIT Press, Cambridge,
MA, USA.
Canning, P. S., Cook, W. R., Hill, W. L., and Olthoff, W. G.
(1989). Interfaces for strongly-typed object-oriented
programming. In OOPSLA ’89: Conference proceed-
ings on Object-oriented programming systems, lan-
guages and applications, pages 457–467, New York,
NY, USA. ACM.
Duncan, A. and Hoelzle, U. (1998). Adding contracts to
Java with Handshake. Technical Report TRCS98-32,
University of California at Santa Barbara, Santa Bar-
bara, CA, USA.
F
¨
ahndrich, M., Barnett, M., and Logozzo, F. (2010). Em-
bedded contract languages. In SAC ’10: Proceedings
of the 2010 ACM Symposium on Applied Computing,
pages 2103–2110, New York, NY, USA. ACM.
Findler, R. and Felleisen, M. (2000). Behavioral interface
contracts for Java. Technical Report TR00-366, Rice
University.
Flanagan, C., Leino, K. R. M., Lillibridge, M., Nelson, G.,
Saxe, J. B., and Stata, R. (2002). Extended static
checking for Java. In PLDI ’02: Proceedings of the
ACM SIGPLAN 2002 Conference on Programming
language design and implementation, pages 234–245,
New York, NY, USA. ACM.
Hoare, C. A. R. (1969). An axiomatic basis for com-
puter programming. Communications of the ACM,
12(10):576–580.
Hoare, C. A. R. (1972). Proof of correctness of data repre-
sentations. Acta Informatica, 1(4):271 – 281.
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.
Karaorman, M., H
¨
olzle, U., and Bruno, J. L. (1999). jCon-
tractor: A reflective Java library to support design by
contract. In Reflection ’99: Proceedings of the Sec-
ond International Conference on Meta-Level Archi-
tectures and Reflection, pages 175–196, London, UK.
Springer-Verlag.
Kramer, R. (1998). iContract - the Java(tm) design by con-
tract(tm) tool. In TOOLS ’98: Proceedings of the
Technology of Object-Oriented Languages and Sys-
tems, page 295, Washington, DC, USA. IEEE Com-
puter Society.
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.
Leavens, G. and Cheon, Y. (2006). Design by contract with
JML.
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.
Leino, K. R. M. and Monahan, R. (2008). Pro-
gram verification using the Spec # program-
ming system. http://research.microsoft.com/en-
us/projects/specsharp/etaps-specsharp-tutorial.ppt.
Man Machine Systems (2009). Design
by contract for Java using JMSAssert.
http://www.mmsindia.com/DBCForJava.html.
Martin, R. (1996). The Liskov Substitution Principle. C++
Report, 8(3):16 – 17, 20 – 23.
Meyer, B. (1989). Writing correct software. Dr. Dobb’s
Journal, 14(12):48–60.
Meyer, B. (1992). Applying “design by contract”. Com-
puter, 25(10):40–51.
Meyer, B. (1997). Object-oriented software construction.
Prentice Hall, 2nd edition edition.
Meyer, B., Ciupa, I., Leitner, A., and Liu, L. L. (2007). Au-
tomatic testing of object-oriented software. In SOF-
SEM ’07: Proceedings of the 33rd conference on Cur-
rent Trends in Theory and Practice of Computer Sci-
ence, pages 114–129, Berlin, Heidelberg. Springer-
Verlag.
Microsoft Corporation (2010). Code contracts
user manual. http://research.microsoft.com/en-
us/projects/contracts/userdoc.pdf.
Object Management Group (2010). Ob-
ject constraint language version 2.2.
http://www.omg.org/spec/OCL/2.2.
Offutt, A. J., Xiong, Y., and Liu, S. (1999). Criteria for
generating specification-based tests. In ICECCS ’99:
Proceedings of the 5th International Conference on
Engineering of Complex Computer Systems, page 119,
Washington, DC, USA. IEEE Computer Society.
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.
Turing, A. (1949). Checking a large routine. In Report of
a Conference on High Speed Automatic Calculating
Machines, pages 67 – 69.
Warmer, J. and Kleppe, A. (2003). The Object Con-
straint Language: Getting Your Models Ready for
MDA. Addison-Wesley Longman Publishing Co.,
Inc., Boston, MA, USA.
A CRITICAL COMPARISON OF EXISTING SOFTWARE CONTRACT TOOLS
47