第13章 测试
本章将重点介绍科学编程测试的两个方面。第一个方面是在科学计算中经常遇到的问题,即“测试什么”;第二个方面涉及“如何测试”的问题。我们将对手动和自动测试进行区分。手动测试是指每个程序员快速检查一个实现是否正常工作,而自动测试对上述概念进行了改良和自动化。下面将介绍一些可用于自动测试的工具,以便了解科学计算的具体情况。
13.1 手动测试
在代码开发的过程中,为了测试代码的功能,用户需要做很多小测试,这可以称为手动测试。通常情况下,用户需要通过在交互式环境中手动测试函数来测试给定函数是否执行了其应该执行的操作。例如,假设要实现二分算法(它是一种要找到标量非线性函数的零(根)的算法),要启动该算法,必须给出一个区间,该属性是函数在区间范围内采取不同的符号,参见练习4。更多详细信息参见第7章。
接着测试该算法的实现,通常需要通过检查如下内容来实现。
- 若函数在区间范围内具有相反的符号,则会找到一个解决方案。
- 若函数在区间范围内具有相同的符号,则会引发异常。
根据需要进行手动测试似乎是不能令人满意的。一旦确认代码能够按照预期的设想完成应该执行的操作,你就会给出少许演示示例来让他人相信代码的质量。在这个阶段,用户经常会对开发过程中所做的测试失去兴趣,甚至会忘记或删除测试。一旦更改了细节,代码将不能正常执行,那么可能会为再也找不到之前的测试而后悔。
13.2 自动测试
开发任何代码的正确方法是使用自动测试,其优点如下。
- 每个代码重构后及任何新版本启动之前会自动重复大量测试。
- 代码使用的静默存档。
- 关于代码的测试覆盖率的文档:代码在更改之前可用,还是某个方面从未测试过?
程序中的更改(特别是在不影响其功能的结构中的变化)被称为代码重构。
我们建议与代码并行开发测试。良好的测试设计是其自身的艺术。很少有投资能够像对于良好测试的投资一样,能保证在节省开发时间方面有这样丰厚的回报。 ...
Get Python3.0科学计算指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.