一、基本概念
软件测试:
a.实际输出与预期输出间的审核或者比较过程
b.描述一种用来促进鉴定软件正确性、完整性、安全性和质量的过程
c.在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程
测试原则:
a.测试应该尽早进行,最好在需求阶段就开始介入
b.软件测试应由第三方负责,避免程序员自己检查
c.设计测试用例时应该考虑合法的输入、不合法的输入以及各种边界条件,特殊情况下还要考虑制造极端状态和意外状态
d.应该充分注意测试中群集现象
e.对错误结果应该有个确认过程
f.制定严格的测试计划
g.妥善保存测试计划、测试用例、出错统计及最终分析报告,便于维护
测试目标:
a.发现一些可以通过测试避免的开发风险
b.实施测试来降低所发现的风险
c.确定测试何时可以结束
d.在开发项目的过程中将测试看做时一个标准项目
测试对象:
程序、数据、文档
测试过程:
1.对要执行测试的产品/项目进行分析,确定测试策略,制定测试计划。计划被审核批准后才能转向第2步。
2.根据测试需求和测试策略设计测试用例。进度压力不大时应详细设计,否则也应该保证覆盖关键性测试需求。该测试用例被批准后转第3步。
3.执行测试。主要搭建测试环境,执行测试用例,同时要进行进度控制、项目协调等工作
4.提交缺陷,主要进行缺陷审核和验证等工作
5.消除软件缺陷。开发经理需要审核缺陷,进行缺陷分配。程序员完成修改后进入回归测试阶段。如果满足“完成准则”,正常结束测试
6.撰写测试报告。
二、黑盒测试
测试者在不考虑程序内部结构情况下,仅依据程序功能需求规范来设计测试用例。包括等价类划分和边界值分析等方法
等价类划分:
原理:等价类把程序分为若干部分,从每个部分选择少许代表性数据当做测试用例。
等价类划分情况:
有效等价类,即合理的,有意义的输入数据集合
无效等价类,即不合理的,无意义的输入数据集合
等价类划分设计测试用例原则:
1.为每个等价类规定唯一编号
2.设计一个新的测试用例,使其尽可能覆盖尚未被覆盖的有效等价类,重复,直至所有有效类都被覆盖
3.设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复直至所有无效等价类都被覆盖
边界值分析:
原理:对等价类划分的进一步补充,通过选择等价类边界值的测试用例来发现更多的错误,因为大量错误发生在输入输出的边界上,而不是其取值范围内
原则:
1.如果输入条件规定了取值范围,则选择该范围的边界值及刚刚超过和低于边界值的测试用例
2.如果规定是输入值的个数,则选择最大个数、最小个数以及最大+1和最小-1的个数的数
3.如果规定的是输入域或输出域的有序集合,则选择第一个和最后一个作为测试用例
4.分析规格说明书,找到其他可能的边界值条件
5.根据规格说明书的每个输出条件,按第1原则选择测试用例
三、白盒测试
通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序的不同地方设立测试点,检查程序的状态,以确定实际运行状态和预期是否一致
包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖六种。
1.语句覆盖:
最起码的结构覆盖要求,设计足够多的测试用例,使得每条语句至少被执行一次。
2.判定覆盖:
又称分支覆盖,设计足够多的测试用例,使得程序中每个判定至少有一次为真有一次为假
3.条件覆盖:
设计足够多的测试用例,使得判定中每个条件获得各种可能的结果,即每个条件至少一次真一次假。
4.判定/条件覆盖
设计足够多的测试用例,使得判定中每个条件的所有结果至少出现一次,每个判定本身所有结果也至少出现一次。
5.条件组合覆盖:
设计足够多的测试用例,使得每个判定中条件结果的所有组合至少出现一次。
6.路径覆盖:
设计足够多的测试用例,覆盖程序中所有路径。
四、圈复杂度
概念:衡量代码复杂程度的标准
圈复杂度越高的危害:
说明代码的判断逻辑越复杂,可能质量低
需要更多的测试用例,难以测试和维护
圈复杂度的表现:
分支循环语句多;表达式复杂(含三元表达式)
计算方法:
- V(G) = E + 2 -N
E:控制流程图的边数;N:控制流程图的节点数
2.从起点到终点的路径条数