Python 高手编程系列四百八十五:文档驱动开发

与其他语言相比,Python 中的 doctests 是一个真正的优势。事实上,文档可以使用
代码示例,这些代码示例也可作为测试运行,这改变了 TDD 的开发方式。例如,文档的一
部分可以通过在开发周期中的 doctests 来完成。这种方法还确保所提供的示例总是最新
的并且能够真正工作。
通过 doctests 而不是常规的单元测试来构建软件称为文档驱动开发(Document-Driven Development,DDD)。开发人员在编写代码时,用简单的文字解释代码正在做什么。
写一个来历
在 DDD 中,可以通过构建一个代码的来历来编写 doctests,来历主要说明代码如
何工作以及何时应该使用代码。原则上,用简单的文字描述就可以,然后几个代码使用
示例分布在整个文本中。一个好的做法是开始写代码如何工作的文本,然后添加一些代
码示例。
看一个真实的 doctests 的例子,让我们看看 atomisator 包(参考 https://bitbucket.org/
tarek/atomisator)。其 atomisator.parser 子包(在 packages/atomisator.parser/
atomisator/parser/docs/README.txt 下)的文档文本如下所示:

atomisator.parser

The parser knows how to return a feed content, with
the parse function, available as a top-level function::

from atomisator.parser import Parser
This function takes the feed url and returns an iterator
over its content. A second parameter can specify a maximum
number of entries to return. If not given, it is fixed to 10::
import os
res = Parser()(os.path.join(test_dir, ‘sample.xml’))
res
<itertools.imap …>
Each item is a dictionary that contain the entry::
entry = res.next()
entry[‘title’]
u’CSSEdit 2.0 Released’
The keys available are:
keys = sorted(entry.keys())
list(keys)
[‘id’, ‘link’, ‘links’, ‘summary’, ‘summary_detail’, ‘tags’,
‘title’, ‘title_detail’]
Dates are changed into datetime::
type(entry[‘date’])

稍后,doctest 将演变以考虑新的元素或所需的变化。对于想使用这个包的开发者来
说,这个 doctest 也是一个很好的文档,所以,应该发自内心地改变对 doctest 的用法。
在文档中写测试的常见缺陷是将其转换为不可读的文本。如果发生这种情况,应该把
这些测试视为文档的一部分。
有人说,一些完全通过 doctests 工作的开发人员通常将他们的 doctest 分为两类:
可读的和可用的,所以,它们可以是包文档的一部分,而那些不可读的,只是用于构建并
测试软件。
许多开发人员认为,为了后者,应该放弃 doctests 以支持常规单元测试。其他人甚至
使用专门的 doctests 修复 bug。
所以,doctests 和常规测试之间的平衡是一个饱受争议的问题,这取决于由团队,
只要发布的 doctests 部分是可读的。
小结
本章提倡使用 TDD,并提供了很多相关的信息。
● unittest 陷阱。
● 第三方工具:nose 和 py.test。
● 如何构建仿真和模拟。
● 文档驱动开发。
由于我们已经知道如何构建、打包和测试软件,在接下来的两章中,我们将关注如何
找到性能瓶颈的方法并优化你的程序。
优化——一般原则与分析技术
“我们应该忘记小的效能,大约 97%的情况:过早优化是万恶之源。”
—Donald Knuth
本章是关于优化的,并且提供一套一般原则和分析技术。它给出了每个开发人员应该
注意的 3 个优化规则,并提供优化指南。最后,本章会关注如何找到瓶颈。
3 个优化规则
不管结果如何,优化需要付出一些代价。当一段代码正常工作时,如果不去管它,而
不是试图花费很多成本使其更快,它可能(有时)运行的更好。进行任何类型的优化时,
请注意以下几个规则。
• 首先要能工作。
• 从用户的角度考虑。
• 保持代码的可读性。

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值