简介
软件过程是在软件开发时遵循的一系列步骤,软件过程的基础活动为沟通、策划、建模、构建和部署。
过程模型是软件过程的具体实现。最早提出过程模型是为了改变软件开发混乱的状况,使软件开发变得更有序。
瀑布模型
是一个系统的、顺序的软件开发方法,是最早的过程模型,强调需求完整,执行有序。
从规划出产品的完整需求开始,按阶段逐步进行。每个阶段都会有评审,评审通过后生成说明文档,作为下一阶段的指导。如果发现某一阶段有问题则逐步向上一阶段反馈,然后重新评审。
适合需求明确、稳定的产品。
不适合需求不明确、需求频繁变化的产品。需求不明确,则无法进行设计阶段。需求频繁变化,需要逐步回溯、评审和更新文档一系列操作,耗费大量的人力和时间。
不适合客户要快速得到可用产品的场景。客户要等所有阶段完成后,才会得到可用的软件。
增量模型
增量模型是一个功能逐渐增加的开发方法。客户有完整的需求,但是要求时间紧迫,所以将功能拆分多次去交付。每个增量是每次开发功能的数量,并且使用瀑布模型。第一个增量往往是核心功能,满足基本需要,客户评估或使用后,然后制定下一个增量计划。
适合客户要快速得到可用产品的场景。
迭代模型
迭代模型是一个需求越来越明确的开发方法。客户初始没有明确的需求,但是有一个笼统的想法,所以快速开发出一个可用的版本,交付给客户,然后通过客户的反馈来细化,然后不断的重复这个过程,以此来实现最终想要的产品。每一次的迭代都会使用瀑布模型。
适合需求不明确或频繁变化的产品。
原型模型
原型模型是一个以原型为基准的开发方法。原型是模拟产品的原始模型,可以用辅助软件画出来。在获得了用户的一组需求后,立即将其原型化,然后让客户试用,这样可以检验需求,同时也可以启发客户,以此来获得完整的需求。
适合小型的、完整需求难以确定的产品。大型复杂的产品,构造原型的时间长并且难度大。
螺旋模型
图片源自 wikipedia.org螺旋模型结合了原型模型、迭代模型和瀑布模型,并增加了风险分析。从螺旋的中心开始,沿着螺旋进行迭代,每一次迭代都要进行风险分析。螺旋的第一圈确认需求,第二圈确认设计,第三圈交付版本,然后继续这个周期。
适合大型复杂的产品。
统一过程 RUP
RUP驼峰图 图片源自 wikipedia.org统一过程是一个以用例为驱动,以架构为核心,迭代并且增量的过程。强调体系结构和从用户角度描述系统。为了更好的把控时间,把开发过程分为四个阶段(横轴)初始、细化、构建、交付,每个阶段按顺序执行(纵轴)商业建模、需求、分析和设计、实现、测试、部署,执行。每个阶段都有一个里程碑,为要实现的目标。随着时间按阶段迭代,到最终交付。
适合大型复杂的产品。
敏捷开发
敏捷是一种快速响应变化的能力。适合需求不确定或频繁变化的产品。
敏捷开发是基于敏捷宣言的4个价值观和12条原则的一系列方法。
4个价值观:
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
12条原则:
1、我们最重要的目标,是通过及早和持续不断地交付有价值的软件使客户满意。
2、欢迎不断变化的需求,即使是在项目开发的后期。要善于利用需求变更,帮助客户获得竞争优势。
3、不断交付可用的软件,周期通常是几周,越短越好。
4、项目过程中,业务人员与开发人员必须在一起工作。
5、激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
6、面对面交谈是最好的沟通方式。
7、可工作的软件是进度的首要度量标准。
8、敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
9、不断地追求技术卓越和良好设计,敏捷能力由此增强。
10、简单性至关重要,尽最大可能减少不必要的工作。
11、最好的架构、需求和设计出自自组织团队。
12、团队要定期反思如何能提高成效,并依此调整。
如下列举了一些敏捷开发的方法:
极限编程 XP
图片源自 软件工程-实践者的研究方法 第8版所谓极限,是在传统瀑布模型中看来是“极端的”实践,在敏捷开发中,将会更加好的响应用户需求。如测试驱动开发、结对编程、现场客户。
1、策划
策划软件发布计划和周期开发计划。
短交付周期,每个迭代1-3周时间。
系统隐喻,用形象的比喻来描述系统或功能模块是怎样工作的。
2、设计
用最简单的办法实现每个小需求。
3、编码
测试驱动开发,先编写测试代码,然后只编写使测试通过的功能代码。
结对编程,两个人完成编码,一个编码,一个评审。
重构,只要有可能,程序员都不应该心疼以前写的程序,而要毫不留情地改进程序。
持续集成,要早集成,常集成。帮助项目在早期发现项目风险和质量问题。
4、测试
现场客户,使用系统的人应该时刻在现场解决问题。
Scrum
图片源自 软件工程-实践者的研究方法 第8版1、产品待定项,团队负责人领导团队成员细分任务,估计工作量,单位到天。
2、冲刺(Sprint)待定项,将总的任务划分为几个相连的Sprint,并决定当前的Sprint。将当前的任务细分到小时,然后团队成员认领任务。
3、冲刺,在此期间只有负责人与外界沟通,团队成员只关注自己的任务。每日进行例会,汇报任务情况及遇到的难题。
4、发布增量版本,进行下一个Sprint。
网友评论