软件测试的基本概念
1 软件测试的定义
1.1 定义
IEEE定义:“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求,或是弄清预期结果与实际结果之间的差别”。
G.J.Myers(梅耶)在《软件测试之艺术》书中描述:“程序测试是为了发现错误而执行程序的过程” 。
以上两个概念提出的测试方法都是要运行系统(动态测试)才能得出结果,该方法一般在开发后期介入。
而实际上,优秀的软件测试是:静态测试+动态测试。静态测试在开发前期介入。
经验证明,尽早测试,有利于软件的健康成长。当然,这与采用何种软件开发周期密切相关。
1.2 软件测试的原则
- 站在用户的角度,对产品进行全面测试。
- 尽早、尽可能多地发现缺陷(bug),并负责跟踪和分析产品中的问题。
- 对不足之处提出质疑和改进意见。
- 争取零缺陷(zero-bug),做到足够好(good-enough)。
1.3 值得学习的 10 项原则
1 所有测试的标准都是建立在用户需求之上。 |
---|
2 软件测试必须基于 ”质量第一“ 的思想去开展各项工作。 |
3 事先定义好产品的质量标准。 |
4 软件项目一启动,软件测试也就开始,而不是等程序写完,才开始进行测试。 |
5 穷举测试是不可能的。 |
6 第三方进行测试会更客观,更有效。 |
7 软件测试计划是做好软件测试工作的前提。 |
8 要设计合理的测试用例。 |
9 对发现错误较多的程序段,应进行更深入的测试。 |
10 重视文档,要善于保存一切测试过程文档。 |
2 软件缺陷(BUG)是什么
2.1 Bug的定义
软件缺陷,速称Bug,包含各种偏差、谬误或错误。
2.2 软件企业如何尽量减少缺陷
- 从项目计划开始,制定合理可行的项目计划,并监控项目执行过程,如果出现问题要及时调整;
- 从需求获取的角度,高度关注用户软件的用途,按照风险管理的要求,对不同用户软件,事先制定好质量的风险等级,以便为软件测试提供原则和规范;
- 从开发的角度,遵守标准、规范的开发方法流程;
- 从测试工作的角度,选择适合的测试方法设计测试用例,并确定软件缺陷优先级,便于处理复杂的缺陷修正过程。
2.3 缺陷修复的优先级
- 致命的(fatal)——非常严重的缺陷:致命的错误,造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能组完全丧失等。
- 严重的(critical)——较严重的缺陷:严重错误,指主要功能或特性没有实现,导致严重问题的错误声明。
- 一般的(major)——软件一般缺陷:不太严重的错误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好地实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,用户界面差,操作时间长等。
- 微小的(minor)——软件细微缺陷:一些小问题,对功能几乎没有影响,产品及属性仍可使用,如有个别错别字、文字排列不整齐等。
2.4 Bug 的不同状态
- 激活状态(Active或Open):测试人员新报的bug,问题还没有解决,或验证后bug仍然存在。
- 已修正状态(Fixed或Resolved):开发人员针对存在的缺陷,修改程序,认为问题已解决问题。
- 关闭或非激活状态(Close或Inactive):测试人员验证已修改的bug后,确认bug已不存在的状态。
- 潜伏状态:测试人员没有发现,而该Bug确实存在。
2.5 软件缺陷在开发周期不同阶段的分布
缺陷如果没有在早期测试发现,后期发现可能会导致大规模的重新设计与编码。
软件缺陷随着时间的推移带来的成本越来越大!
3 软件开发周期与测试
3.1 常用的软件开发生命周期模型
- 瀑布模型
- 螺旋模型
- RUP迭代模型
- V模型
- 敏捷开发模型
- IBM IPD开发模型(跨部门团队、纵横矩阵式管理)
3.2 迭代开发模型
3.3 V 模型——测试驱动模型
V模型的特征——将测试环节引入模型,确立了提前测试、测试驱动开发的软件开发理念。
3.4 改进的 V 模型—— W 模型
4 软件测试阶段
软件测试也是一种软件过程。
软件测试是软件开发过程中的重要内容之一,是软件质量保证的关键。
4.1 测试阶段
比较规范的软件测试阶段划分如下:
4.2 软件测试流程
上图总结:
综上所述,从软件产品生命周期开始,软件测试也就开始了。
5 软件测试的工作范畴
-
测试管理——编写测试计划,监控测试过程;
-
测试设计——编写测试方案、测试用例;
-
测试执行——执行测试用例,生成缺陷报告;
-检视代码,评审开发文档(静态测试);
-运行系统进行测试(动态测试),发现软件缺陷,提交缺陷报告,并确认缺陷最终得到了修正。
-
通过各种测试指标测试度量软件的质量。
-如测试覆盖率、缺陷数量、缺陷解决比例等。
5.1 测试覆盖率
5.1.1 对源代码的测试覆盖率
是指在系统测试过程中,所测试到的功能和非功能需求占到需求总数的百分比。一般我们可以通过测试用例的执行率来衡量。一般有语句覆盖、分支覆盖、条件覆盖、路径覆盖等方法。
一个通用的代码覆盖标准是:对软件关键模块的语句覆盖率要达到100%,分支覆盖要达到85%以上。
一些单元测试工具,如Junit、C++Test、Jtest等都能进行代码测试,并统计出代码的测试覆盖率。
5.1.2 对需求的测试覆盖率
是指在系统测试过程中,所测试到的功能和非功能需求占到需求总数的百分比。
一般我们可以通过测试用例的执行率来衡量。
一个通用的需求文档覆盖标准是:测试用例的执行率要在100%,即所有用例都要执行一遍,测试用例的通过率要达到95%以上。