软件测试的基本概念

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 软件缺陷在开发周期不同阶段的分布

image-20220304103058613

​ 缺陷如果没有在早期测试发现,后期发现可能会导致大规模的重新设计与编码

image-20220304103211845

软件缺陷随着时间的推移带来的成本越来越大!

3 软件开发周期与测试

3.1 常用的软件开发生命周期模型

  • 瀑布模型
  • 螺旋模型
  • RUP迭代模型
  • V模型
  • 敏捷开发模型
  • IBM IPD开发模型(跨部门团队、纵横矩阵式管理)

3.2 迭代开发模型

image-20220304105327933

3.3 V 模型——测试驱动模型

V模型的特征——将测试环节引入模型,确立了提前测试、测试驱动开发的软件开发理念。

image-20220304105425253

3.4 改进的 V 模型—— W 模型

image-20220304105510169

4 软件测试阶段

软件测试也是一种软件过程。

软件测试是软件开发过程中的重要内容之一,是软件质量保证的关键。

4.1 测试阶段

比较规范的软件测试阶段划分如下:

image-20220304105837218

4.2 软件测试流程

image-20220304111239881

image-20220304111256195

上图总结:

image-20220304111355045

综上所述,从软件产品生命周期开始,软件测试也就开始了。

5 软件测试的工作范畴

  • 测试管理——编写测试计划,监控测试过程;

  • 测试设计——编写测试方案、测试用例;

  • 测试执行——执行测试用例,生成缺陷报告;

    -检视代码,评审开发文档(静态测试);

    -运行系统进行测试(动态测试),发现软件缺陷,提交缺陷报告,并确认缺陷最终得到了修正。

  • 通过各种测试指标测试度量软件的质量

    -如测试覆盖率、缺陷数量、缺陷解决比例等。

5.1 测试覆盖率

5.1.1 对源代码的测试覆盖率

是指在系统测试过程中,所测试到的功能和非功能需求占到需求总数的百分比。一般我们可以通过测试用例的执行率来衡量。一般有语句覆盖、分支覆盖、条件覆盖、路径覆盖等方法。

一个通用的代码覆盖标准是:对软件关键模块的语句覆盖率要达到100%,分支覆盖要达到85%以上。

一些单元测试工具,如Junit、C++Test、Jtest等都能进行代码测试,并统计出代码的测试覆盖率。

5.1.2 对需求的测试覆盖率

是指在系统测试过程中,所测试到的功能和非功能需求占到需求总数的百分比。

一般我们可以通过测试用例的执行率来衡量。

一个通用的需求文档覆盖标准是:测试用例的执行率要在100%,即所有用例都要执行一遍,测试用例的通过率要达到95%以上。

posted @ 2022-03-04 11:42  Mrxuexi  阅读(483)  评论(0编辑  收藏  举报