互联网软件常见开发方法
常见的软件开发方法
结构化法
- C语言的开发方式就可以称为结构化开发方法,特点在于它是自顶向下、逐步分解,强调系统开发过程的整体性和全局性。
- 系统开发过程工程化,文档资料标准化
原型法
也就是在需求分析阶段产出一个原因,就好像一个 demo
,让用户看看是否符合预期,防止成本浪费
- 适用于需求不明确的开发
- 包括抛弃型原型和进化型原型
面向对象方法
- 更好的复用性 将真实世界的物体抽象到软件层
- 关键在于建立一个全面、合理、统一的模型
- 分析、设计、实现三个阶段,界限不明确 (有可能在分析阶段就把设计的工作作了,界限不明)
面向服务的方法
- SO方法有三个主要的抽象级别:操作、服务、业务流程 (操作 < 服务 < 业务流程)
- SOAD分为三个层级:基础设计层(底层服务构件)、应用结构层(服务之间的接口和服务级协定)和业务组织层(业务流程建模和服务流程编排)
- 服务建模:分为服务发现、服务规约和服务实现三个阶段
常见软件开发模型
- 瀑布模型
- 螺旋模型
- 敏捷开发方法
- 基于架构的开发方法
- 原型模型
- 统一过程/统一开发方法
- V模型
- 喷泉模型
- 增量模型
- 演化模型
- 迭代模型/迭代开发方法
- 快速应用开发
- 模型驱动的开发方法
- 基于构建的开发方法/构建组装模型
瀑布模型
瀑布模型是基础的开发模型,主要分为3个阶段。
定义阶段
- 软件计划
- 需求分析
开发阶段
- 软件设计
- 程序编码
- 软件测试
维护阶段
- 运行维护
这种开发方法的优缺点很明显,它适用于那些需求明确的项目,对于不明确的项目很难适应,会造成过多的成本浪费,实际现在很多企业在基于瀑布模型的定义阶段增加原型来解决需求变更问题
他的主要目标是一次就把一个满足所有需求的产品提交给用户
V模型
他是一种测试贯穿始终的模型,测试什么的尽早做、提前做,是以测试为驱动的开发模型。开发和测试同样重要,边写测试用例一边写代码和直接写代码区别太大了,这点深有体会,在编写测试用例的情况下,你的代码需要保持可测试,便于测试的状态,会进行合适的拆解,直接编码如果经验不够丰富的话很容易代码混乱。
中心思想在于:研发人员和测试人员需要同时工作,在软件做需求分析的同时就会有测试用例的跟踪,这样可以尽快找出程序错误和需求偏离,从而更高效的提高程序质量,最大可能的减少成本,同时满足用户的实际软件需求。
原型模型
在瀑布模型的基础上、增加原型,避免最终开发出来的产品与客户预期不一致,语言沟通不如给他们一个看得见的东西,经过原型的一番操作,客户基本就知道你们开发的东西到底能不能对上我的需求了
增量模型与螺旋模型
- 螺旋模型
螺旋模型图:
这种适合大型的项目开发,将大项目拆解成多个小项目,并使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的 快速原型模型
螺旋模型的主要优势在于: 它是风险驱动的,但是,这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面专门的知识,否则将出现真正的风险;当项目实际正在走向灾难时,开发人员可能还认为一切正常。
- 增量模型
增量模型融合了瀑布模型
的基本成分(重复应用)和原型实现
的迭代特征,把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品
他与螺旋模型
的差异在于:增量模型的每个增量分布都是一个可操作的产品
敏捷开发方法
敏捷核心关键词:快速交付,持续重构
演进的需求和方案
小步快跑
。它是一种迭代和增量的软件交付方式,其目标是在最短实践交付最大价值的软件。
基本原则
- 短平快的会议
- 小版本发布
- 较少的文档
- 自动化测试
- 测试驱动开发
- 持续集成
- 重构
Scrum
这个是比较常见的敏捷开发方法,也被各种平台所支持,应用广泛。主要就行将开发内容就行任务分解(scrum里面称任务为 冲刺),然后用短的时间完成这个冲刺,再进行下一个冲刺,如此循环往复完成一个项目
构建组装模型
核心在于:构建库的建立
如果项目中模块化程度比较高,或者已有稳定的构建库,我们可以采用这种开发方法。他的特点:快、成本低、可靠性高。
但实际上在没有构建库的情况下,他的优点都会往另一个方向走,开发效率低,成本高等,而现在开源社区的发展帮助我们也能体验到基于构建的开发方法,也就是我们常说的面向 github
编程
统一过程 UP也称RUP
中心思想:用例驱动、以架构为中心、迭代和增量
分为4个阶段:初始 -> 细化 -> 构建 -> 交付
初始
- 确定项目范围和边界
- 识别系统的关键用例
- 展示系统的候选架构
- 估计项目费用和时间
- 评估项目风险
细化
- 分析系统问题领域
- 建立软件架构基础
- 淘汰最高风险元素
构建
- 使用已有构件
- 开发剩余构件
- 构件组装与测试
交付
- 进行β测试
- 制作发布版本
- 用户文档定稿
- 确认新系统
- 培训、调整产品