哈工大2022软件构造课程总结2

这篇文章是对于哈工大2022软件构造课程第二讲“软件测试和测试优先的编程”的一些总结和思考。

目录

前言

一、软件测试

二、测试用例 

三、测试优先的编程

四、单元测试

五、使用JUnit进行自动单元测试

六、黑盒测试

 6.1 选择测试用例的分区

 6.2 选择包括分区边界

七、白盒测试

八、覆盖率的测试 

九、记录你的测试策略

 总结


前言

对于软件测试和测试优先的编程,首先要认可“测试”的价值,弄清楚“测试优先”的哲理。还要学会用等价类划分和边界值分析方法为模块设计测试用例。可以用工具度量一组测试用例对代码的“覆盖度”,要对各种各样的测试,都有些初步了解。

确保程序的正确性和健壮性的最普遍方法就是测试,测试的流程就是①设计测试用例,②用Junit编写测试程序,③自动化测试过程。

一、软件测试

即使是最好的测试,也无法达到100%的无错误。再好的测试也无法证明程序中没有错误。

测试按照测试等级可以分为单元测试、集成测试、系统测试,将这三个测试进行排列组合可以产生另外两种测试:回归测试和验收测试。

回归测试的具体流程如下:

验收测试的具体流程如下:

 

然后测试还可以分为静态测试和动态测试,静态测试主要是靠分析代码结构、用眼睛观察代码,动态测试主要是靠debug程序进行调试等等。 测试与调试的区别主要在于测试是检测程序是否有错误,调试是具体检查代码,找到问题的根源解决问题。

白盒测试是对程序内部代码的测试,黑盒测试是对程序外部表现出来的行为的测试,具体情况可以看下面这个图:

二、测试用例 

测试用例包括输入、执行条件、期望结果,每个测试用例都是对于特定的程序设计的。恰当而有用的测试用例非常珍贵,在设计测试用例时要尽可能地测试出程序的各个容易犯错误的点,所以说测试用例是项目中非常珍贵的资产。

三、测试优先的编程

编写代码的过程大概是先写规约,再写符合规约的测试用例,然后再写代码、执行测试、出现错误改正、再执行测试用例,直到通过测试。

先写测试程序是有很多好处的,它可以节省大量调试时间,还可以更好地理解规约,如果规约出现错误还可以辅助进行修改。

四、单元测试

单元测试指的是针对软件的最小单元模型开展测试,隔离每个模块,容易定位错误和调试。具体来看,单元测试就是单独测试程序中的每个方法的正确性,这样确保每个方法都是正确的,可以大幅度提升整体程序的正确概率。

五、使用JUnit进行自动单元测试

JUnit是一个非常流行的单元测试框架,在JUnit case中每个测试方法的前面都要标上@Test,在JUnit框架下有一些用于测试的函数,例如assertEquals、assertTrue等等,在JUnit中各个测试方法互不干扰。

JUnit在具体使用的时候,通常需要新建一个test文件夹放置测试代码文件,然后需要将test设置为与src同等地位的源代码文件夹

六、黑盒测试

黑盒测试重在测试程序的功能实现情况,不重在检查程序内部的实现细节。最佳的测试情况是,使用最少的测试用例,发现最大运行问题。黑盒测试具体过程如下图所示:

 6.1 选择测试用例的分区

基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例,针对每个输入数据需要满足的约束条件,划分等价类。如果一组对象间存在对称、传递和自反的关系,则认为是等价类。因为每个等价类中的内容会有相似的行为,所以每个等价类中选择一个测试用例即可代表所有内容,可以有效降低测试用例数量。

 6.2 选择包括分区边界

通过调查知道,大部分错误是发生在输入域的边界位置的,而非中央位置,边界值分析方法是对等价类划分方法的补充,可以更好地补全等价类划分方法,防止这个方法出现错误。

七、白盒测试

白盒测试不同于黑盒测试,这个测试是要考虑函数内部代码细节的,这个测试一般在黑盒测试之前,在通过白盒测试即函数本身代码没问题时,再使用黑盒测试,检验多个函数进行使用时是否出现问题。

白盒测试的过程如下图所示:

八、覆盖率的测试 

代码覆盖度指的是已有的测试用例多大程度上覆盖了被测程序,代码覆盖度越低,测试越不充分,要想达到高的代码覆盖度,就得增加测试用例,测试代价高。

在代码覆盖度方面,分为函数覆盖、语句覆盖、分支覆盖、条件覆盖、路径覆盖。其中测试效果:路径覆盖>分支覆盖>语句覆盖,测试难度:路径覆盖>分支覆盖>语句覆盖。

九、记录你的测试策略

测试策略(根据什么来选择测试用例)非常重要,需要在程序中显式地记录下来,主要目的是在代码评审中,其他人可以理解你的测试,并评判你的测试是否充分。下图是记录测试策略的范例:

 总结

我们要掌握软件测试的各种方法,尤其是单元测试,并且在编写程序时要对程序进行测试,确保程序的正确性,我们还要理解测试优先这个哲理,在编写程序之前先选取测试用例可以更好地理解规约的要求,也可以帮助我们对于程序进行思路上的构建。

选取合适的测试用例非常难,所以要掌握通过划分等价类来选取测试用例的方法,然后还有重点选取等价类区间的边界值、最值进行测试,尽量做到用最少的测试用例使代码覆盖度最高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值