1.什么是软件测试?
软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
2.软件测试的目的:
①提高软件的质量
②保证软件的安全
③降低软件开发成本
④降低企业风险
⑤提升用户体验感
3.什么是软件测试用例?
软件测试是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。
4.白盒测试
①白盒测试是一种基于源程序或代码的测试方法,分为静态和动态两种类型
静态方法是按一定步骤直接检查源代码来发现错误,而不用生成测试用例并驱动被测程序运行来发现错误,也称为代码检查法
动态方法是按一定步骤生成测试用例并驱动被测程序运行来发现错误
静态方法有桌面检查、代码审查及走查;动态方法有基本路径测试、条件测试、数据流测试及循环测试
②白盒测试是一种主要的单元测试方法, 一般由软件开发人员进行
白盒测试过程主要有这样五个步骤:根据源程序画程序图,生成测试用例,执行测试,分析覆盖标准,判定测试结果。
5.白盒测试方法
逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等
基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例
数据流测试:关注变量的赋值和使用。基于变量的定义-使用链导出程序的测试路径,设计测试用例
6.逻辑覆盖都有哪些
语句覆盖:基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次
判定覆盖:基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足
条件覆盖:基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
判定-条件覆盖:判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次
条件组合覆盖:基本思想是设计足够的测试用例,使得判断中每个条件的所有可能组合至少出现一次,并且每个判断本身的判定结果也至少出现一次
7.基本路径测试
①依据代码绘制流图 ②确定流图的圈复杂度(cyclomatic complexity ) ③确定线性独立路径的基本集合( basis set ) ④设计测试用例覆盖每条基本路径
8.三种方法计算圈复杂度
①给定流图G的环形复杂性——V(G), V(G)=流图中区域的数量。 ②给定流图G的环形复杂性——V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图节点数量。 ③给定流图G的环形复杂性——V(G),也可定义为V (G)=P+1,P是流图G中判定节点的数量。
9.黑盒测试
又叫做功能测试,是基于系统已实现的功能进行测试的。使用该方法的具体的测试用例设计方法包括等价类划分法、边界值分析法、正交排列阵测试法、因果分析法等。
黑盒测试注重于测试软件的功能性需求,也即黑盒测试需要软件工程师生成输入条件集来检测程序所有功能需求。 黑盒测试并不是白盒测试的替代品,而是配合白盒测试发现其他类型的错误。
10.黑盒测试的方法
等价类划分法 边界值分析法 判定表方法 因果图法 正交试验法 功能图法 错误推测法
11.JUnit测试
引入类Test(import org.junit.Test ),引入类(import static org.junit.Assert.) 编写测试用例必须以注解:@Test,开始 通过assert方法来判断结果
”失败“:断言失败
”错误“:异常还没被测出也没被预料到
单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致
测试不仅仅是编写测试用例,还有很多的额外开销 测试之前是什么状态,测试执行完毕后就应该是什么状态,而不应该由于测试执行的原因导致状态发生了改变
12.套件运行器
import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({testadd.class, testdivide.class, testStack.class}) public class TestAll { }
13.单元测试和集成测试
单元测试:测试的第一步,着重于每一个单独的模块,以确保每个模块都能正确执行 大量地使用白盒测试技术,检查每一个控制结构的分支以确保完全覆盖和最大可能的错误检查
集成测试:测试多个模块装配或集成在一起形式完整的软件包,它解决的是验证与程序构造的双重问题 使用较多的是黑盒测试用例设计技术;为了保证覆盖一些大的分支,也会用一定数量的白盒测试技术
单元测试定义:对程序中的单个子程序、子程序或过程进行测试的过程,是对最小的软件设计单元的验证工作
集成测试定义:是软件过程的一个阶段,多个软件模块被结合在一起,作为一个群接受测试
14.集成测试分为:瞬时集成测试和增量集成测试
15.增量集成测试的优点: 错误比较容易分离和修正 接口也更容易进行彻底地测试 可以应用一种系统化的测试方法
16. 增量集成测试
自顶向下集成 :采用深度优先方法时,每一模块在测试中层层地由真实代码替代程序桩,使该模块得到不断详尽的测试 采用广度优先方法时,应用程序中处于同一控制层上的模块在进行测试时得到精化
优点:对高层行为进行早期确认 至多只需一个驱动程序 每步可以只加一个模块 支持深度优先和广度优先
缺点:对低层行为确认比较晚 对缺少的元素需要编写桩程序 测试案例的输入和输出可能很难明确表示
自底向上集成 :是从原子模块(也就是在程序结构的最低层的模块)开始来进行构造和测试的每个模块由测试装置(test harness)进行测试 一旦各个独立的模块测试完毕,把它们组合起来形成一组模块,称为构件(build) 一组构件再由第二个测试装置进行测试 这个过程将继续直到构件中包括整个应用系统。因为模块是自底向上集成的,在进行时要求所有隶属于某个给定层次的模块总是存在的,而且也不再有使用程序桩的必要
优点: 对底层行为早期进行确认 不需要写程序桩 对一些子树而言比较容易明确表示输入,比较容易解释对其他的输出
缺点: 推迟对高层行为的确认 需要驱动程序 当组合子树的时候,一大堆元素要进行集成
混合集成测试:在一个由几个小组一起开发的大的软件项目中,或者一个小项目但不同模块是由不同的人进行构建的情况下,小组或个人可以对自己开发的模块采用自底向上测试,然后再由集成小组进行自顶向下测试
17.波漪效应分析(Ripple Effect Analysis,REA)包括以下步骤: 提出软件修改 识别依赖于被改变部分的其他模块 决定是否要改变依赖部分来保持一致性 如果需要改变,从第一步开始循环进行REA 如果不需要改变,停止并等待修改软件
18.单元测试是测试的基础级别。单元测试着眼于程序或系统的较小组件模块,执行每个模块以证实其履行了指定功能 单元测试的优势在于它容许对小单元的测试和调试,从小单元到大单元的集成过程提供了更好的管理方式 把组件聚合后,必须通过测试确认所有的组件之间能够正确地协作运行。因此集成测试的目标是暴露接口的缺陷,以及聚合后的组件之间相互作用的缺陷
19.更高级别的测试
功能测试 系统测试 验收测试 安装测试 测试的计划与控制 测试结束准则 独立的测试机构