本文重在模型之间的比较(优缺点、适用范围等),而不在于模型定义的阐述.^-^
1.软件生存周期:软件是会迭代的,软件从生到死的整个过程被称为软件生命周期(Software Development Life Cycle,SDLC)。
一般的,可分为定义、开发和运行三个时期,又可细分为以下六个阶段:问题的定义和可行性分析、项目计划、需求分析、软件设计、编码与测试、运行与维护。
2.软件过程是整个软件生命周期中一系列有序的软件生产活动的流程。
3.软件过程模型:为了高效地开发一个高质量的软件产品,用一个合理的框架来规范描述软件生命周期中的各个流程,这个框架(开发模型)就是软件过程模型。可分为三类:传统模型、面向对象模型和敏捷开发模型(本次只介绍前两个,敏捷还没学嘛)
那就不得不提到最早也是应用最广泛的软件过程模型————瀑布模型
瀑布模型将软件生命周期分为软件计划、需求分析、软件设计、软件实现、软件测试、运行和维护等六个阶段,每一阶段是“阻塞式”的,即必须完成当前部分才能进行下一步活动。这六个阶段自上而下执行,开发进程从一个阶段“流动”到下一个阶段,如果发现问题则考虑返回上一层修改。
(1)优点:
1.再每个阶段都有检查点,当本阶段完成后,可以更有信心地专注于下一阶段
2.瀑布模型是文件驱动模型,瀑布模型再执行过程中留下了完整的文档记录,有利于降低后期软件维护的成本
3.提出了一套完整的科学的软件开发流程(其迭代思想被多个模型借鉴),使工程师可以工程化的完成软件的开发与设计。
(2)缺点:
1.“推迟实现”的指导思想使用户在工程后期才看到开发成果,这增加了开发风险,且越往工程后期发现错误后改正的代价越大,甚至需要推翻重来,举个栗子:做好一辆汽车后才忽然想起没安倒车灯,这得重新设计电路,把底盘都卸了重装啊!Tcl !
2.不能混好的适应用户需求的变化,比如:编完代码,写完测试,用户告诉你这个地方要改一下,懂吧...
3.增加工作量,秃头的程序员宝宝不仅要敲代码,还得写文档T_T
(3)使用范围:
产品定义明确且稳定,需求不会频繁变化
和用户合作愉快,完整且周期的理解了用户需求,保证软件的正确性
因负责各个子模块的成员在不同机构或者在不同地理位置等因素,交流不方便的团队
原型模型 尽快得到一个实际系统的小样,然后让用户评价,之后反复修改原型,直到用户满意为止
(1)优点:
可以尽快看到模型小样
借助小样明确需求,方便开发人员与用户交流
尽快占领市场
(2)缺点:
用户开始看到的原型版本功能不全,如果一开始用户的需求就混明确,这不是浪费时光嘛!
(3)适用:
开始没太想好软件功能,或者需求总在变化的软件
开发周期很长的项目
增量模型是瀑布模型的进阶,分为增量构造模型和演化提交模型
(一)增量构造模型
(二)演化提交模型
(1)优点:
将具体的实现分成不同的模块,各个模块可以并行,缩短开发时间
有利于软件的扩展性
用户可以尽早看到部分软件功能,有利于明确需求,改正错误
分批次交付,先完成主要功能,然后添加次要功能,有利于尽早占领市场
降低开发风险,一般某个模块开发失败或者延期交付不会影响其他模块的开发
(2)缺点
实际上,有些模块在使用时必须要用到其他模块,必须事先定义好接口
增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
(3)适用:
需求不明确且开发周期长的项目
需求变化大,需要及时响应市场需求的项目
螺旋模型 结合了瀑布模型和快速原型模型的迭代开发模型(!!!强调了其他模型忽略的风险分析)
(1)优点:
螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。
同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。所以还兼具原型模型的优点
(2)缺点:
实际上有时候开发人员并不能真正判断是否会发生风险(例如系统正在走向灾难时,开发人员可能还认为一切正常),这就要求软件开发人员具有丰富的风险评估经验和这方面的专门知识。
增加成本(请人不花小钱钱吗?)。
(3)适用:
风险较大且开发难度大的项目
构件集成模型
整个系统模块化;复用构件库中的软件构件
(本来要附图片的,但是没找着)
(1)优点:
实现软件的重用,提高软件开发的效率,降低了开发成本和开发风险
(2)缺点:
可重用性与软件高效性不可兼得
过分依赖构件库会导致软件质量下降
(3)适用范围:
已有软件的扩展
需要开发的软件大部分功能可以通过构件库实现
其实适用范围蛮广的@(--_--)@
统一过程模型(RUP/UP,Rational Unified Process)
风险驱动的、基于用例的、以架构为中心的迭代的可配置的开发流程
横轴:一次迭代过程中的四个阶段:初始、细化、构建、移交
纵轴:五个核心流:需求、分析、设计、实现、测试
我的理解:根据软件的特点,每隔一段时间都要进行一次大的迭代,即整个横轴(全过程四个阶段:初始、细化、构建、移交)的一次迭代。在一次大的迭代过程中,五个核心流贯穿其中,即四个阶段都包含这五个核心流(只是不同核心流在不同阶段的参与程度不同)。而每个阶段也可以采用多次迭代的方法来完成和完善。
(1)优点:
统一模型是基于构件的开发模型,较好的实现代码重用
用例驱动的、可配置的,对需求变化有较好的适应力
每一次迭代得到的都是可交付的版本,用户可以较早看到开发成果,缩短了版本间的开发周期
迭代过程中加入了风险分析,可以减少软件开发风险,或者较早的发现错误
(2)缺点:
不支持多项目开发,这一定程度上降低了软件的重用
(3)适用于:
准备长时间开发和维护的软件
其实蛮多都可以用滴
OVER!
参考资料及说明
图片来源:抱歉第一次写博客,没存原图片的网址,只有两个图片的原网址可以找到_(:_」∠)_(如果图片所有者能看到我的博客,请您在我的博客上留言,我可以撤掉图片)
一图二图来自百度文库的一份PPT,三图好像来自百度百科,表情包来自本机,最后一张图来自photo.blog.sina.com.cn
参考书籍
《软件过程方法与实践》第三版,机械工业出版社
参考网址:
抱歉抱歉,分两天写的,第一天的网址又没存,只剩今天的一个了https://blog.csdn.net/shadowyelling/article/details/7412336
第一次写博客,诸多不足之处,请指教。