我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows平台软件开发模型总结:V型模型、瀑布模型、迭代模型、增量模型、螺旋模型、原型模型。
很多人可能知道了,那就是在我们浙江省,从2021年年初到现在,开展了一场数字化改革。那么在这场数字化改革浪潮中,被提到最多的一个概念就是V字模型,V字模型是软件开发模型的一种,那我们这就来看看什么是V字模型,其他的软件开发模型又是怎么样的。
1.V型模型
V模型其实是瀑布模型的变种,反映了软件测试活动与软件开发过程(从分析到设计)的关系。
需求分析:
即首先要明确客户需要的是什么,需要软件作成什么样子,需要有那几项功能,这一点上比较关键的是分析师和客户沟通时的理解能力与交互性。要求分析师能准确的把客户所需要达到的功能,实现方式,等表述出来,给出分析结果,写出需求规格说明书。
概要设计:
主要是架构的实现,指搭建架构、表述各模块功能、模块接口连接和数据传递的实现等项事务。
详细设计:
对概要设计中表述的各模块进行深入分析,对各模块组合进行分析等,这一阶段要求达到伪代码级别,已经把程序的具体实现的功能,现象等描述出来。其中需要包含数据库设计说明。
软件编码:
按照详细设计好的模块功能表,编程人员编写出实际的代码。
单元测试:
按照设定好的最小测试单元进行按单元测试,主要是测试程序代码,为的是确保各单元模块被正确的编译,单元的具体划分按不同的单位与不同的软件有不同,比如有具体到模块的测试,也有具体到类,函数的测试等。
集成测试:
经过了单元测试后,将各单元组合成完整的体系,主要测试各模块间组合后的功能实现情况,以及模块接口连接的成功与否,数据传递的正确性等,其主要目的是检查软件单位之间的接口是否正确。根据集成测试计划,一边将模块或其他软件单位组合成系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。
系统测试:
经过了单元测试和集成测试以后,我们要把软件系统搭建起来,按照软件规格说明书中所要求,测试软件其性能功能等是否和用户需求相符合,在系统中运行是否存在漏洞,等。
验收测试:
主要就是用户在拿到软件的时候,在使用现场,会根据前边所提到的需求,以及规格说明书来做相应测试,以确定软件达到预期的效果。
优点:清楚的标识了开发和测试的各个阶段;自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。强调了在整个软件项目开发中需要经历的若干个测试级别,并与每一个开发级别对应。
缺点:由于它的顺序性,当编码完成之后,正式进入测试时,这时发现的一些bug可能不容易找到其根源,并且代码修改起来很困难。把测试作为编码之后的最后一个活动,需求分析等前期产生的错误直到后期的验收测试才能发现。
在传统的开发模型中,比如瀑布模型,通常把测试过程作为在需求分析、概要设计、详细设计和编码全部完成之后的一个阶段,尽管有时测试工作会占用整个项目周期一半的时间,但仍有人认为测试只是一个收尾工作,而不是主要的工程。V模型是软件开发瀑布模型的变种,它反映了测试活动与分析和设计的关系。
实际中,由于需求变更较大,导致要重复变更需求、设计、编码、测试。返工量大。
2.瀑布模型(文档驱动)
在瀑布模型中,开发过程是线性的。任务和阶段按严格顺序一个接一个地完成。进度平稳地向下流动,就像瀑布上的水一样。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动。
瀑布模型是由文档驱动,在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。不适合需求模糊的系统。
用户的需求非常清楚全面,且在开发过程中没有或很少变化,对软件的应用领域很熟悉;用户的使用环境非常稳定;开发工作对用户参与的要求很低。不适合需求模糊或需求经常变动的系统
优点:每个阶段的开发质量都有保证,减少了返工。是文档细致,降低了沟通成本,有利于及早发现问题。开发质量高,层次化明确,需求明确。
缺点:周期长,不易变更。不灵活(开发过程一般不能逆转,否则代价太大,如果项目是长期的,且正在进行的,此模型不行)。放回上一级开发阶段需要极大代价,不支持迭代开发,会产生大量文档,系统开发周期长。
3.迭代模型(风险驱动)
使用条件适合于事先不能完整定义产品的所有需求,计划多期开发的项目。高风险项目,且需求不确定,用户能在整个开发过程中不同程度地参与。
1、在项目开发早期需求可能有所变化。
2、分析设计人员对应用领域很熟悉。
3、高风险项目。
4、用户可不同程度地参与整个项目的开发过程。
优点:降低了产品无法按照既定进度进入市场的风险。加快了整个开发工作的进度。
缺点:风险管理成本较高,在风险分析,进度管理方面,对项目组成员的要求也非常高。
4. 增量模型(任务驱动)
增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能
适应于需求经常改变的软件开发过程,比如用户核心需求非常清楚、项目人员不足、产品可以分割成不同的阶段分别完成
优点:开始时不用投入大量人力资源,可以事先推出核心产品以稳定用户,可以有计划的管理技术风险。能在较短的时间内向用户提交可完成部分工作的产品。将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。开发顺序灵活,开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。在达到初始需求之前可降低成本。可快速生产出可使用的系统。能够有计划地管理技术风险。
缺点:需要开放式体系结构,可能会产生设计效果差、开发效率低的情况。
5.螺旋模型
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。
主要分为四个工作步骤:(1)制定计划:确定软件目标/选定实施方案/弄清限制条件;(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;(3)实施工程:实施软件开发和验证;(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
特别适用于庞大、复杂并具有高风险的系统。对新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
优点:强调各个开发阶段的质量。减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险。
缺点:采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。软件建设周期长,但软件技术发展比较快,所以可能会和当前的技术水平有较大的的差距,无法满足当前用户需求。由于引入了非常严格的风险识别、风险分析和风险控制,将会大大消耗人力、资源,如果严重的影响了项目的利润,风险分析将毫无意义。
6.原型模型(需求驱动)
原型模型要求在进行实际软件开发之前,应建立系统的工作原型。原型通常是实际系统的一个非常粗糙的版本,与实际软件相比,可能表现出有限的功能能力、低可靠性和低效的性能。在许多情况下,客户只能对软件产品的期望有一个大致的了解。在没有关于系统输入、处理需求和输出需求的详细信息的这种情况下,可以使用原型模型。
原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。在实际的项目过程中,借助于组织过程资产以及快速模型软件,一般在需求分析的时候,就可以建立一些简单的原型。
适用场景为处理简单过程明确、涉及面窄的小型系统,也可以是大型系统的需求阶段,用原型去跟用户交流,需求分析会更加明确和细化
优点:支持早期产品营销,降低维护成本,由于系统是并排的,因此可以更早地检测到错误。
缺点:一个不稳定/执行不善的原型通常会成为最终产品,花费大,很难知道该项目将持续多久,耗时长。
作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。