HIT软件构造第二章知识点

  1. 软件测试

什么是测试:软件测试是提高软件质量的重要手段

它是执行一个程序或应用程序,旨在查找错误(错误或其他缺陷),并验证该软件产品是否适合使用的过程(能否达到用户需求)

它涉及到执行一个软件组件来评估一个或多个感兴趣的属性。

 

残留缺陷率软件发货后留下的错误

 

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

 

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

 

系统测试:测试完全集成的系统,验证系统满足要求,在最终配置中执行软件

(其余测试方法这里不再冗述)

 

静态测试:无需实际执行程序即可执行。

静态测试通常是隐式的,作为校对,而且当编程工具/文本编辑器检查源代码结构或编译器(预编译器)时,检查语法和数据流作为静态程序分析。

检查、演练或检查被称为静态测试。

 

动态测试:描述了代码动态行为的测试,实际上用给定的测试用例执行编程代码。动态测试可以在程序100%完成之前开始,以测试特定的代码部分,并应用于离散功能或模块。

典型的技术是使用存根/驱动程序或从调试器环境中执行

 

白盒测试:通过查看源代码来测试程序的内部结构或工作情况,是对程序内部代码的测试。

 

黑箱测试:将软件视为“黑箱”,在不了解内部实现的情况下检查功能,而无需查看源代码。是对程序外部行为的测试。

 

  1. 测试用例

测试优先:先写规约,再写符合规约的测试用例,然后写代码、执行测试、有问题再改、再执行测试用例,直到通过它(规约描述了方法的输入输出行为)

 

写测试用例,就是理解、修正、完善你的spec设计的过程

 

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

审查设计信息,为建立可能发现错误的测试用例提供了指导。每个测试用例都应与一组预期结果耦合。

 

  1. 黑盒测试

黑盒测试尝试查找以下类型中的错误:

不正确或缺少功能、接口错误、数据结构或外部数据库访问中的错误、行为或性能错误、初始化和终止错误

 

黑箱测试测试用例

黑箱测试的测试用例是基于规范和要求构建的,即应用程序应该做什么,检查程序是否符合规约。

测试用例通常来自于软件的外部描述,包括规范、要求和设计参数。

用尽可能少的测试用例,尽快运行,并尽

可能大的发现程序的错误

 

等价类划分:等价划分是一种测试方法,它将程序的输入域划分为数据类,可以从中推导出测试用例。

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

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

 

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

考虑输入的上限:很大的数是否仍正确

边界值分析:补充等价划分的一种测试用例设计技术。-BVA没有选择等价类的任何元素,而是导致在该类的“边缘”处选择测试用例。

某些边界值是“特殊情况”,需要特殊处理

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

程序的行为在边界的地方可能发生“突变”

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

笛卡尔积:全覆盖

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

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

笛卡尔积能全覆盖,但代价高;而等价类划分代价低,但是仍有bug的可能

 

  1. 白盒测试

白盒测试(也称为玻璃盒测试)意味着选择了解函数实际实现的测试用例。

例如,如果实现根据输入选择不同的算法,则应根据这些域进行分区。

如果实现保留了记住以前输入答案的内部缓存,则应测试重复输入

系统的内部视角以及编程技能被用于设计测试用例。§

测试仪选择输入,通过代码锻炼路径,并确定适当的输出。根据程序执行路径设计测试用例§

白盒测试可应用于软件测试过程的单元、集成和系统级别。一般在测试过程早期执行。

使用白盒测试方法,您可以推导出测试用例—确保模块内的所有独立路径至少运行一次—对它们的真实和假边执行所有逻辑决策,在其边界和操作范围内执行所有循环、执行内部数据结构以确保其有效性。§

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

 

  1. 覆盖度

测试应考虑程序内部逻辑的测试用例的代码覆盖范围。§

代码覆盖率是一种用于描述当一个特定的测试套件运行时,程序的源代码的执行程度的度量方法。

一个代码覆盖率高的程序,以百分比(通常用百分比衡量覆盖度)来衡量,在测试过程中执行了更多的源代码,这表明与代码覆盖率低的程序相比,它包含未检测到的软件错误的可能性更低。

可以使用许多不同的度量标准来计算代码覆盖率;其中一些最基本的指标是程序子例程的百分比和在测试套件执行过程中调用的程序语句的百分比。代码覆盖度越低,测试越不充分但要做到很高的代码覆盖度,需要更多的测试用例,测试代价高

判断测试套件的一种方法是问它对程序的测试有多彻底。这个概念被称为覆盖范围。§

 

有许多常见的覆盖类型:

功能覆盖:程序中的每个函数都已调用?

语句覆盖:每个语句都由某个测试用例运行?

分支覆盖:对于程序中的每个时间或切换案例或语句,某些测试用例的真实方向和错误方向?

条件覆盖范围:对于如果/何时/为/开关案例声明中的每个条件,某些测试用例是否同时采用真/假方向?

路径覆盖:某些测试用例是否可以组合通过程序的所有路径?

 

分支覆盖比语句覆盖更强(需要更多测试)。测试效果:路径覆盖>分支覆盖>语句覆盖§

在行业中,100%语句覆盖是一个共同目标,但即使是由于无法访问的防御代码(如“永远不应该到达这里”断言)也很少实现。§

100%分支覆盖非常理想,安全关键行业代码有更艰巨的标准。不幸的是,§100%的路径覆盖是不可行的,需要指数大小的测试套件来实现。测试难度:路径覆盖>分支覆盖>语句覆盖

最彻底的白盒方法是覆盖程序路径覆盖中的每一条路径,但是因为程序通常包含一个循环,所以路径的数量很大。路径数量巨大,难以全覆盖

几乎不可能执行每一条路径,我们只能尝试确保覆盖范围尽可能高

 

测试的一种标准方法是添加测试,直到测试套件达到足够的覆盖范围:即,这样程序中的每个可访问的语句都由至少一个测试用例执行。白箱测试很简单;您只需测量黑箱测试的覆盖范围,并添加更多的测试用例,直到所有重要语句都记录为执行

 

  1. 自动测试和回归测试

手工测试的代价太高,最好达到完全的自动化§

自动测试意味着运行测试并自动检查其结果。自动调用被测函数、自动判定测试结果、自动计算覆盖度

测试驱动程序不应该是提示您输入并打印结果的交互式程序。相反,测试驱动程序应该在固定的测试用例上调用模块本身,并自动检查结果是否正确。

测试驱动程序的结果应该是“所有测试正常”或“这些测试失败

 

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

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

 

两种测试方法组合使用。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值