Programming by Contract
Scott David Daniels
Scott.Daniels at Acm.Org
Fri Aug 14 00:09:45 EDT 2009
Charles Yeomans wrote:
>
> On Aug 11, 2009, at 3:30 PM, Ethan Furman wrote:
>
>> Ethan Furman wrote:
>>> Greetings!
>>> I have seen posts about the assert statement and PbC (or maybe it was
>>> DbC), and I just took a very brief look at pycontract
>>> (http://www.wayforward.net/pycontract/) and now I have at least one
>>> question: Is this basically another way of thinking about unit
>>> testing, or is the idea of PbC more along the lines of *always*
>>> checking the input/output of functions to ensure they are correct?
>>> (*Contstant vigilance!* as Prof Moody would say ;)
>>> I know asserts can be turned off, so they obviously won't work for
>>> the latter case, and having seen the sample of pycontract it seems it
>>> only does its thing during debugging.
>>> So is Design (Programming) by Contract a fancy way of saying
>>> "Document your inputs/outputs!" or is there more to it?
>>> ~Ethan~
>>
>> Hmmm...
>>
>> Well, from the (apparently) complete lack of interest, I shall take
>> away the (better?) documentation ideas and unit testing ideas, and not
>> worry about the rest. :)
>>
>>
>
>
>
>
> Design by contract is complementary to unit testing (I notice that the
> author of PEP 316 appears confused about this). DbC is, roughly
> speaking, about explicit allocation of responsibility. Consider this
> contrived example.
>
> def foo(s):
> require(s is not None)
> //code
> ensure(hasattr(returnValue, '__iter__'))
yo might want two flags, REQUIRE_OFF, and ENSURE_ON that control
testing, and change the code above to:
require(REQUIRE_OFF or s is not None)
//code
ensure(ENSURE_OFF or hasattr(returnValue, '__iter__'))
Python has no good way to turn off argument calculation by
manipulating function definition (at least that I know of).
--Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list