测试基础与模型

Posted mayangstu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试基础与模型相关的知识,希望对你有一定的参考价值。

【历史上第一个软件bug】

bug:原意是”臭虫“或”虫子“。1947年9月9日,正直计算机刚刚被发明的时候,哈佛大学的某个计算机实验室正在做实验。由于当时的原始计算机由很多庞大且昂贵的真空管组成,运行时会产生光和热,在下午15点45分的时候,一个飞蛾钻入真空管内,导致整个计算机无法工作。当时这只小虫子从真空管中取出后,计算机又恢复正常。后来,虫子的泛称bug这个名词就沿用下来,而哪个被拍死的飞蛾也就成为了历史上发现的第一个bug。

【千年虫的问题】

  前十八年,有一个著名的虫子把业内搅得不可开交,那就是千年虫问题,也叫做2000年问题。它是指在某些使用了计算机程序的智能系统(比如一般的计算机系统以及自动控制芯片等)中,由于其中的年份沿用早期的设计,只使用2位十进制数来表示,比如用80代表1980年,因此当系统进行(或者涉及到)跨世纪的日期处理运算(比如计算1980年到2080年之间的日期)时,就会出现错误的结果,从而引发各种各样的系统功能紊乱甚至系统奔溃。

  从千年虫的实际例子中也可以看出,不考虑硬件上的限制,如果当初在设计日期表示格式的时候能够想得更长远一些,就完全可以避免这个虫子的发作,从而节省一大笔修改更新软件等费用(据未经证实的来自美国国际资料公司调查报告表明,光是1995年到1998年,全球捉千年虫的开销就已经达到了惊人的1840亿美元)

 

一、什么是软件?

软件是计算机系统中的程序和相关文件或文档的总称。

二、什么是软件测试?

说法一:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。

说法二:软件测试就是利用一定的方法对软件的质量或者使用性进行判断和评估的过程。

三、软件测试工程师的工作内容

1.寻找软件中的bug,并且越早发现越好

2.确认bug的可重复性以及bug产生的步骤

3.确认bug是否被解决

4.测试方法,测试计划,测试平台,测试代码,测试用例,测试文档,测试报告的确定、编写和执行。

四、软件开发过程模型

1、瀑布模型

  是线性模型的一种,在所有模型中占有重要地位,是所有其他模型的一个基础。

  每一个阶段执行一次,按线性顺序进行软件开发。

  测试的切入点:测试阶段出入软件实现后,必须在代码完成后留出足够的时间给测试活动,否则将导致测试不充分,很多问题到项目后期才暴露

优点:

(1)开发的各个阶段比较清晰。

(2)强调早期计划及需求调查。

(3)适合需求稳定的产品开发。

缺点:

(1)依赖于早期的需求调查,不适应需求的变化。

(2)单一流程不可逆。

(3)风险往往延至后期才显露,失去及早纠正的机会。

(4)问题在项目后期次啊开始暴露。

(5)前面未发现的错误会传递并扩散到后面的阶段,可能导致项目失败。

改良:

沿用瀑布模型的线性思想,细化了各个阶段,在某些重要关注的阶段之间掺入迭代的思想。

2、快速原型模型

   在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。 第一步是建造一个快速原型,实现用户与系统的交互,用户对原型进行评 价,进一步细化待开发软件的需求。通过逐步调整原型使其满足用户的要求,开发人员可以确定用户的真正需求是什么。 第二步是在第一步的基础上开发出用户满意的软件产品。

优点:

克服瀑布模型的缺点,更好地满足用户的需求并减少由于软件需求不明确带来的项目开发风险。适合预先不能确切定义需求的软件系统的开发。

缺点:

不适合大型系统的开发(适合开发小型的、灵活性高的系统)。前提要有一个展示性的 产品原型,因此在一定程度上可能会限制开发人员的创新。

3、螺旋模型

   螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,螺旋模型沿着螺旋线旋转,即在坐标的4个象限上分别表示了4个方面的活动。

优点:

螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。

缺点:

采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中, 如果未能够及时标识风险,势必造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。

五、测试模型

软件测试&软件工程

• 软件测试与软件工程息息相关,软件测试是软件工程组成中不可或缺的一部分。

• 在软件工程、项目管理、质量管理得到规范化应用的企业,软件测试也会进行得比较顺利,软件测试发挥的价值也会更大。

• 要关注软件工程、质量管理以及配置管理与软件测试的关系;在不同的开发模式下,如何进行软件测试。

1、V模型

• V模型是最具有代表意义的测试模型,最早是由Paul Rook在20世纪80年代后期提出,由英国国家计算机中心文献中发布,旨在改进软件 开发的效率和效果;

• V模型推出之前,人们通常把测试过程作为在需求分析、概要设计、 详细设计、编码全部完成之后的一个阶段,尽管当时已经出现了测试工作会占用这个项目周期一半的时间,但是大多数人认为测试只是一个收尾工作;V模型在这个时候推出,就是为了改变之前行业的普遍认识。

• V模型本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。

• V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间的阶段对应关系。

技术图片

 

• 需求分析:用户需求、业务需求、需求规格说明书

• 概要设计:系统架构、模块划分、模块 与模块之间的接口。

• 详细设计:模块内部实现的逻辑和方法。

• 编码实现上面的设计。

• 单元测试 – 检测代码的开发是否符合详细设计的要求。

• 集成测试 – 检测此前测试过的各组成部分是否能完好地结合到一起。

• 系统测试 – 检测已集成在一起的产品是否符合系统规格说明书的要求。

• 验收测试 – 检测产品是否符合最终用户的需求。

V模型的优点:

– 测试V模型即包含了底层测试又包含了高层测试;

• 底层测试:检验源代码质量的测试,如:单元测试;

• 高层测试:检验整个系统的需要,如:系统测试;

– V模型清楚地标识出了软件开发的阶段。

– 它采用自顶向下逐步求精的方式把整个开发过程分成不同的阶段, 每个阶段的工作都很明确,因此便于控制开发过程。当所有的阶段都完成之后,该软件的开发过程也随之结束。

V模型的缺点:

– V模型一大缺点正是它自身的顺序性所导致的。到了测试阶段,程序已经完成,错误已经产生,很多前期的错误一直到测试阶段才 发现,甚至无法发现,往往无从修改了。

– 同时实际的开发过程中,在需求阶段很难把用户的需求完全明确下来,因此,当需求变更时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程,返工量非常大,模型灵活性比较低。

2、W模型

• IEEE std1012-1998《软件验证和确认(V&V)》的原则中提出了 在软件的需求和设计阶段也应有测试活动,并且提出了相应的原 则;

• W模型由Evolutif公司提出:开发一个V,测试一个V,组合的W模型;

• 测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序, 需求和设计同样要测试。

技术图片

 

 

 W模型的优点:

• 开发强调测试伴随着整个软 件开发周期,而且测试的对 象不仅仅是程序,需求和概要设计同样要测试;

• 更早地接入测试,可以发现 开发初期的缺陷,那么可以 用更加低的成本进行缺陷修 复。

• 同样是分阶段的工作,便于 控制项目过程。

W模型的缺点:

• 依赖于软件开发和软件测试依 然保持一前一后的线性关系, 依然无法支持迭代、自发性和需求等变更调整;

• 对于当前很多项目,在执行的 过程中根本不产生文档,那么W模型基本无法适用;

• 使用起来技术复杂度很高,对 于需求和设计的测试要求很高,实践起来困难。

3、H模型

• H模型诞生背景

– 人们发现虽然软件开发中需求、设计、编码等活动被分阶段执行、但是实践中,他们并不是完全串行的,它们之间更多时候是交叉进行的,更多的是迭代执行。

– 为了解决上面的问题,有专家专门提出了H模型,它将测试活动完全独立出来,形成一个完全独立的流程,同时将测试准备和测试 执行也清晰表现出来。

• 测试流程 – 测试准备:所有测试执行活动的准备;判断是否到测试就绪点; – 测试就绪点:测试准入准则,即是否可以开始执行测试的条件; – 测试执行:具体的执行测试的程序。

• 其他流程 – 具体开发中的流程,如:设计流程

技术图片

 

H模型的优点:

• 开发的H模型揭示了软件测试除测 试执行外,还有很多工作;

• 软件测试完全独立,贯穿整个生命周期,且与其他流程并发进行;

• 软件测试活动可以尽早准备、尽早执行,具有很强的灵活性;

• 软件测试可以根据被测物的不同 而分层次、分阶段、分次序的执 行,同时也是可以被迭代的。

H模型的缺点:

• 管理型要求高:由于模型很灵活,必须要定义清晰的规则和管理制度,否则测试过程将非常难以管理和控制;

• 技能要求高:H模型要求能够很好的定义每个迭代的规模,不能太大也不能 太小;

• 测试就绪点分析困难:测试很多时候,你并不知道测试准备到什么时候是合适的,就绪点在哪里,就绪点的标准是什么,这就对后续的测试执行的启动带来很大困难;

• 对于整个项目组的人员要求非常高: 在很好的规范制度下,大家都能高效的工作,否则容易混乱。例如:你分 了一个小的迭代,但是因为人员技能不足,使得无法有效完成,那么整个项目就会受到很大的干扰。

以上是关于测试基础与模型的主要内容,如果未能解决你的问题,请参考以下文章

测试基础知识

测试基础与模型

软件测试基础

Testing - 自动化测试的几个基础概念

性能测试基础知识

机器学习基础:(Python)训练集测试集分割与交叉验证