软件测试基础理论体系学习1-软件测试背景和测试基础
Posted 虫无涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试基础理论体系学习1-软件测试背景和测试基础相关的知识,希望对你有一定的参考价值。
1 软件测试背景和测试基础
软件测试在软件生命周期中占据重要的地位,软件测试慢慢的独立发展成为一个行业,并且在迅猛发展。
1 软件测试背景
1.1 软件缺陷与软件故障
1.1.1 软件缺陷与软件故障案例
注:可自行搜索以下案例。
● 美国迪斯尼公司的狮子王游戏软件BUG;
● 火星登陆事故;
● 跨世纪“千年虫”问题。
1.1.2 软件缺陷的定义
对于软件缺陷的精确定义,通常有下列5条描述:
● 软件未达到产品说明书的功能;
● 软件出现了产品说明书指明不会出现的错误;
● 软件功能超出产品说明书指明范围;
● 软件未达到产品说明书虽未指出但应达到的目标;
● 软件测试员认为难以理解、不易使用、运行速度缓慢、或者最终用户认为不好。
1.1.3 软件缺陷的特征
● 软件的特殊性决定了缺陷不易看到,即“看不到”;
● 发现了缺陷,但不易找到问题发生的原因所在,即“看到但是抓不到”。
1.2 软件缺陷产生的原因
软件缺陷从哪来?
- 第一大原因就是软件产品规格说明书,很多情况下,说明书没有写,或写的不够全面,经常更改,或者开发小组没有很好的沟通,造成对说明书理解的不一致。
- 第二大原因是软件设计,没有做设计或设计不好,经常变动等和产品规格说明书一样的问题,第三个原因才是编写代码和其它原因;前两个原因至少占了80%以上。
通过大量的测试理论研究及测试实践经验的积累,典型的软件缺陷产生的原因被归纳为以下几种类型:
(1) 需求解释有错误;
(2) 用户需求定义错误;
(3) 需求记录错误;
(4) 设计说明有误;
(5) 编码说明有误;
(6) 程序代码有误;
(7) 数据输入有误;
(8) 测试错误;
(9) 问题修改不正确;
(10)不正确的结果是由于其他的缺陷而产生。
2 软件测试基础理论
软件测试是保证软件质量的一种手段,那么,什么叫软件测试?
2.1 软件测试的定义
2.1.1 狭义
“程序测试是为了发现错误而执行程序的过程”。这个定义,被业界所认可,经常被引用。
2.1.2 广义
为了更早地发现问题,所以将测试延伸到需求评审、设计审查活动中去,也就是将“软件质量保证”的部分活动归为测试活动。实际上,在软件开发实际操作中,常常将软件测试和质量保证——这两种努力(efforts)合并起来。延伸后的软件测试,被认为是一种软件测试的广义概念。
2.2 其他定义
软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
2.3 基本理论
2.3.1 软件测试的目的
- 测试的目的是要证明程序中有故障存在,并且是最大可能地尽早找出最多的错误。测试力求设计出最能暴露出问题的测试用例。
- 测试不是为了证明程序是正确的,而是应从软件包含有缺陷和故障这个假定去进行测试活动,并从中尽可能多的发现问题。
- 实现这个目的关键是如何合理地设计测试用例,在设计测试用例的时候,要着重考虑那些易于发现程序错误的方法策略与具体数据。
- 测试是以发现故障为目的并为发现故障而执行程序的过程。
综上所述,软件测试的目的就是发现软件缺陷,尽可能早一些,并确保其得以修复。
2.3.2 软件测试的原则
软件测试,从不同的角度出发会派生出两种不同的测试原则。从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷;从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求。
中国软件评测中心的测试原则,就是从用户和开发者的角度出发进行软件产品测试的。
为了达到上述的原则,需要注意以下几点:
- 应当把“尽早和不断地测试”作为开发者的座右铭。
- 设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
- 一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
- 对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
- 制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
- 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。
- 妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。
2.2.3 测试在开发各阶段的作用
- 项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。
- 需求分析阶段:确定测试需求分析、系统测试计划的制定、评审后成为管理项目。
- 详细设计和概要设计阶段:确保集成测试计划和单元测试计划完成。
- 编码阶段:由开发人员进行自己负责部分的测试代码。在项目较大时,由专人进行编码阶段的测试任务。
- 测试阶段:依据测试代码进行测试,并提交相应的测试状态报告和测试结束报告。
2.4 软件测试和缺陷修复的代价
缺陷发现的越早,则修复这个缺陷的代价就越小,在需求、设计、编码、测试、发布等不同的阶段,发现缺陷后修复的代价都会比在前一个阶段修复的代价提高10倍。
2.5 软件测试技术概要
软件测试策略就是测试将按照什么样的思路和方式进行。通常,软件测试要经过单元测试、集成测试、确认测试、系统测试和验收测试。
2.5.1 软件测试策略
2.5.1.1 单元测试
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
2.5.1.2 集成测试
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。
- 如数据穿过接口时可能丢失;
- 一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;
- 把子功能组合起来可能不产生预期的主功能;
- 个别看起来是可以接受的误差可能积累到不能接受的程度;
- 全程数据结构可能有错误等。
2.5.1.3 确认测试
确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
2.5.1.4 系统测试
软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。
2.5.1.5 验收测试
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。经验收后,将软件提交用户。
2.5.2 软件测试技术
- 按照软件测试用例的设计方法而论,软件测试可分为白盒测试法和黑盒测试法
- 按照软件测试是否执行程序而论,软件测试又可以分为静态测试和动态测试;
- 按照软件设计方法是否采用面向对象设计技术而论,软件测试又可以分为传统测试方法和面向对象测试方法;
- 按照网络环境下C/S应用结构的特定环境而论,软件测试又有其相应的方法。
这些都是软件测试具体的测试方法。关于测试的具体方法,后续说明。
【特别说明】:知识来源于网络、各种资料、书本、网站等,本文仅用于学习使用,不做他用,如果涉及版权问题,请联系博主删除,谢谢
以上是关于软件测试基础理论体系学习1-软件测试背景和测试基础的主要内容,如果未能解决你的问题,请参考以下文章
软件测试体系学习及构建(14)-测试基础之软件测试和开发模型概述
软件测试体系学习及构建(13)-测试基础之测试工程师的基本要求