7 软件静态啊测试
静态测试:通常指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程
特点:
* 不必动态的运行程序,不必进行测试用例的设计和结果分析等工作
* 可手工进行,充分发挥人的思维的优势
* 不需要特别的条件,容易展开
* 对测试人员要求高,至少测试人员要具有编程经验
主要包括:各阶段的评审、代码检查、程序分析、软件质量度量等
8 动态测试
8.1 白盒测试
-- 按照程序内部逻辑结构和编码结构设计测试数据并完成测试的测试方法
-- 测试内容:
* 对程序模块的所有独立执行路径至少测试一次
* 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次
* 在循环的边界和运行的边界内执行循环体
* 测试内部数据结构的有效性
-- 逻辑覆盖:
* 语句覆盖:每条语句至少被执行一次
* 判定覆盖(分支覆盖):每个分支至少通过一次,即每一条分支语句的“真”和“假”都至少执行一次
* 条件覆盖:每个条件的可能取值至少满足一次,但未必能覆盖全部分支
* 判定/条件覆盖:每个条件的所有可能取值至少执行一次,同时每个判断的所有可能的判定结果至少执行一次
* 条件组合覆盖:每个判定条件中的各种组合至少出现一次
* 路径覆盖:程序中所有的路径都至少执行一次
8.2 黑盒测试
-- 不考虑内部结构和处理过程,仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性
-- 要求:
* 每个软件特性或功能必须被一个测试用例或一个被认可的异常所覆盖
* 构造数据类型和数据值的最小集测试
* 测试排斥不规则输入的能力
* 对影响性能的关键模块,应测试模块性能
-- 方法:
* 等价类划分:把程序的输入域划分成若干部分,然后从每个部分中选取少数有带表情数据当做测试用例。两种情况输入:合理的,不合理的
原则:
1)如果规定了输入条件的范围,则可以划分一个有效等价类和两个无效等价类
2)如果输入条件规定了输入值的集合,则可确定一个有效等价类和一个无效等价类
3)如果输入条件是布尔值,则可确定一个有效等价类和一个无效等价类
4)等等,为了能准确划分,一是注意积累经验,二是要正确分析被测程序的功能
* 因果图:充分考虑输入情况的各种组合及输入条件之间的相互制约关系
步骤:
1)分析规格说明描述,哪些是原因,哪些是结果,并给出每个原因和结果赋予一个标识符
2)找出原因与结果之间,原因与原因之间对应的关系,根据这些关系,画出因果图
3)有些原因与原因之间,原因与结果之间的组合情况不可能出现,在因果图上用记号标明约束或限制条件
4)把因果图转换为判定表
5)把判定表的每一列拿出来作为依据,设计测试用例
* 边界分析法:选择等价类边界的测试用例
原则:
1)如果输入条件规定了值的范围,则应获取刚达到这个范围的边界值,以及刚刚超越这个范围的边界值作为测试的输入数据
2)如果输入条件规定了输入值的个数,则用最大个数、最小个数、比最大个数打一个、比最小个数小一个作为测试数据
3)根据规格说明的每个输出条件,适用原则1)
4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
5)分析规格说明,找出其他可能的边界条件
* 猜错法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计用例
* 随机测试:指测试输入数据是所有可能值中随机选取的。缺点:不能事先将测试数据存入文档,排错时无法重现测试中错误发生的过程,也无法进行回归
* 探索性测试:强调测试设计和测试执行的同时性
基本过程:
1)识别软件系统的用途
2)识别软件系统提供的功能
3)识别软件系统潜在的不稳定的区域
4)在探索软件系统的过程中记录关于软件的信息和问题
四个类型:
1)自由探索:对一个应用程序的所有功能,以任意次序、使用各种方法进行随机探测,不考虑哪些功能是否必须包含在内。
2)基于场景
3)基于策略:将自有探索与具有测试老手的经验、技能和感知融合在一起
4)基于反馈:源于自由,利用反馈指导今后的探索
8.3 测试用例设计
-- 高质量用例具备的特点:
1)正确性:保证至少覆盖需求规格说明书中的各项功能
2)完整性:避免遗漏,还体现在临界测试、压力测试、性能测试等方面
3)准确:描述准确,避免模糊不清
4)清晰、简洁:最大操作步骤最好控制在15步以内
5)可维护性:对用例修改、增加、删除等
6)适应性:适合特定的环境、符合整个团队的测试水平
7)可重用性:不同测试者在同样测试环境下使用同样测试用例得出相同结论
-- 设计基本原则:
1)基于测试需求
2)基于测试方法
3)兼容测试充分和效率原则
4)测试用例代表性:合理、不合理,合法、不合法,边界、越界,操作和环境设置等
5)结果可判定性(明确结果)
6)可再现性
-- 更具体原则:
1)一个用例对应一个功能点
2)用例易读
3)执行粒度越小越好
4)步骤清晰
5)结果明确
6)类似功能的用例抽象并归类
7)避免冗长和复杂
8)总体设计思路:先基本功能,后复杂功能;先一般用户、再特殊用户;先正常、再异常;先易后难、循序渐进
-- 用例覆盖内容:
1)正确性 -- 1)、2)、6)、8)、9)、13)为模块(组件、控件)测试,组合(集成)测试、系统测试都涉及并要重点进行测试
2)容错性(健壮性)
3)完整(安全)性 -- 3)、7)、10)、11)、12)、14)系统测试重点
4)接口间测试 -- 集成测试重点
5)数据库测试 -- 单元测试重点
6)边界值分析
7)压力测试
8)等价划分
9)错误推测
10)效率
11)可理解(操作)性
12)可移植性
13)回归测试
14)比较测试
-- 编写测试用例注意事项:
1)功能检查:是否齐全、是否多余、是否可以合并、是否可再细分、流程与业务是否一致、流程能否顺序进行、各操作关系是否清晰、各数据传递是否正确等等
2)面向用户的考虑:操作方便易用、智能、提示模糊或有误导、操作多余、记忆操作或初始化设置、确认提示、反映用户操作结果、符合用户习惯、选项和禁用是否合理、相似操作是否做成通用模块
3)数据处理:
输入数据:边界值、大于边界值、小于边界值、空值、极限值、0、负数、非法字符、日期、跨年、数据格式等,及数据之间的关联、逻辑,数据范围、格式限制是否合理等
数据处理:处理速度,处理能力,数据处理正确率,计算方式和计算结果准确性等
输出结果:正确率,输出格式,预期结果,实际结果
4)软件流程测试:反操作流程、反逻辑操作、重复操作、反业务流程操作以及违反流程的或打乱流程的或不按操作手册的乱操作
测试用例设计步骤:
1)测试需求分析
2)业务流程分析:主流程是什么,条件备选流程是什么,数据流向是什么,关键判断条件是什么
3)测试用例设计
4)测试用例评审
5)测试用例更新完善
测试用例优先级:
1)继承测试需求的优先级别
2)测试用例在用户实际使用中的使用概率和频率
3)测试用例导致被测软件出错的概率
4)用例导致系统发生错误后对系统的危害性