软件构造知识点梳理第二章

第二章

认可“测试”的价值,搞清楚“测试优先”的哲理;学会用等价划分和边界值分析方法为模块设计测试用例;可用工具度量一组测试用例对代码的“覆盖度”;各种各样的测试,都有些初步了解

大纲:

测试用例;测试优先的编程/测试驱动开发;单元测试;使用JUnit进行自动化单元测试;* 白盒测试;覆盖度;* 集成测试;* 回归测试;在程序中文档化测试策略

黑盒测试 :等价类划分 ,边界值分析。

确保程序正确性/健壮性的最普遍的手段:测试

方法:1 设计测试用例;2 用JUnit写测试程序;3 自动化测试过程。

1软件测试

即使是最好的测试,也无法达到100%的无错误

测试跟其他活动的目标相反:破坏、证错、“负能量”

再好的测试也无法证明系统里不存在错误

好的测试的标准:能发现错误;不冗余;最佳特性;别太复杂也别太简单。

 

测试等级:(等级反向代表回归测试)

单元测试:指验证特定代码段功能的测试,通常在功能级别。

集成测试:由多个程序员或编程团队创建的两个或多个类、包、组件、子系统的组合执行。

系统测试:测试一个完全集成的系统以验证系统是否满足其要求,从而在最终配置中执行软件。

针对外部质量因素的诸多测试:安装测试;兼容性测试;健全性测试;回归测试;验收测试;Alpha 测试/Beta 测试;性能/负载/可扩展性测试;可用性测试;可访问性测试;安全测试等等

 

静态测试是在没有实际执行程序的情况下进行的。隐式。编译器(预编译器)检查语法和数据流、编程工具检查源代码结构

动态测试描述了对代码动态行为的测试,它实际上是用一组给定的测试用例执行编程的代码。典型:使用调试环境执行。

测试:发现是否存在错误,这是本章内容

调试:识别错误根源,消除错误

 

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

黑盒测试:对程序外部表现出来的行为的测试

测试困难的原因:穷举+暴力=不可能;靠偶然测试没意义;基于样本的统计数据对软件测试意义不大—软件与产品的巨大差异;软件行为在离散输入空间中差异巨大;大多数正确,少数点出错;bug出现往往不符合特定概率分布;无统计分布规律可循

 

2测试用例

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

好的测试用例的标准:最可能发现错误;不重复、不冗余;最有效;既不简单也不复杂

3测试优先编程

4单元测试

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

由于组件不是独立程序,因此通常必须为每个单元测试开发驱动程序和/或存根软件。

驱动程序:一个“主程序”,它接受测试用例数据,将这些数据传递给(被测试的)组件,并打印相关结果。

存根:用于替换从属(由被测试组件调用)的模块。

– 存根使用从属模块的接口,可以进行最少的数据操作,打印输入验证,并将控制权返回给正在测试的模块

5使用 JUnit 进行自动化单元测试

JUnit 单元测试被编写为@Test注释前面的方法;

setUp() 或@Before: 准备测试,完成初始化;

tearDown() 或@After: 清理测试环境

6黑盒测试

黑盒测试:用于检查代码的功能,不关心内部实现细节

检查程序是否符合规约

用尽可能少的测试用例,尽快运行,并尽可能大的发现程序的错误

6.1分区方法选择测试用例

基于等价类划分的测试:将被测函数的输入域划分为等价类, 从等价类中导出测试用例。

针对每个输入数据需要满足的约束条件,划分等价类。

每个等价类代表着对输入约束加以满足/违反的有/无效数据的集合

基于的假设:相似的输入,将会展示相似的行为。故可从每个等价类中选一个代表作为测试用例即可,从而可以降低测试用例数量

根据指南定义等价类:

– 如果输入条件指定了范围,则定义一个有效等价类和两个无效等价类。

– 如果输入条件需要特定值,则定义一个有效和一个无效等价类。

– 如果输入条件指定集合的成员,则定义一个有效和一个无效等价类。

– 如果输入条件是布尔值,则定义一个有效类和一个无效类。

需要考虑输入数据的特殊情况;考虑输入的上限;

6.2边界

大量的错误发生在输入域的“边界”而非中央

边界值分析方法是对等价类划分方法的补充

某些边界值是“特殊情况”,需要特殊处理;程序的行为在边界的地方可能发生“突变”

在等价类划分时,将边界作为等价类之一加入考虑

笛卡尔积:全覆盖:多个划分维度上的多个取值,要组合起来,每个组合都要有一个用例;测试完备,但用例数量多,测试代价高

覆盖每个取值:最少1次即可:每个维度的每个取值至少被1个测试用例覆盖一次即可;测试用例少,代价低,但测试覆盖度未必高。

7*白盒测试

黑盒测试完全从函数spec(规范)导出测试用例,不考虑函数内部实现

白盒测试要考虑内部实现细节:根据程序执行路径设计测试用例,白盒测试一般较早执行

使用白盒测试方法,您可以导出测试用例

– 保证模块内的所有独立路径都已至少锻炼一次

– 对真假两面进行所有合乎逻辑的决定,

– 在其边界和操作范围内执行所有循环,

– 练习内部数据结构以确保其有效性。

一种典型的白盒测试方法称为独立/基本路径测试:独立/基本路径测试:对程序所有执行路径进行等价类划分,找出有代表性的最简单的路径(例如循环只需执行1次),设计测试用例使每一条基本路径被至少覆盖1次。

8测试覆盖度

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

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

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

实际当中,根据预先设定的覆盖度标准,逐步增加测试用例的数量,直到覆盖度达到标准(例如语句覆盖100%、路径覆盖90%)。

9自动化测试和回归测试

只是“测试用例的自动执行”,并非“自动生成测试用例”

回归测试:一旦程序被修改,重 新执行之前的所有测试

一旦发现bug,要马上写一个可重现该bug的测试用例,并将其加入测试库

10记录测试策略

测试策略(根据什么来选择测试用例)非常重要,需要在程序中显式记录下来

目的:在代码评审过程中,其他人可以理解你的测试,并评判你的测试是否足够充分

 

总结

测试优先编程。在编写代码之前先编写测试。

系统地选择测试用例的划分和边界

用于填写测试套件的白盒测试和语句覆盖

尽可能隔离地对每个模块进行单元测试

自动回归测试以防止错误再次出现。

安全无bug。测试是在你的代码中发现错误,而测试优先编程是在你引入它们之后尽快找到它们。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值