软件开发过程模型
在软件开发的几十年实践中,人们总结了很多软件开发模型用来描述和表示一个复杂的开发过程,如:
软件测试与软件的开发模式有着紧密的联系,作为一名测试人员,应该充分理解软件的开发模式,
以便找准自己在其中的位置,从而发挥自身的价值。
瀑布模型
1、是线性模型的一种,在所有模型中占有重要地位,是所有其他模型的一个基础。
2、每一个阶段执行一次,按线性顺序进行软件开发。
测试的切入点:
测试阶段处于软件实现后,必须在代码完成后留出足够的时间给测试活动,
否则将导致测试不充分,很多问题到项目后期才暴露
瀑布模型的优缺点
(在需求分析和设计阶段,多进行组织开会,讨论需求分析的变化以确定好方案)
快速原型模型
在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。
第一步是建造一个快速原型,实现用户与系统的交互,用户对原型进行评价,进一步细化待开发软件的需求。
通过逐步调整原型使其满足用户的要求,开发人员可以确定用户的真正需求是什么。
第二步是在第一步的基础上开发出用户满意的软件产品。
快速原型模型的优缺点
螺旋模型(了解)
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,
螺旋模型沿着螺旋线旋转,即在坐标的4个象限上分别表示了4个方面的活动,如图所示:
制定计划
风险分析
实施开发
客户评估
螺旋模型的优缺点
测试模型
随着测试过程的管理和发展,测试人员通过大量的实践,从而总结出了不少测试模型,
如常见的V模型、W模型、H模型等。这些模型与开发紧密结合,对测试活动进行了抽象,
成为了测试过程管理的重要参考依据。
V模型
V模型是最具有代表意义的测试模型,最早是由Paul Rook在20世纪80年代后期提出,
由英国国家计算机中心文献中发布,旨在改进软件开发的效率和效果;
V模型推出之前,人们通常把测试过程作为在需求分析、概要设计、详细设计、编码全部完成之后的一个阶段,
尽管当时已经出现了测试工作会占用这个项目周期一半的时间,但是大多数人认为测试只是一个收尾工作;
V模型在这个时候推出,就是为了改变之前行业的普遍认识。
V模型本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。
V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间的阶段对应关系。
V模型示意图:
V模型的优缺点
优点:
测试V模型即包含了底层测试又包含了高层测试;
底层测试:检验源代码质量的测试,如:单元测试;
高层测试:检验整个系统的需要,如:系统测试;
V模型清楚地标识出了软件开发的阶段。
它采用自顶向下逐步求精的方式把整个开发过程分成不同的阶段,每个阶段的工作都很明确,因此便于控制开发过程。
当所有的阶段都完成之后,该软件的开发过程也随之结束。
缺点:
V模型一大缺点正是它自身的顺序性所导致的。到了测试阶段,程序已经完成,错误已经产生,
很多前期的错误一直到测试阶段才发现,甚至无法发现,往往无从修改了。
同时实际的开发过程中,在需求阶段很难把用户的需求完全明确下来,
因此,当需求变更时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程,返工量非常大,模型灵活性比较低。
W模型
IEEE std1012-1998《软件验证和确认(V&V)》的原则中提出了在软件的需求和设计阶段也应有测试活动,并且提出了相应的原则;
W模型由Evolutif公司提出:开发一个V,测试一个V,组合的W模型;
测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试。
W模型示意图:
W模型优缺点
H模型(了解)
H模型诞生背景
人们发现虽然软件开发中需求、设计、编码等活动被分阶段执行、
但是实践中,他们并不是完全串行的,它们之间更多时候是交叉进行的,更多的是迭代执行。
为了解决上面的问题,有专家专门提出了H模型,它将测试活动完全独立出来,形成一个完全独立的流程,
同时将测试准备和测试执行也清晰表现出来。
测试流程
测试准备:所有测试执行活动的准备;判断是否到测试就绪点;测试就绪点:测试准入准则,即是否可以开始执行测试的条件;测试执行:具体的执行测试的程序。
其他流程
具体开发中的流程,如:设计流程
H模型优缺点
软件测试分类
按开发阶段分类
单元测试:
又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。
单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
单元定义:C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。
集成测试:
又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。
1.什么时候进行集成测试?
2.由谁来做集成测试?测试人员
3.集成测试的依据?
系统测试(system testing):
指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。
系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,
以及系统在不同的软硬件环境中的兼容性等。
按是否查看源代码
黑盒测试(black-box testing)
又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据。
白盒测试(white-box testing)
指的是把盒子打开,去研究里面的源代码和程序结构。
在软件公司,往往采用黑盒测试&白盒测试相结合的方式。
软件的整体功能和性能进行黑盒测试
软件的源代码采用白盒测试
黑盒测试
黑盒测试能发现以下几类错误:
功能不对或功能遗漏。
界面错误。
数据库访问或者处理错误。
性能问题。
黑盒测试的分类:
性能测试(performance testing)峰值(后面详细 现在了解)
是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,
通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。
时间性能(事务响应时间等)
空间性能(系统资源消耗)
一般性能测试
稳定性测试
负载测试:通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。
压力测试:通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。
按是否运行分类
静态测试(static testing)
,指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
动态测试(dynamic testing)
是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
验收测试
α测试
β测试
γ测试
随机测试(探索测试)
随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。
另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。
尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试(Regressivetesting)一起进行。