您现在的位置是:首页 >其他 >1698_python编程_测试与debug网站首页其他
1698_python编程_测试与debug
全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com)
学习了一下这一周的课程,讲的主要是测试以及Bug调试方面的东西。在之前我自己翻译的《MIT使用Python学习编程》中,这部分已经有所体现。这次,再补充一部分概念性的东西。
白盒测试与黑盒测试:
测试可以分为黑盒测试(black box)以及白盒测试(glass box)。
黑盒测试过程中,不会关注代码的具体设计与执行,只关系输入与输出结果是否与预期相匹配。这种测试的优点有两个:1,测试不会受到设计时的思维局限,找到bug的随机性要高一些;2,需求以及接口不变的时候,测试用例完全可以复用。
对于白盒测试,不仅会看输入输出,而且会关心程序的设计与执行过程。对于测试来说,最好的测试证明当然是穷尽测试,但是一般来说这是不显示的。这样,测试的时候通常会把输入划分为几个范围,然后在相应的范围内选择特殊的数值进行测试。为了能够保证测试的覆盖性,边界测试通常会是一个必选的结果。
对于白盒测试的一些总结:
1,必须确保每个程序分支都能够测到。
2,必须确保每个except或者else等分支能够测得到。
3,对于for循环,必须测试不满足循环条件的情况、只满足一次循环的情况、超过一次循环的情况。
4,对于while循环,除了测试for循环需要测试的方面外,还需要捕捉每次循环跳出时的条件。
5,对于递归算法的测试。必须测试不产生递归,只执行最基本的初始计算的状态。同时,还需要测试一次递归与超过一次递归的情况。
引导型测试:
引导测试涉及的分支与分类有:单元测试、集成测试、循环测试、驱动与打桩测试。
单元测试
单元测试是选择一个模块测试,按照这个模块的功能进行相应的黑盒或者白盒测试。这个测试的目的在于找出算法上的bug。
集成测试
在单元测试通过后,开始进行集成测试。集成测试测试的是整个系统的功能,目的是为了找出功能组合或者功能配合时候的Bug。
循环测试
循环测试时把“单元测试——集成测试”这样的测试组合循环执行多次以保证测试的可靠性。
驱动与打桩测试:
驱动测试时需要配置一定的环境去调用程序中的各个功能,在测试时与预定的顺序执行代码功能以及输入。把结果数据以及报告保存下来,然后分析得出结论。环境会模拟部分使用单元模块儿时候的行为,然后测试相应的输入是否能够达到预期的效果。
打桩则是面对尚未开发完成的功能,我们可能么有完成某一段代码功能,但是我们可以模拟这部分功能的行为来看另外一段代码是否能够有相应预期的结果。
比较好的测试实践:
一个比较好的测试实践:从单元测试开始,当单元模块的算法以及功能得到充分验证后转向集成测试。而每次代码修改后,必须要有相应的回归测试。回归测试测试的不仅仅是相应模块的某一个条件是否修改修复,而应该保证之前用过的所有测试用例依然能够测试通过。
Debug:
这个词语的由来说法很多,一般是说美国军方的某个程序员在测试的时候发现一个问题是由于继电器触点夹了一个小虫子引起的。于是戏谑的成软件中的问题为Bug,而排出Bug的过程则成为Debug。
通常,按照Bug的明显程度可以分为明显型和隐蔽型两种。明显型的常见的例子有程序崩溃或者死循环。隐蔽型的通常是返回或者计算出一个错误数值,这一种通常来说更加难以发现。
如果,按照发生频率来看的话则可以分为一直出现和间歇性出现两种。
Debug也需要有一定的技巧,通常的思维解决方式是把Debug看做一个搜索问题。我们需要解决的是如何找到程序异常的合理性解释。
组常用的方法则是从错误的数据分析入手,通过数据的分析形成一定的假设。然后验证假设并且记录数据,通过数据与自己的假设相互印证。在这过程中,二分法通常是缩小错误范围的一个比较好的方法。具体的描述在之前的文章翻译中有相应的说明,这里不再重复整理。后面会附加曾经的翻译链接。
链接: