python编程导论_第四课
Chapter 6 测试和调试
本章谈论测试和调试。我们写出的的代码,往往不会在第一次测试时就能顺利运行。所以我们需要测试代码,以确定是否可能有错误。我们还将讨论调试的相关技术。
【python编程导论_第四课】测试的目的主要是证明错误的存在,而不是证明程序没有错误。在测试时,我们经常需要将代码和规范结合起来,进行各种路径探索。基于代码探索路径的方式成为白盒测试,基于规范探索路径的方式成为黑盒测试。
黑盒测试
我们通过特定规范执行路径。测试者和开发者是独立的,因此测试套件不会受代码中错误的影响,且具体实现改变时,测试套件仍然适用。由于规范经常是不完整的,很难估算黑盒测试对输入空间的覆盖程度。
白盒测试
我们通过代码执行路径。由于代码中反映的路径定义得非常清楚,白盒测试套件对输入空间的覆盖程度相对比较容易故事。白盒测试需要尽量保证路径完备性,如果白盒测试套件可以测试程序中所有潜在路径,我们就认为它是路径完备的。但很多时候,路径完备不可能达成,比如循环或递归,它们取决于循环次数和递归深度。
白盒测试提供了一些经验准则:
- 测试所有if语句的所有分支。
- 必须测试每个except子句(参见第7章) 。
- 对于每个for循环,需要以下测试用例:
- 未进入循环(例如,如果使用循环遍历列表中的所有元素,则必须测试空列表);
- 循环体只被执行一次;
- 循环体被执行多于一次;
- 对于每个while循环:
- 包括上面for循环中的所有用例;
- 还要包括对应于所有跳出循环的方式的测试用例。例如,对于以while len(L) > 0 and not L[i] == e开始的循环,测试用例应该包括因为len(L)不大于0和因为L[i] == e而跳出循环的情况。
- 对于递归函数,测试用例应该包括函数没有递归调用就返回、只执行一次递归调用和执行多次递归调用的情况。
测试一般分为两个阶段。第一个阶段称为单元测试。在这个阶段中,测试者构建并执行测试,用来确定代码的每个独立单元(例如,函数)是否正常工作。第二个阶段称为集成测试,用来确定整个程序能否按预期运行。在实际工作中,测试者会不断重复这两个阶段,因为如果集成测试没有通过,那就还需要对单个模块做出修改。
调试
调试就是定位出我们代码中错误的位置。我们会将调试作为一个搜索过程,每次实验就要尽力缩减搜索空间。最好的方法是使用二分查找,分离并检测错误的来源。
Chapter 7 异常和断言 本章我们将学习两种方法,以处理Python代码不按预期运行或者不正常运行。
第一种叫做异常,其中代码会从结构方面处理非预想中的情况,从而用户可以理解代码怎么出错了以及可能的解决方法。
第二种我们将处理断言,这种方法能够保证我们所给出的所有输入输出的假设都正确。
异常
程序发生异常时,没有必要导致程序终止,而应该由程序进行处理。如果知道了代码可能发生异常,那么我们应该处理异常。
异常也可以用作控制流,使程序更加简洁。
断言
Python语言中的assert语句为程序员提供了一种确保程序状态符合预期的简单方法。
习题总结 L7 PROBLEM 4
白盒测试除了考虑路径完备性,还有一些常见的经验规则值得我们参考。Problem4考查的是递归函数的经验准则:测试用例应该包括没有递归调用、一次递归调用和多次递归调用的情况。
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- HTML基础--基本概念--跟着李南江学编程