Lecture 11: Testing and debugging
本节课主要讲了两个内容,正如标题所述,测试和调试。测试和调试多有不同之处,而本课的偏重点在于基本概念,或者说理论基础。因此,本课并没有举出程序例子。
测试和调试是两种不同的过程。测试(Testing)是比较多组输入值和输出值,看是否符合题目要求或规格说明书(Specification)。而调试(Debugging)则是找出程序中的错误并加以改正的过程。
测试有两种不同的分类,如下:
- 单元测试(Unit Test):逐一验证各个单独的程序段,如函数(function)和类(class)
- 集成测试(Integration Test):验证整个程序
调试的内容大概分为以下两个方面:
- 方法(Function):解题的正确性
- 性能(Performance):运算效率和速度
一个比较常用和有效的调试方法是用二分法搜索出错点,具体操作如下:
- 在程序中间位置输入print statement,将程序分为上下两部分;
- 如果输出值和预计值不符,则错误在程序上半部分;相符则在下半部分;
- 再将剩下的程序二分,重复操作第二步。
在上节课的最后提到了异常处理,上一篇笔记并没有特别详细说明,因为课上讲的内容并不是很完整。在参考《王纯业Python学习笔记》和《Python基础教程》第二版之后,整理出如下两个try-except的使用方式:
使用方式①(在上篇笔记中提到的格式):
try:
statement 1
except ExceptionType:
statement 2
这个使用方式的意思是这样的:
- 首先执行statement 1,如果没有exception也就是异常发生,那么就一切正常,跳过except继续运行程序;
- 如果发生了exception就比较ExceptionType,如果一致就执行statement 2;
- 不一致就直接返回,把exception抛给函数的调用者,判断是否和这一级的ExceptionType一致,如此一级一级向上抛,直到有try语句捕获了exception;
- 若没有任何try语句可以捕获exception,那么程序就异常退出,程序崩溃。
使用方式②(较为复杂的使用方式):
try:
statement 1
except (ExceptionType1, ExceptionType2):
statement 2
except(ExceptionType3, ExceptionType4):
statement 3
except:
statement 4
不难看出,这个使用方式相比于前一个更为高级,也更为细致。在同一级别的比较中,不同的ExceptionType可以做不同的操作。若是exception与所述的ExceptionType 1-4都不符合也有except语句去执行statement 4。这个结构就跟if-elif-elif-else的结构相似,但作用不同。
总结:这是一堂调试基础课,可以略过。
学员评论