重拾软件工程—(2)软件过程

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u012495579/article/details/78456620

在说软件过程之前首先要知道软件的生命周期,我们已经知道了软件不仅仅是代码,还包括很多其他步骤,比如设计、维护等等。所以软件的生命周期便是指软件从设计到投入使用再到被淘汰的整个过程。

而这个过程往往是漫长的,所以在这漫长的过程中要保证软件正常的运行,迭代,这就需要一定的整体框架和流程来保证(不是指程序框架哈),这就被称作软件过程。

软件过程提高了整个软件工程活动的稳定性、组织性和可控性。

任何完整地软件工程活动都有以下几个基本的活动步骤,这也是软件过程的通用框架:
1、沟通:项目启动、需求获取
2、策划:项目估算、资源需求、进度计划
3、建模:创建模型、进行分析和设计
4、构建:编码和测试
5、部署:软件交付、支持和反馈

介绍了通用过程框架,接下来介绍几个常用的软件过程模型

瀑布模型

最常用也是最基础的软件过程模型,因为简单所以适用的场景也比较局限,常用于甲方可靠(或自己人),需求确定的情况下。因为这样可以直接按照线性工作方式一步完成。
基本步骤:沟通->策划->建模(分析)->建模(设计)->构建(编码)->构建(测试)->运行与维护

优点
  • 规范、易操作、简单、易用;
  • 为项目提供了按阶段划分的检查点,项目管理比较规范;
缺点
  • 需求难确定,变更难管理;
  • 任务线性依赖,等待时间长;
  • 成功晚,增加开发风险;
  • 文档多,增加工作量;
  • 错误发现晚,后果严重;

增量模型

顾名思义,该模型将待开发的软件系统模块化,每个模块被称为一个增量,从而可以分批次地设计、开发增量。本质就是以迭代的方式运用瀑布模型。
增量模型

应用举例

开发一个类似于WORD的文字处理软件
增量1:提供基本的文档管理、编辑和文档生产功能;
增量2:提供高级的文档编辑功能;
增量3:实现拼写和语法检查功能;
增量4:完成高级的文档排版功能;

优点
  • 对用户需求响应快速:用户看到早期版本提出的建议可在后续增量中增加;
  • 人员分配灵活:开发人员有限,可采用此模型;
  • 可规避技术风险:不确定的功能可放在后续开发;
问题
  • 每个附件增量并入现有软件时,不能破坏原来已构造好的东西;
  • 加入新增量是应简单、方便——该类软件的体系结构应当是开放的;
  • 仍然无法处理需求发生变更的情况;
  • 管理人员应有足够的技术能力来协调好各增量之间的关系;

演化过程模型——原型开发

现实开发过程中,用户需求往往是不确定的,或者用户往往都不清楚自己想要的软件有什么功能,长啥样。这时为了让用户能够确实地有所体验,就需要快速地开发一个所谓的“样品”展示给用户,这也就演变出了原型模型。
目前原型模型在移动端的开发中很常用,因为移动端注重用户交互,复杂逻辑相对较少。因此也演变出了一系列强大的原型设计工具,比如axure、Demoo、墨刀等,都能在极短的时间里面设计出可交互的产品原型。

优点
  • 快速开发出可以演示的系统,方便与客户沟通;
  • 采用迭代技术可以使开发者逐步理清客户的需求;
问题
  • 只关系表面,不关心内在;
  • 用户可能混淆原型系统和最终系统,可能因为技术原因,最终系统跟展示的不能完全相同;

演化过程模型——螺旋模型

此模型重点在风险分析阶段,适用于大型、复杂的系统,结合了原型的迭代性质和瀑布模型的系统性和可控性。

特点

模型沿着螺线旋转,四个象限表达四个方面的活动:
* 制定计划:确定目标,选择实施方案;
* 风险分析:分析所选方案,考虑如何识别和排除风险;
* 实施工程:实施软件开发;
* 客户评估:评价开发工作,提供修改建议;

出发点

及时识别和分析风险,并采取适当措施以消除或减少风险带来的灾害;

举例
  • 第1圈:开发出产品的规格说明;
  • 第2圈:开发产品的原型系统;
  • 第3-n圈:不断的迭代,开发不同的软件版本;
  • 根据每圈交付后用户的反馈来调整预算、进度、迭代的次数。
优点
  • 是一种风险驱动型的过程模型;
  • 采用循环方式逐步加深系统定义和实现的深度;
  • 始终保持可操作性,直到软件结束;
问题
  • 合同制项目(外部项目)的客户较难接受该模型依赖于风险评估专家,如未准确识别或管理较大风险,肯定会出问题。
  • 所以适用于大规模软件项目,特别是内部项目。

喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。

优点

可以提供软件项目开发效率,节省开发时间,适用于面向对象的软件开发过程。

缺点
  • 各个开发阶段是重叠的,因此开发过程中需要大量的开发人员,不利于项目的管理;
  • 模型要求严格的管理文档,使得审核的难度加大;

能力成熟度模型(CMM)

是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能更好地实现商业目标。
迄今为止,学术界和工业界公认的有关软件工程的最好的软件过程

猜你喜欢

转载自blog.csdn.net/u012495579/article/details/78456620