1、软件开发流程
包括:项目开发目的分析与确定、需求分析、设计、编程、软件测试、软件交付、验收和维护。
2、软件开发模型
2.1 定义
软件开发模型(Software Development Model)是软件开发全过程的框架,规定了软件开发过程中各项活动的基本步骤、任务和流程,决定了项目的组织、管理和执行方式。
软件开发模型能清晰、直观地表达软件开发全过程,是对软件开发过程的建模,即用一定的流程将各个环节连接起来,并可用规范的方式操作全过程,好比工厂的生产线。
2.2 分类
- 边做边改模型(Build-and-Fix Model):没有章法
- 瀑布模型(Waterfall Model):比较经典的模型
- 快速原型模型(Rapid Prototype Model):1、2的整合优化
- 螺旋模型(Spiral Model)
- 演化模型(迭代模型/渐增模型/增量模型,Incremental Model):项目拆解,逐步交付
- 喷泉模型(fountain model)
- 混合模型(hybrid model)
- 敏捷开发模型(Agile Development):5的极速版
- 智能模型(四代技术(4GL))
- RUP模型(Rational Unified Process)
- IPD模型(Integrated Product Development)
(以下介绍上方划线的几种常见模型)
1、边做边改模型(Build-and-Fix Model)
开发拿到项目需求,立刻直接代码实现,调试后生成软件版本提供给用户。用户使用后出现程序问题或者新需求,开发人员修改、重新发版。循环往复,直至项目结束。
优点:快。
缺点:
1、无需求环节,很可能有开发风险。
2、无规划、无设计、无文档,逻辑不严谨,可读性差。软件结构会随不断修改而混乱,最终无法修改、维护、扩展。
适用场景:
作坊式,常见于小公司、小项目,如小程序开发、个人开发或承接的项目。
2、瀑布模型(Waterfall Model)
传统的计算机软件开发方法,形状像瀑布。
瀑布模型将软件生命周期划分为六个阶段:计划制定、需求分析、软件设计、程序编写、软件测试和运行维护。这些阶段自上而下、相互衔接,像瀑布流水一样向前推进。
模型要求严格按照线性方式进行软件开发的各个活动,每一项活动的工作内容都必须依据上一项活动的成果来实施完成。完成当前活动的工作内容后,需要对结果进行验证,若验证通过,则将工作结果输入到下一项活动中,继续进行下一项活动的工作内容。如未通过验证,则要重新修改。
优点:
软件开发过程严格遵循预先计划,需求明确,工作量可控。
缺点:
1、不灵活:阶段划分完全固定,用户见成果需等到过程末期。
2、工作量大:强调文档,每个阶段会产生大量文档;每个阶段都要仔细验证,极大增加工作量。
3、过于理想化,实际操作风险高:线性流程,早期问题可能等到后期测试阶段才被发现,问题修复成本随着阶段向后发展呈指数升高,可能导致严重后果。
适用场景:
一直使用到八十年代。
3、快速原型模型(Rapid Prototype Model)
快速原型开发模式把"边做边改模式"和"瀑布式开发模式"的一些特点整合在了一起:加入模拟成品的“原型”设计环节(所见即所得),(产品经理)边做边改原型;确定原型后,瀑布流顺序开发产品。
第一步:建造一个快速原型,实现客户或未来用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型,使其满足客户的要求,使开发人员确定客户的真正需求。(“边做边改”需求原型,不着急开发)
第二步:在第一步的基础上开发客户满意的软件产品。(确定需求,进行开发)
快速原型的关键是尽快建立出软件模型(原型),而原型系统的内部架构并不是最重要的。一旦客户需求明确,即确定产品原型,产品经理据此书写规格说明文档(需求文档),根据这份文档开发出的软件可以满足用户的真实需求。
从上图中可以看出,快速原型模型的各阶段之间是不带反馈环的,这正是这种过程模型的主要优点:软件产品的开发基本上做到线性顺序(同瀑布模型)进行的。
快速原型所需语言:
UNIX Shell和超文本都是广泛使用的快速原型语言,最近的趋势是,广泛地使用第四代语言(4GL)构建快速原型。
优点:
1、快:生命周期较短。
2、客户体验好:原型所见即所得,客户项目初期即可看到成品效果,及时确认需求。
3、需求真实、明确:降低了瀑布模型中可能的风险。
4、生成的原型是最终产品的一部分,如:原型界面即产品界面。
缺点:
这种模式可能会带来系统设计上的不足和难以维护等问题。(我没太懂)
5、演化模型(迭代模型/渐增模型/增量模型,Incremental Model)
(有理论将演化和增量分开,演化:事先不能定义完整需求。增量:已有完整需求。此处不做区分。)
将完整产品拆分,每次交付满足用户一个需求子集的可运行产品,逐步交付产品。
在使用迭代模型时,第一个迭代往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个迭代的开发计划,包括对核心产品的修改和一些新功能的发布。
这个过程在每个迭代发布后不断重复,直到产生最终的完善产品。
优点:
1、快速高效:能够弥补瀑布模型的缺点,具有更高的生产力和成功率。软件项目可以在确定客户需求之前启动,每次迭代中完成一部分。随后,根据客户反馈的需求再进一步细化,开始新一轮的迭代过程。
2、客户体验好:客户可以不断地看到所开发的软件。
3、灵活:可以较好地适应变化。
缺点:
1、对项目有可扩展性要求:需要软件具备开放式的体系结构。
2、有失控风险:容易退化为边做边改模型,使软件过程的控制失去整体性。
8、敏捷开发模型(Agile Development)
以人为核心、快速迭代、循序渐进的开发模式。
强调以人为本,专注于“尽早地、持续性地”交付对客户有价值的软件。
用于开发和维持复杂产品,把一个大项目分为多个相互联系但也可独立运行的小项目,分别完成,在此过程中软件一直处于可使用状态。
敏捷开发团队三个主要工作方法:
① 将所有个体作为一个整体进行工作
② 工作以短迭代周期的方式进行
③ 每一次迭代完成都交付结果,并关注业务优先级。
敏捷开发模式的四个基本核心思想:
1. 重视面对面的沟通,人与人实际交流胜过任何网络工具
2. 将时间精力花费在可运行的程序上, 能执行的产品胜过编译全面的文档,它强调了原型和demonstration等的重要性。
3. 鼓励团队合作,提升工作激情,敏捷开发可以把需求、开发、测试等团队成员整合为一个整体。
4. 团队适应能力强,适应环境变化,拒绝按部就班。
优点:
1、用户很快可以看到一个基线架构版的产品。
2、敏捷注重市场快速反应能力,也即具体应对能力,客户前期满意度高。
缺点:
1、敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动太大,维护难度增加,特别项目存在新手比较多时,老员工比较累。
2、需要项目中存在经验较强的人,否则大项目中容易遇到瓶颈问题。
(对于敏捷开发具体的细分模型,可参考:《软件开发(过程)模型—5种敏捷开发模型(Agile Development)》)
参考文章:
1、《软件开发最热门的5种模式》
2、《软件开发常见模型汇总》
3、《软件开发模型》
4、《软件工程--快速原型模型详解》