[Zope-dev] Re: zope.sendmail Retry fixes and new state machine.

Dieter Maurer dieter at handshake.de
Thu Mar 13 15:19:54 EDT 2008


Jim Fulton wrote at 2008-3-11 09:58 -0400:
>
>On Mar 11, 2008, at 9:46 AM, Andreas Jung wrote:
>...
>> You can also document your edgecase in the same way as comments  
>> within your
>> unittests.
>
>This is true in theory, but in practice, it almost never happens.
>
>There is no guarantee that doctests will contain useful text, but they  
>encourage text which has a greater chance of being useful than no text  
>at all.

"DocTests" essentially provide examples.
I find documentation that only consists of examples very bad
documentation -- not concise, at the wrong abstraction level,
expecting me to induce the concepts from the examples rather
than to describe the concepts and *then* (maybe) make some
examples.


Faced with the Zope 3/inspect incompatibility
("https://bugs.launchpad.net/zope3/+bug/181371")
I have hit such a bad documentation:

  I have two classes "C1" and "C2", "C2" inherits from "C1".
  "C1" magically gets an attribute "a", but "C2" does not.
  Moreover, "C2.a" raises an AttributeError.

  There is a DocTest, that shows me that "C2.a" should indeed
  raise an "AttributeError". Thus, I can see that the author
  had something in mind when he implemented this counter intuitive
  behaviour.
  But, there is nothing that tells me what this may have been
  and why "C1" is treated differently from "C2".


Documentation and tests have different purposes:

 Documentation tells relevant facts to the reader. It should be
 on an adequate abstraction level. It should clearly
 describe the concepts and include examples at places where
 this is helpful to unterstand the concepts.
 It should not consist of examples only and leave the concepts
 undescribed.

 The primary purpose of tests it to ensure that there are few
 undetected bugs. Some tests need to go to the same detail level
 as the implementation itself in order to probe for bugs
 introduced by implementation edgecases -- a level too detailed
 for a good documentation (apart from source code documentation itself).

 If a good test coveradge it obtained by performing the same
 tests over and over again on different data sets, representing
 relevant uses cases, the better. I do not need and I do not
 want essentially the same documentation for each of these sets.
 The ZODB test suite makes very good use of this principle,
 executing e.g. the "ConflictResolution" tests on
 both "FileStorage" and "ZEOStorage".
 The documentation is concise and clear:
 class FileStorageTests(..., ConflictResolutionTests, ...): ...

 By the way, a good documentation uses the same principle.
 It simply states "a 'FileStorage' supports conflict resolution (see
 XXXX for a description of the 'conflict resolution concept)"
 and does not show examples for conflict resolution for each an
 every conflict resolving storage.



-- 
Dieter


More information about the Zope-Dev mailing list