迭代开发和增量开发

article/2025/10/4 12:18:58

(转自:http://blog.csdn.net/l12345678/article/details/5642851)

“迭代”和“增量”是敏捷软件开发中的两个重要概念。弄清楚“迭代”和“增量”以及其依据,我们就可以在实际的操作中有章法可循。

为什么要迭代?

我们为什么要进行迭代开发呢?您一定遇到过这样情况: 
“我们知道想要什么。但你能估算出构建它需要多长时间吗?” 
“在启动开发之前,我们必须将这些需求明确下来。” 
“客户不知道他们想要什么” 
“客户时常改变想法”

“我 虽然不知道客户想要什么,但我却知道怎么得到它。”怎么得到客户想要的东西呢?——迭代!我们不指望我们所构建的软件正是客户(或用户)所想要的,但我们 可以先构建后修改,通过多次迭代找到真正适合客户(用户)的软件。当然,我们必须保证我们初次确定的方案是正确的、行得通的,那么后继的迭代就是反复求精 的过程,是不断地对备选方案改进并选择更优方案的过程,是以更优方案取代之前勉强行得通的方案的过程。

迭代的依据

迭代开发的过程就是对软件功能不断细化的过程,所以,迭代的依据就是“功能细化原则”:必要性–>灵活性–>安全性–>舒适性/趣味性。

必要性:能支持用户完成任务的最少功能特性;

灵活性:支持用户使用多种方式完成任务或者支持用户做出额外选择的功能特性;

安全性:为了避免用户犯错,确保用户在软件使用过程中所做操作安全的功能特性;

舒适性/趣味性:就是可以使用户更简单、更快捷、更有趣地完成任务的功能特性。

每个迭代可能包含多个用户故事,但是在同一个迭代中,我们对每个用户故事开发的完善程度是不一样的。如下图所示:

随 着软件开发工作的深入进行,我们会在每个用户故事中发现更多的功能可能是舒适性/趣味性方面的功能,也可能是必要的功能。或者,在软件开发的过程中,竞争 对手的软件产品有了新的功能、市场销售情况有了新的反馈、用户有新的需求等,我们需要不断地丰富、细化我们的软件所支持的用户故事,增加/改善新的功能。 经过多次迭代,我们就可以完成所有的功能,从多个层次(必要性、灵活性、安全性、舒适性/趣味性)满足用户需求、支持用户故事。

在迭代过程中,功能的不确定性逐渐减小,我们对功能的描述越来越明确。

为什么要增量?

不论是哪种类型的软件,其业务目标或用户(用户目标)一旦确定下来,我们都会为此准备好“理想”的解决方案和实现手段。但是,项目工期是有限的,资金预算 也是有数的,人手也不可能无限增加。为什么项目工期总是很短?资金紧张?人手不够?因为我们“理想”的解决方案是需要很大的代价的!并且,“理想”的解决 方案也有很大的风险:在这么漫长的“完美”解决方案实现过程中,市场情况、用户需要等外部因素都会发生改变;不及时发布、不从市场/用户处得到及时的反 馈,我们“理想”的解放方案是否真的完美也就无法得到验证。如果说迭代开发是为了应对软件产品内部的不确定因素的话,那么,增量地发布软件产品,为的就是 应对软件产品之外的其他不确定因素。

增量的依据

既然增量地发布软件产品是为了应对软件产品之外的不确定因素,那么,我们确定增量发布版本的过程,也就是项目风险控制的过程。在确定版本计划的时候,我们 采用什么样的尺度呢?考虑的太粗,我们的版本规划就不会太准确,在项目实施的过程中,就会存在较大的风险;“那我们就多考虑点”,要想考虑的很周到,我们 必定会在规划上花太多的时间。这其中的“度”在哪里呢?我们首先并且只会想到的就是对功能的优先级进行排序,然后看情况,到项目工期截止的时候,我们的功 能完成多少我们就交付多少。Yes,我们大多数的软件项目就是这么死的,都是在产品发布日的时候给它开追悼会!

按 重要程度办事,有错吗?让我们打个比方吧,我们要造一辆轿车。先对轿车的功能物件排序:发动机、车底盘、传动轴、车轮子、刹车、方向盘……。车迷朋友们还 会列出更长、更详细的按优先级排序的轿车功能清单。有半年的工期,我们头一个月造了个发动机,不错很好很强大的发动机,第二个月,我们不但按计划把车底盘 搞定了,还有1周的时间,我们可以提前把传动轴也弄弄……(黑底白字的电视屏幕上淡入又淡出几个字“4个月后……”)还有1个月就要交付我们的轿车了,我 们的车轮子怎么上不好啊?方向盘也不转,对了,还有挡风玻璃也没弄,车门还没把手,转向灯能亮,但是它们前后左右4个一起亮……马上,半年的交付工期到 了。我们“预想”的完美轿车出厂了:绝美的流线型、强劲的引擎动力、4轮驱动、XYZ安全系统,可是、可是、、、昨天说安装的挡风玻璃怎么没安啊,好办: 在领导验收之前还来得及蒙一块塑料布!想必,这么“拉风”的轿车,定会被老板拍死、被客户拍死。

现 在,有点明白了吧,来感觉了?对,我们可以按照重要程度来做事情,但是,在全部必要的功能全部实现之前,你我所实现的再重要的功能都无人买单,无法体现其 价值。这也是在做软件需求工作时,普遍存在的问题:功能考虑的很多、优先级排的挺有水平、对每个功能的描述也很详尽,但是,各个功能各自为战、不成体系, 甚至还缺少许多必要的功能,所以,我们软件产品的用户就因此疯掉了,由此也引发了众多无聊的忧国忧民的砖家们来“反思”这样的话题:“科技创新是否真正改 善了人类的生活”。(善哉,善哉,我又不小心提到“砖家”这么不吉利的人物了)

规划 版本时,在第一个版本中,我们必须实现所有的“必要性”功能,否则,我们的软件是无法体现出价值的。在之后的每个版本中,我们都要参考“功能细化原则”, 使得我们的软件产品的所有功能都达到相同的用户体验水平。(关于用户体验的“境界”,我们会在UCD思想中作详细的介绍)如果每个版本中的各功能的用户体 验“境界”不一致,很容易出现“用塑料布当挡风玻璃的豪华奔驰轿车”。我们可以用如下图所示的“版本地图”的形式来展示软件产品增量发布的依据——版本计 划。

当然,我们也会在完成前一个软件版本后,发现新的市场/用户需求,新增用户故事。增量版本发布的过程,如下图所示:

小结:迭代vs.增量

要想比较彻底地理解“迭代”和“增量”,我们最好将其对比一下。

迭代,就是在实现软件的每一功能时反复求精的过程,是提升软件质量的过程,是从模糊到清晰的过程;而增量,则是强调软件在发布不同的版本时,每次都多发布一点点,是软件功能数量渐增地发布的过程。二者的对比如下图所示:




http://chatgpt.dhexx.cn/article/BNOPVNy2.shtml

相关文章

转」最佳方案:迭代式开发

前言 Fred Brooks 在 25 年前就曾写到:“不要指望一次成功,无论如何你都要这样。” 敏捷开发,小步快跑,持续迭代,不断改进,产品升级。 在用例需要之前,不要添加数据成员 在代码之前编写测试 …

alert意为:警告、警报。

在JavaScript代码中&#xff0c;alert的作用是弹出一个浏览器对话框&#xff0c;"JS代码"为提示对话框的内容 <body><script type"text/JavaScript"> alert("提交成功&#xff01;我会尽快与你取得联系"); </script></body…

JS中alert和alter

JS中没有alter&#xff0c;只用alert&#xff0c;alert表示输出后面的语句

js 的 alert函数问题

alert是js人非常熟悉的东西&#xff0c;可以用来调试&#xff0c;写在这里是想警醒我自己&#xff0c;以后再遇到这样的问题的时候谨记这么修改。 看一个简单例子&#xff1a; <body><div οnmοuseοveralert((function(){return"abc";}()))>abc</…

Alert 提示框的使用

1. Alert 基本的使用 1.1 实现 /// 提示框 struct AlertBootcamp: View {State var showAlert: Bool falseState var alertType: MyAlerts? nilState var alertTitle: String ""State var alertMessage: String ""State var backgroundColor: Color …

java中的alert是什么意思_javascript 中如何使用alert?

alert不行的,要变通的话还是用showModalDialog试试吧. window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框&#xff0c;由于是对话框&#xff0c;因此它并没有一般用window.open()打开的窗口的所有属性。 window.showModelessDialog()方法用来创建一个显示HTML…

Grafana面板(panel):报警功能(alerts)

文章目录 alerts(报警设置)Create a Grafana managed alerting ruleAdd Grafana managed rule alert notifications增加一个notification channel alert报警邮件中的链接地址错误如何配置alert产生的报警如何删除&#xff1f;alert设置注意事项 alerts(报警设置) 注意&#xf…

alertmanger 入门

alertmanger 安装 tags: alertmanager 文章目录 alertmanger 安装1. 简介2. 安装2.1 二进制包部署 AlertManager2.1.1 下载2.1.2 创建 alertmanager 配置文件2.1.3 启动2.1.4 查看状态 2.2 docker 安装2.3 关联 Prometheus 与 Alertmanager 2. 配置文件说明3. 配置示例&#x…

alertmanager的使用

alertmanager的使用 一、Alertanager的安装1、下载2、安装3、启动4、alertmanager和prometheus的整合 二、告警分组1、告警规则2、alertmanager.yml配置3、分组相关的alertmanager的配置4、邮件发送结果 三、告警抑制1、告警规则2、alertmanager.yml 配置抑制规则3、邮件发送结…

JavaScript window.alert

文章目录 相关背景HTML中嵌入JS的第一种方式实现代码图是结果在HTML中插入JS的第二种方式实现代码实现结果HTML中引入JS的第三种方式实现代码实现结果 相关背景 HTML中嵌入JS的第一种方式 实现代码 <!DOCTYPE html> <html lang"en"> <head><me…

Window alert() 方法

一 定义和用法 alert()方法用于显示带有一条指定消息和一个确认按钮的警告框。 二 语法 alert(message) 三 代码 <html> <head> <title>警告对话框的应用</title> <meta http-equiv"Content-Type" content"text/html; charsetgb2312…

html中js alert函数,javascript的alert是什么

alert是javascript中的一个内置函数&#xff0c;用于显示带有一条指定消息和一个“确认”按钮的警告框&#xff1b;语法“alert("文本")”。警告框经常用于确保用户可以得到某些信息&#xff1b;当警告框出现后&#xff0c;用户需要点击确定按钮才能继续进行操作。 本…

AlertManager 简介与使用

简介 之前我们学习 Prometheus 的时候就了解到 Prometheus 包含一个报警模块&#xff0c;就是我们的 AlertManager&#xff0c;Alertmanager 主要用于接收 Prometheus 发送的告警信息&#xff0c;它支持丰富的告警通知渠道&#xff0c;而且很容易做到告警信息进行去重&#xff…

【云原生】Grafana Alerting 告警模块介绍与实战操作

文章目录 一、概述二、Grafana Alerting 模块介绍三、配置图表四、告警告警规则五、配置告警通道&#xff08;Contact points&#xff09;1&#xff09;Email1、配置smtp&#xff08;grafana.ini&#xff09;2、配置消息模板3、配置告警通道 2&#xff09;WebHook1、编写webhoo…

alertmanager 简介

alertmanager 简介 tags: alertmanager 文章目录 alertmanager 简介1. 前言2. 架构3. 特性3.1 group&#xff08;分组&#xff09;3.2 Inhibition&#xff08;抑制&#xff09;3.3 Silences&#xff08;静默&#xff09; 1. 前言 Prometheus的报警功能主要是利用Alertmanager…

JS中alert的三种使用方式

JS中的alert&#xff0c;作用是在浏览器中弹出一个警告框。 而使用alert&#xff0c;有三种方式&#xff0c;不同的方式&#xff0c;所呈现的效果也不相同。 第一种方式&#xff1a;直接写在script标签中 代码如下&#xff1a; <!DOCTYPE html> <html><head&…

alert弹窗

如何制作一份漂亮的alert弹出框&#xff1f; 在web项目中&#xff0c;往往会用到alert弹出框&#xff0c;但是原生的js弹出框样式丑陋无法满足你的需求&#xff0c;这时你该怎么办呢&#xff1f; 我的做法是&#xff1a;重写window.alert方法。它的好处是不依赖其他组件&…

Kibana:Alerting - 警报介绍

在我之前的很多文章中&#xff0c;我都介绍了 Alerting。你可以在 “Elastic&#xff1a;菜鸟上手指南” 中的 “通知及警报” 一节找到。在今天的文章中&#xff0c;我将使用最新的 7.13 版本来展示如何使用规则&#xff08;rules&#xff09; 来检测复制条件下的 alerts。 警…

k8s--基础--26.7--监控告警系统--Alertmanager--发送报警到qq邮箱,钉钉

k8s–基础–26.7–监控告警系统–Alertmanager–发送报警到qq邮箱&#xff0c;钉钉 1、创建alertmanager-cm.yaml文件 在master1节点操作 1.1、脚本 vi /root/k8s/monitor/alertmanager-cm.yaml内容 kind: ConfigMap apiVersion: v1 metadata:name: alertmanagernamespace:…

lazarus Textout中文字符串乱码

https://wenda.so.com/q/1560151974218812 lazarus Textout中文字符串乱码 5取nmlgb10级分类&#xff1a;编程开发被浏览146次2019.06.10 检举 我用Textout在窗口输出 你好系统却显示其它字体&#xff0c;求懂内行的帅哥美女指教一下&#xff0c;这是我的代码 TextOutA(hdcb,10…