软件测试与测试优先的编程复习总结

这篇文章是对软件构造课程第二节Testing and Test-First Programming的总结

软件测试是一个大的话题,在软件构造课程的学习任务中离不开基本的测试能力,本节的重点是掌握基本的软件测试能力——黑盒测试思想与单元测试。

软件测试是程序员的一份保证书,更是提高软件质量的重要手段。测试与其他活动的出发点相反——测试要尽早尽全力让软件运行失败。同时,测试又是一项让人失望的工作,因为无论多么好的测试都无法证明系统里不存在错误,也就是说,尽管测试程序花费了你很多精力,你也不能保证自己的工作绝对完美。这也许就是程序员的世界。

一、测试用例

测试可以分为静态测试与动态测试。静态测试是在程序运行前,对代码进行检查。动态测试是给定的一组测试用例去运行代码,通过判断测试用例是否通过,来判断测试结果。

Test case = {test inputs + execution conditions+ expected results}

测试用例:输入+执行条件+期望结果

测试用例具体该如何选取设计,这要结合具体的测试思想(黑盒测试或白盒测试)和具体的测试情形。

二、TFP与TDD

TFP:Test-First Programming 测试优先的编程

TFP简单来讲,就是先写测试,再写代码。这种编程模式的思想基于“Make it fail, fail it fast”,即尽早尽快地让程序出错,然后去不断改错,直至通过。

具体的过程:

1.Write a specification for the function. 先写spec

2.Write tests that exercise the specification. 再写符合spec的测试用例

3.Write the actual code. Once your code passes the tests you wrote, you’re done. 写代码、执行测试、有问题再改、再执行测试用例,直到通过它

书写测试用例的过程就是理解、修正和完善Spec设计的过程

TDD:测试驱动的编程,是敏捷开发中的一种模式

 三、单元测试

单元测试:针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试

在软件构造课程中,需要掌握Junit自动化单元测试工具的使用。

四、黑盒测试vs白盒测试

黑盒测试:对程序外部表现出来的行为的测试。用于检查代码的功能,不关心内部实现的细节。

白盒测试:对程序内部代码结构的测试。

打个比方来理解黑盒测试与白盒测试,有一天,你买了一台洗衣机,你想看看这洗衣机是好的还是坏的,这就是测试,于是,你拿着说明书,把这台洗衣机所有的功能都试了一遍,所有的按钮都按了一遍,各种类型的衣物也洗了一次,发现达到了你的预期,于是你认为这洗衣机是好的,这就是黑盒测试,但是,你父亲是一个工程师,他找到了这台洗衣机的设计文档,于是,他拿着工具,将这台洗衣机拆开检查了个遍,这个螺丝是不是达到了预定的规格,这处材料达没达到预期的强度......最后检查完了,发现和设计文档规定的一样,于是,你父亲认为这台洗衣机是好的,这就是白盒测试。

基于黑盒测试思想设计测试用例:

Test cases for black-box testing are built around specifications and requirements, i.e., what the application is supposed to do. 检查程序是否符合规约

方法1 等价类划分

基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例。针对每个输入数据需要满足的约束条件,划分等价类。每个等价类代表着对输入约束加以满足/违反的有效/无效数据的集合。

例如,如下的等价类划分

 方法2 边界值分析

大量的错误发生在输入域的“边界”而非中央,边界值分析的方法是在边界值附近去选取测试值,边界值分析方法是对等价类划分方法的补充。

例如

 

在面临多个输入值时,每个输入值的等价类划分是独立的,这时,测试值的选取策略有以下两种:

1.笛卡尔积:全覆盖策略

即,多个划分维度上的多个取值,要组合起来,每个组合都要有一个用例

2.覆盖每个取值:最少一次即可

即,每个维度的每个取值至少被1个测试用例覆盖一次即可

例如

五、测试覆盖度

代码覆盖度:已有的测试用例有多大程度覆盖了被测程序。

代码覆盖度越低,测试越不充分,但要做到很高的代码覆盖度,需要更多的测试用例,测试代价高

其他覆盖度:函数覆盖、语句覆盖、分支覆盖、条件覆盖、路径覆盖。

测试效果:路径覆盖>分支覆盖>语句覆盖

测试难度:路径覆盖>分支覆盖>语句覆盖

在软件构造课程中,要学会使用计算代码覆盖度的工具。例如,Eclipse中的EclEmma或者IDEA自带的工具。

六、测试策略Testing Strategy

测试策略是一段注释文档,用于说明测试程序的测试思路以及测试用例的选取等。目的是在代码评审过程中,其他人可以理解你的测试,并评判你的测试是否足够充分。

书写测试策略一方面是帮助评审人员快速理解你的测试代码,另一方面也是理清,修改和完善自己测试思路的一个过程。

例如

待测试的方法

 一种测试策略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值