python导论课件_python编程导论_第四课

Chapter 6 测试和调试

本章谈论测试和调试。我们写出的的代码,往往不会在第一次测试时就能顺利运行。所以我们需要测试代码,以确定是否可能有错误。我们还将讨论调试的相关技术。

测试的目的主要是证明错误的存在,而不是证明程序没有错误。在测试时,我们经常需要将代码和规范结合起来,进行各种路径探索。基于代码探索路径的方式成为白盒测试,基于规范探索路径的方式成为黑盒测试。

黑盒测试

我们通过特定规范执行路径。测试者和开发者是独立的,因此测试套件不会受代码中错误的影响,且具体实现改变时,测试套件仍然适用。由于规范经常是不完整的,很难估算黑盒测试对输入空间的覆盖程度。

白盒测试

我们通过代码执行路径。由于代码中反映的路径定义得非常清楚,白盒测试套件对输入空间的覆盖程度相对比较容易故事。白盒测试需要尽量保证路径完备性,如果白盒测试套件可以测试程序中所有潜在路径,我们就认为它是路径完备的。但很多时候,路径完备不可能达成,比如循环或递归,它们取决于循环次数和递归深度。

白盒测试提供了一些经验准则:

测试所有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考查的是递归函数的经验准则:测试用例应该包括没有递归调用、一次递归调用和多次递归调用的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值