软件开发过程模型
瀑布模型Waterfall Model
瀑布模型介绍:
最早出现在1970年,由罗伊斯 W Royce提出的瀑布模型。该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泄,最终得到所开发的软件产品,投入使用。
瀑布模型定义:
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干工作阶段,形如瀑布流水,最终得到软件产品。
1.是线性模型的一种,在所有模型中占有重要地位,是所有其他模型的一个基础。
2.每一个阶段执行一次,按线性顺序进行软件开发。
3.测试的切入点:
测试阶段处于软件实现后,必须在代码完成后留出足够时间给测试活动,否则将导致测试不充分,很多问题到项目后期才暴露。
瀑布模型的优缺点:
优点:
1.开发的各个阶段比较清晰
2.强调早期计划及需求调查
3.适合需求稳定的产品开发
缺点:
1.依赖与早期的需求调查,不适应需求变化。
2.单一流程不可逆。
3.风险往往延至后期才显露,失去及早纠正的机会。
4.问题在项目后期才开始暴露。
5.前面未发现的错误会传递并扩散到后面阶段,可能导致项目失败。
快速原型模型Rapid Prototype Model
快速原型是利用原型辅助软件开发的一种新思想。经过简单快速分析,快速实现一个原型,用户与开发者在试用原型过程中加强通信与反馈,通过反复评价和改进原型,减少误解,弥补漏洞,适应变化,最终提高软件质量。
快速软件模型的优缺点
优点:
克服瀑布模型的缺点,更好的满足用户需求并减少由于软件需求不明确带来的项目开发风险。适合预先不能确切定义需求的软件系统开发。
缺点:
不适合大型系统的开发(适合开发小型的、灵活性高的系统)。前提要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。
螺旋模型Spiral Model
这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。
1.制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
2.风险分析:分析评估所选方案,考虑如何识别和消除风险;
3.实施工程:实施软件开发和验证;
4.客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型优缺点
优点:
螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前经常发生的循环之前,都必须首先进行风险评估。
缺点:
采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能及时标识风险,势必会造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。
软件测试&软件工程
软件测试与软件工程息息相关,软件测试是软件工程组成中不可或缺的一部分。
在软件工程、项目管理、质量管理得到规范化应用的企业,软件测试也会进行的比较顺利,软件测试发挥的价值也会更大。
要关注软件工程、质量管理以及配置管理与软件测试的关系,在不同的开发模式下,如何进行软件测试。
测试模型
问:测试的过程和软件开发的过程一样吗?是否有很多看上去很专业,似乎有内涵的模型呢?
答:随着测试过程的管理和发展,测试人员通过大量的实践,从而总结出来了不少测试模型,如:V模型、W模型、H模型等。这些模型与开发紧密结合,对测试活动进行了抽象,成为了测试过程管理的重要参考依据。
V模型
V模型是最具有代表意义的测试模型,最早是由Paul Rook 在20世纪80年代后期提出,由英国国家计算机中心文献中发布i,旨在改进软件开发的效率和效果;
V模型推出之前,人们通常把测试过程作为在需求分析、概要设计、详细设计、编码全部完成之后的一个阶段,尽管当时已经出现测试工作会占用这个项目周期一般的时间,但是大多数人认为测试只是一个收尾工作、V模型在这个时候推出,就是为了改变之前行业的普遍认识。
V模型本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。
V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间的阶段对应关系。
V模型大体可以划分为以下几个不同阶段步骤:需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。
需求分析
首先要明确客户需要的是什么,需要的软件作成什么样子,需要有哪几项功能,这一点上比较关键的是分析师和客户沟通时理解能力与交互性。要求分析师能准确的把客户所需要达到的功能,实现方式等表达出来,给出分析结果,写出需求规格说明书。
概要设计:
主要是架构的实现,指搭建架构、表达各模块功能、模块借口连接和数据传递的实现等项事务。
详细设计:
对概要设计中表述的各模块进行深入分析,对各模块组合进行分析等,这一阶段要求达到伪代码级别,已经把程序的具体实现的功能,现象等描述出来。其中需要包含数据库设计说明。
软件编码:
按照详细设计好的模块功能表,编程人员编写出实际代码。
单元测试:
按照设定好的最小测试单元进行按单元测试,主要是测试程序代码,为的是确保各单元模块被正确的编译,单元的具体划分按不同的单位与不同的软件有不同,比如有具体到模块的测试,也有具体到类、函数的测试等。
集成测试:
经历了单元测试后,将各单元组合成完整的体系,主要测试各模块间组合后的功能实现情况,以及模块接口连接的成功与否,数据传递的正确性等,其主要目的是检查软件单位之间的接口是否正确。根据集成测试计划,一边将模块或其他软件单位组合成系统,一边运行该系统,以分析所组成的的系统是否正确,各组成部分是否合拍。
系统测试:
经过了单元测试和集成测试以后,我们要把软件系统搭建起来,按照软件规格说明书中所要求,测试软件其性能功能是否和用户需求相符合,在系统中运行是否存在漏洞等。
验收测试:
主要就是用户在拿到软件的时候,在使用现场,会根据前边所提到的需求,以及规格说明书来做相应测试,以确定软件达到预期的效果。
V模型的优缺点
优点:
测试V模型即包含了底层测试又包含了高层测试;
-底层测试:检验源代码质量的测试,如:单元测试;
-高层测试:检验整个系统的需要,如:系统测试
V模型 清楚地标识出了软件开发的阶段。
它采用自顶向下逐步求精的方式把整个开发过程分成不同阶段,每个阶段的工作都很明确,因此便于控制开发过程。当所有的阶段都完成之后,该软件的开发过程也随之结束。
缺点:
V模型一大缺点正是它自身的顺序性所导致的。到了测试阶段才发现,甚至无法发现,往往无从修改。
同时实际的开发过程中,在需求阶段很难把用户需求完全明确下来,因此,当需求变更时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程,返工量非常大,模型灵活性比较低。
W模型
IEEE std1012-1998《软件验证和确认(V&V)》的原则 中提出了在软件的需求和设计阶段也应有测试活动,并且提出了相应的原则;
W模型由Evolutif公司提出:开发一个V,测试一个V,组合的W模型;
测试伴随整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试。
W模型优缺点
优点
强调测试伴随着整个软件开发周期,而且测试的对象不仅仅是 程序,需求和概要设计同样要测试;
更早地接入测试,可以发现开发初期的缺陷,那么可以用更加低的成本进行缺陷修复;
同样是分阶段的工作,便于控制项目过程。
缺点:
依赖于软件开发和软件测试依然保持一前一后的线性关系,依然无法支持迭代、自发性和需求等变更调整;
对于当前很多项目,在执行的过程中根本不产生文档,那么W模型基本无法适用;
使用起来技术复杂度很高,对于需求和设计的测试要求很高,实践起来困难。
按照测试阶段分类
单元测试
又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
单元定义:C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。
集成测试
又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。
系统测试
指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。
系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的 软硬件环境中的兼容性。
按照是否查看源代码
黑盒测试(black-box testing)
又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据。
白盒测试(white-box testing)
指的是把盒子打开去研究里面的源代码和程序结构。
在软件公司,往往采用黑盒测试&白盒测试相结合的方式。
软件的整体功能和性能进行黑盒测试
软件的源代码采用白盒测试
黑盒测试优缺点
优点
测试人员不需要了解现实的细节,包括特定的编程语言;
测试人员和编程人员是相互独立的(黑盒设计用例设计与程序如何实现无关);
从用户角度进行测试,很容易被接受和理解;
有助于暴露任何与规格不一致或是歧异的地方;
缺点:
不能测试程序内部特定部位;
程序未执行的代码无法发现;
不可能做到穷尽测试
黑盒测试能发现以下几类错误:
功能不对或功能遗漏
界面错误
数据库访问或者处理错误
性能问题
黑盒测试分类
功能测试(function testing)
是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
逻辑功能测试(function testing)
界面测试(UI testing)
易用性测试(usability testing)
安装测试(installation testing)
兼容性测试(compatibility testing)
性能测试(performance testing)峰值
(稍作了解 之后详细了解)
是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。
时间性能(事务响应时间等)
空间性能(系统资源消耗)
一般性能测试
稳定性测试
负载测试:通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。
压力测试: 通过确定一个系统的瓶 颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。
灰盒测试
是介于白盒测试和黑盒测试之间的一种测试,既可保证黑河的关注点又可掌握白盒的内部结构,但不会去对内部程序功能和运作做详细了解,灰盒测试结合了白盒测试和黑盒测试的要素。
按照是否运行分类
静态测试(static testing)
指不实际运行被测软件,而只是静态地检查程序代码、界面文档中可能存在的错误过程。
动态测试(dynamic testing)
是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
验收测试
软件正式版本推出之前的几个版本,需要有人测试-下,看看是不是有问题。在开发该软件的公司内部的由该公司内部人员测试的称为: Alpha测试Alpha测试主要看有没有功能缺失或系统错误,Alpha测试完后一般不会有大问题了。然后把软件拿给用户测试,称为:beta测试,主要是看用户对软件外观、使用方便等的反应。这么多的测试版-方面为了最终产品尽可能地满足用户的需要另方面也尽量减少了软件中的bug.然后做过一些修改,成为正式发布的候选版本时,叫做gamma(现在叫做RC - Release Candidate)
简单来说,阿尔法测试主要是测试人员在开发环境下的测试,贝塔测试是在实际环境中的测试,或者公司内部人员在模拟真实环境中的测试。
α测试
Alpha是内测版本,即现在所说的 CB,此版本表示该软件仅仅是一个初步完成品 通常只在软件开发者内部交流也有很少一 部分发布给专业测试人员。一 般而言, 该版本软件的bug较多,普通用户最好不要安装。
β测试
是公测版本,是对所有用户开放的测试版本,消除了严重错误,但还存在着一些缺陷,需要通过大规模的发布测试来进一步消除。这一版本通常由软件公司免费发布。
γ测试
指的是版本正式发行的候选版。该版本已经相当成熟了,与即将发布的正式版相差无几,成为正式发布的候选版本。
随机测试
主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。另外对于软件更新和新增的功能重点测试,尤其对以前测试发现的重大bug进行再次测试,可结合回归测试一起进行。