软件生命周期、测试方法和覆盖率
一、测试基础
-
什么是软件测试
IEEE在1983年将软件测试定义为:使用人工或自动化的方法运行某个系统或软件,检测被测试对象是否满足需求规格,或者弄清预期结果和实际结果的区别。
-
软件测试主要目的
人们对于测试目的的认识在不断变化
- 证明软件可以工作
- 发现软件中的缺陷
- 预防软件中缺陷的发生
-
测试工程师的主要工作
- 代码和文档的检查
- 进行测试的设计,编写测试的文档:测试计划,测试方案,测试用例
- 测试执行的工作,提交缺陷报告,并进行跟踪
- 对于软件质量进行评估,提交测试报告
二、软件的生命周期
-
瀑布模型
- 项目需求(计划阶段):确定软件研发的目标、给出初步设想、可行性研究和成本评估
- 需求分析:对于软件的规格进行详细的定义-《软件需求规格说明书》
- 概要设计:设计软件整体体系结构-《概要设计文档》
- 详细设计:对软件中每个模块的工作的详细定义,形成流程图,伪代码,《详细设计文档》
- 开发:使用计算机编程语言等技术,将设计转化为软件编码
- 测试:检验软件是否符合需求规格,单元测试->集成测试->系统测试
- 验收:软件交付给客户
- 运行和维护:对于软件进行修改和升级
-
组织架构
- 项目管理:项目经理PM
- 软件开发:开发经理、需求人员、设计人员、软件开发工程师
- 软件测试:测试经理、测试组长、测试工程师
- 配置管理:版本管理和软件资产的管理
- 运维人员:负责软件的运行环境
三、测试方法
A关注软件信息不同
-
白盒测试
-
概念:依据软件的内部构造(内部信息)来设计测试,对于软件内部流程控制进行测试
-
特点:测试中不关注软件整体需求规格
-
方法
逻辑覆盖:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖。
程序插桩:在被测试程序中插入操作,实现测试的目的。例如插入打印语句。
-
-
黑盒测试
-
概念:将被测试对象看成是不透明的盒子,对整体规格进行测试。测试对象可以是完整的系统,也可以是子系统,模块,单元,函数。
-
特点:主关注整体规格,不关注内部规格。
-
测试类型:功能测试、性能测试、安全性测试、破坏性测试。
-
方法
黑盒测试用例的设计方法:等价类划分、边界值分析、判定表法、因果图法、流程分析法
设计方法特点:既能覆盖所有情况,又减少测试用例的数量
-
-
灰盒测试
- 概念:介于黑盒与白盒之间,既利用整体规格信息,又利用内部实现信息进行的测试。
B是否运行软件
-
静态测试
- 概念:不运行软件,而使用其他方法进行的测试
- 方法:对于文档和代码进行检查,并提及意见,以及修改内容
-
动态测试
- 概念:按设计好的步骤,运行被测试软件,验证软件实现与需求、设计是否一致
- 方法:常见的黑盒测试类型一般都属于动态测试
C测试执行者的不同
-
人工测试
- 概念:测试活动有人来进行
- 优点:能发现更多的问题和缺陷
-
自动化测试
-
概念:是指计算机模拟人的行为,来进行测试的活动
-
优点:执行效率高、可以执行人工难以完成的工作
-
四、测试覆盖率
-
概念
覆盖率是衡量测试完整性的手段
通用公式:覆盖率=至少被执行1次的项的数量/项的总数
根据不同的统计维度分类:白盒覆盖、黑盒覆盖、灰盒覆盖
-
白盒覆盖率:主要是指代码逻辑的覆盖
-
语句覆盖率
统计公式:语句覆盖率 =至少被执行1次的语句的数量/语句的总数
什么是语句:目前没有统一的概念,可以进行约定,代码中的分号结尾的算作语句。
-
判定覆盖率
统计公式:判定覆盖率=至少被执行1次的判定结果的数量/判定结果的总数
什么是判定的结果:if关键字后括号中的表达式
-
条件覆盖率
统计公式:条件覆盖率=至少被执行1次的条件结果的数量/条件结果的总数
什么是条件:判定是由多个条件组成的,使用逻辑运算符连接
-
判断-条件覆盖率
统计公式:判定-条件覆盖率=(至少执行1次的判定结果数+条件结果数)/(判定结果总数+条件结果总数)
什么是判断-条件:条件覆盖加上判定覆盖
-
条件组合覆盖率
什么是条件组合:判定中条件的结果的排列组合
-
路径覆盖率
统计公式:路径覆盖率=至少被执行1次的路径的数量/路径的总数
什么是路径:程序执行的路径
-
-
灰盒覆盖率
- 接口覆盖率=测试到的接口的数量/程序中接口总数
- 函数覆盖率=测试到的函数的数量/程序中函数总数
-
黑盒覆盖率
- 概念:系统测试中一般是测试用例对于需求进行覆盖
- 统计公式:黑盒覆盖率=测试到的需求的数量/需求的总数