What kind of contract do you write? Could these contracts, or some of them, be produced automatically?
The idea of inferring contracts from programs is intriguing; it also raises serious epistemological issues. In fact, one may question whether it makes any sense at all. I will leave the question of principle to another post, in connection with some of our as yet unpublished work. This is, in any case, an active research field, in particular because of the big stir that Mike Ernst’s Daikon created when it appeared a few years ago.
Daikon  infers loop invariants dynamically: it observes executions; by looking up a repertoire of invariant patterns, it finds out what properties the loops maintain. It may sound strange to you (it did to Mike’s PhD thesis supervisor  when he first heard about the idea), but it yields remarkable results.
In a recent paper presented at ISSTA , we took advantage of Daikon to compare the kinds of contract people write with those that a machine could infer. The work started out as Nadia Polikarpova’s master’s thesis at ITMO in Saint Petersburg , in the group of Prof. Anatoly Shalyto and under the supervision of Ilinca Ciupa from ETH. (Ilinca recently completed her PhD thesis on automatic testing , and is co-author of the article.) The CITADEL tool — the name is an acronym, but you will have to look up the references to see what it means — applies Daikon to Eiffel program.
CITADEL is the first application of Daikon to a language where programmers can write contracts. Previous interfaces were for contract-less languages such as Java where the tool must synthesize everything. In Eiffel, programmers do write contracts (as confirmed by Chalin’s experimental study ). Hence the natural questions: does the tool infer the same contracts as a programmer will naturally write? If not, which kinds of contract is each best at?
To answer these questions, the study looked at three sources of contracts:
- Contracts already present in the code (in the case of widely used libraries such as EiffelBase, equipped with contracts throughout).
- Those devised by students, in a small-scale experiment.
- The contracts inferred by Daikon.
What do you think? Before looking up our study, you might want to make your own guess at the answers. You will not find a spoiler here; for the study’s results, you should read our paper . All right, just a hint: machines and people are (in case you had not noticed this before) good at different things.
 Michael Ernst and others, Daikon bibliography on Ernst’s research page at the University of Washington.
 David Notkin, see his web page.
 A Comparative Study of Programmer-Written and Automatically Inferred Contracts, by Nadia Polikarpova, Ilinca Ciupa and me, in ISSTA 2009: International Symposium on Software Testing and Analysis, Chicago, July 2009, online copy available.
 ITMO (Saint-Petersburg State University of Information Technologies, Mechanics and Optics), see here.
 Ilinca Ciupa, Strategies for random contract-based testing; PhD thesis, ETH Zurich, December 2008. For a link to the text and to her other publications see Ilinca’s ETH page.
 Patrice Chalin, Are practitioners writing contracts? In Rigorous Development of Complex Fault-Tolerant Systems, eds. Jones et al., Lecture Notes in Computer Science 4157, Springer Verlag, 2006, pages 100-113.