Python基础教程 做好应对变化的准备

16.1.2 做好应对变化的准备

自动化测试不仅可在你编写程序时提供极大的帮助,还有助于在你修改代码时避免累积错误,这在程序规模很大时尤其重要。正如第19章将讨论的,你必须做好修改代码的心理准备,而不是固守既有代码,但修改是有风险的。修改代码时,常常会引入一两个意想不到的bug。如果程序设计良好(使用了合适的抽象和封装),修改带来的影响将是局部的,只会影响很小一段代码。这意味着你能够确定bug的范围,因此调试起来更容易。

代码覆盖率

覆盖率( coverage)是一个重要的测试概念。运行测试时,很可能达不到运行所有代码的理想状态。(实际上,最理想的情况是,使用各种可能的输入检查每种可能的程序状态,但这根本不可能做到。)优秀测试套件的目标之一是确保较高的覆盖率,为此可使用覆盖率工具,它们测量测试期间实际运行的代码所占的比例。本书编写期间,没有真正的Python标准覆盖率工具,但如果在网上使用“Python测试覆盖率”之类的关键字进行搜索,可找到一些相关的工具,其中之一是Python自带的程序trace.py。你可从命令行运行它(可以使用开关-m,这样可避免查找文件的麻烦),也可将其作为模块导入。要获取有关其用法的帮助信息,可使用开关—help来运行它,也可在解释器中导入这个模块,再执行命令help(trace)。

你可能觉得详尽地测试各个方面让人不堪重负。不用担心,你无需测试数百种输入和状态变量组合,至少开始的时候不用。在测试驱动的编程中,最重要的一点是在编码期间反复地运行方法(函数或脚本),以不断获得有关你做法优劣的反馈。如果以后要进一步确信代码是正确的(覆盖率也很高),可随时添加测试。

关键在于,如果没有详尽的测试集,可能无法及时发现你引入的bug,等你发现时已不知道它们是怎么引入的。因此,如果没有良好的测试套件,要找出错误出在什么地方将困难得多。看不到打过来的拳头,你就无法避开它。要确保较高的测试覆盖率,方法之一是秉承测试驱动开发的理念。只要能确保先编写测试再编写函数,就能肯定每个函数都是经过测试的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190523A03PCY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券