软件过程结构
概念
什么是软件过程
1.在开发产品或构建系统时,遵循一系列可预测的步骤,它有助于及时交付高质量的产品,软件开发中所遵循的步骤为“软件工程”
2.软件过程定义为一个为创建高质量软件所需要完成的活动、动作和任务的框架
软件工程和软件过程同义吗
是,也不是。
软件过程定义了软件工程化中采用的方法,但软件工程还包含该过程中应用的技术(技术方法和自动化工具)。另外软件工程是由有创造力、有知识的人完成的,他们会有所取舍。
过程流和类型
过程流:描述在执行顺序和执行时间上如何组织框架中的活动、动作和任务
过程流类型:线性过程流、迭代过程流、演化过程流、并行过程流。
过程模型
过程模型:为软件工程工作提供了特定的路线图,该路线图规定了所有活动的流程、动作、任务、迭代的程度、工作产品及要完成工作应如何组织。
提出过程模式是为了改变软件开发的混乱状况,使软件开发更加有序
常见的过程模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型等。
1.瀑布模型
这个特点有两重含义:
- 必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
- 前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
瀑布模型每个阶段都应坚持两个重要做法:
每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。完整、准确的合格文档是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
每个阶段结束前都要对所完成的文档进行评审,以便迟早发现问题,改正错误。事实上越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量,降低软件成本的重要措施。
可以说瀑布模型是由文档驱动的。这个事实也是它的一个缺点,在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。瀑布模型历史悠久、广为人知的,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发出的产品可能并不是用户真正需要的。
2.快速原型模型
快速原型搭建的是一个具有初级功能的项目,这个项目与客户要求具有一定的功能,但只是其子集,或者说完成了其中的一部分功能,并没有全部实现。它在搭建好之后,会请顾客来进行试用,对于试用完之后的产品,顾客一般会提出改进意见,或者对于之前自己提出的需求有所更改,根据最新的指导意见,开发人员再进行开发。快速原型对比于瀑布模型,所增加的内容就是变化需求的处理。
(让我想到了刚出来的骑马与砍杀2,玩家不断的提交Bug,开发人员每天都在修Bug)
优点:快速原型模型在开发每一阶段,开发人员根据用户提出的需求能够快速地更改项目程序,不需要大面积返工。开发人员通过建立模型,知道了什么该做,什么不该做。减少了前期所犯的错误。因此不需要反馈环。
缺点:原型系统主要是要快速的建立起模型,以此确定用户需求,当用户需求确定之后,就直接将原型模型抛弃。
注意:快速原型模型是不带有反馈环的,这是因为其自身的特点所决定的,自身特点在上段中已介绍清楚。
3.增量模型
增量模型不同于之前两个模型是一次性交付完成,是一次次增加产量。增量模型对于不同的构件分别进行搭建,增量模型要求软件系统是开放的。第一次增量模型构建的时候,需要实现软件的核心基本功能,之后的慢慢的增加功能,直至完成整个项目的开发。只有软件体系是开放的,后面的软件模块才能够慢慢的增加。
- 优点:
- 逐渐增加项目的模块,让客户有一个学习与使用软件的过程。
- 能在较短的时间内向用户提交可完成部分工作的产品。
- 缺点:软件系统必须是开放的。
4.螺旋模型
螺旋模型的基本思想就是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作每个阶段之前都增加了风险分析过程的快速原型模型。
螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。事实上项目越大,风险也越大,因此进行风险分析的必要性也越大。此外只有内部开发的项目,才能在风险过大时方便中止项目。
螺旋模型的主要优势在于,它是风险驱动,但是,这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。
风险驱动的螺旋模型适用于内部开发的大型软件项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。
喷泉模型
喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,以面向对象的软件开发方法为基础,它适合面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。迭代性指系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统,即求精的一个过程。无间隙是指在分析、设计和实现等开发活动之间不存在明显的边界。
优点:无缝,可同步开发,提高开发效率,节省开发时间
缺点:可能随时加各种信息,需求和资料(不断迭代),文档管理比较难.