什么是敏捷?

在敏捷开发在软件和互联网产品开发领域日渐普及的情况下,我们从敏捷开发认识敏捷,继而接触到周金根老师的敏捷人生,《managemeng 3.0》又将敏捷的概念带到管理层面,但到目前为止我们谈敏捷都基于一个特定背景,如开发、管理,所以如果脱离背景,敏捷究竟具有哪些特质?和塔勒布先生提出的Anti-fragile有何相同和不同之处?
被浏览
10391

4 个回答

Waterwalker
「敏捷销售」教练,公众号ID: agilesales2015

终于在提出问题一年后可以亲自谈谈对“敏捷”的理解。

一、从“敏捷开发”说起

“敏捷”概念的引入最先是从软件开发领域引入的。传统的软件开发采用的是瀑布式开发的流程,把整个开发过程分成了收集需求、定义、设计、编码、测试、发布等阶段,每个阶段设定明确的目标和标准,达成后再进入下一个阶段,整个过程沿着可预测性逐步增加的方向前进,可以避免资源的无效投入,并有效地保证开发质量。

但问题在于瀑布式开发这种预定义过程的方法,每个阶段之间都有强烈的依赖关系,前一个阶段被视为后一个阶段的输入,如果输入质量不高,便会严重影响后续阶段的输出质量。同时,如果前一个阶段未能达到标准,也会造成后续阶段的停滞,导致开发周期拉长。并且,项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。

所以敏捷开发就是在提出这样一个问题的背景下所诞生的。有数据显示有70%采用瀑布式开发方法的软件开发项目均已失败告终。原因便在于,市场的需求瞬息万变,很难实现产品需求的明确且完整地收集;同时,技术的发展也日新月异,对于所定义功能的可实现性也面临着多重不确定性的因素。所以当需求收集和产品定义工作无法得到很好地完成,瀑布式开发方法自然无法摆脱高失败率的命运。

所以从需求的明确性和工程实现的确定性两个纬度出发,当需求的不明确性和工程实现的不确定性均超出一定范围之后,呈现出复杂系统(Complex System)的特征,瀑布式开发这种结构化的开发方法便不再实用。而敏捷开发方法正是在这样的背景下诞生。

敏捷开发的一个核心思维模式的转换便是:从瀑布式开发所代表的“Fix Scope, Flex time”(固定范围,弹性时间)转向“Fix time, Flex Scope”——固定时间,弹性范围。 在市场变化和技术变化的背景之下,既然市场需求和产品定义所代表的“范围”无法实现固化,因而无法确定应该投入多少资源来完成,那不妨固定好已有资源的,以资源为约束,实现“范围”的最大化实现。因此从“计划驱动”转向为“价值驱动”。

而在敏捷开发的思维模式提出后,一方面诞生了“个体与交互胜过过程与工具”、“可以工作的软件胜过面面俱到的文档”、“客户协作胜过合同谈判”、“响应变化胜过遵循计划”这样的代表敏捷价值观的“敏捷宣言”,充分发挥“人”作为代码编写者在软件开发过程中的价值。

同时在敏捷宣言的指引之下也产生了多种多样的敏捷开发方法,如冲刺和迭代式的“Scrum”方法,更进一步通过具体的实施手段展现“敏捷宣言”所代表的敏捷价值观。

对比瀑布式开发所代表的预定义过程的工程方法,敏捷开发方法通过测试驱动/价值驱动的手段,更加贴近最终的应用环境,于是也具备了更好的适应性。同时在敏捷宣言指引下,更强调发挥代码编写者的价值,可以更好地挖掘出代码编写者的潜能。

二、什么是敏捷

从“敏捷开发”可以看出,敏捷不仅仅简单只是一个形容词,更代表了一种方法,那么究竟什么才是“敏捷”呢?

1. Complex System Context 以“复杂系统”为背景

敏捷并不是一个普世的方法,而是具有一定语境和背景的,如同敏捷开发的诞生,也是在市场瞬息万变和技术日新月异的背景之下而产生的。

“敏捷典型”是以“复杂系统”为背景。作为一种方法,最终都是被“人”所采纳并实施。而人对于世界的认知和理解始终朝着减少未知“Unknown”和不确定性“Uncertainty”两个方向前进,对于未知需要逐步理解(Understandable),而对于不确定性,通常是提前预测,通过反馈,来获得判断(Predictable)。因此可理解和可预测也成了人认知世界的两个纬度。

但无论科学技术如何进步,对世界的很多事物已经达到可理解、可预测的地步,但依然还存在非常多的不可理解或不可预测的事物。特别是每个人的认知能力也存在差异,相同的事物对某些具有足够认知能力的人来说是可理解、可预测的,但如果认知能力不足,便会出现既无法理解、也无法预测这样的“混乱系统”(Chaotic)。

而复杂系统(Complex)也是同样,当相对于人的认知而言,对可理解性和可预测性均提出一定高度的要求,便呈现出复杂系统的特征。如同敏捷开发所产生时的背景,市场瞬息万变,需求变得不可预测;技术日新月异,对某些需求的技术可实现性也变得越来越难以理解。但这种不可理解性和不可预测性并没有远远超出人的认知潜能的范围,没有到达彻底混乱的地步;同时,通过过程中不断地反馈和学习,也可以逐渐消除未知和不确定。因此,对于这样的复杂系统,运用敏捷方法,将可以更好地获得对系统的理解和预测。

2. Human-Driven 以人为核心驱动

敏捷的另一个特征是“以人为核心驱动”——Human Driven。

对于适用敏捷方法而言,其最终的目的是为了理解所处的复杂系统,激发复杂系统所具有的能量。更强调“系统”对于“人”的价值,而非单纯地承认其“复杂”的特征。

同时复杂系统又是一个相对的概念,是相对于人的认知能力而言。而对于复杂系统,其认知的过程依然会沿着“可理解”“可预测”两个方向发展,这其中“人”将扮演主要的角色,需要充分挖掘“人”的潜能。

无论对“目的”而言,还是“过程”而言,在运用“敏捷”方法时,“人”都是认知和运转“复杂系统”过程中的核心驱动力。

所以这也对运用“敏捷”方法的“人”提出要求,需要思维模式和价值观的支撑,才能真正理解并运用“敏捷”方法。在《管理3.0》一书中,作者Jurgen Appelo给出了一个具有六只眼睛的异形生物,并取名为“Martie”,代表了运用“敏捷”方法的人应该所具备的六种思维模式:

  • Energize People 有效激励
  • Empower Teams 赋能团队
  • Align Constraints 调和约束
  • Develop Competence 发展能力
  • Grow Structure 结构成长
  • Improve Everything 全面改善

3. Adaptive Empirical Process Control 具有适应能力的经验性过程控制

“敏捷”的第三个特征便是:“敏捷”实际上是一种经验性的过程控制方法。作为一种方法,通常都具有一定的目的性,而为了达成目的,势必要实施一定的过程控制,才能提升达成目标的几率。而在“复杂系统”的背景之下,“瀑布式开发”所代表的预定义过程控制(Predefined Process Control)已不再适合,而以人为核心驱动的经验性过程控制(Empirical Process Control)将具有更高的适应性和灵活性,同时也能充分发挥“人”的潜能和价值。

人类在进化过程以及认知、改造世界的过程中始终都面临着各种“未知”(Unknown)和“不确定”(Uncertainty),所以人类的历史天然就是一个“敏捷”的过程。

让我们借助一部经典动画片《疯狂原始人》中的人物和场景,来更好地表达“敏捷”这样一个经验性过程控制方法需要遵循哪些原则。

Rule1:适应性原则。Keep Relevant-时刻保持与背景“复杂系统”的关联,适应“复杂系统”的变化。

Rule2: 灵活性原则。Always be optional-拥有多重选项,根据环境的变化进行灵活选择。

Rule3: 利用系统的“原力”——Leverage the Gravity。人的力量毕竟微弱,需要充分挖掘“复杂系统”自有的力量并加以利用。

Rule4: 模式识别——Patterns Recognition。识别“复杂系统”中所呈现出的“模式”,基于“模式”,逐步理解“复杂系统”。

Rule5: “自下而上”原则(Bottom-up)。由于“复杂系统”的未知性和不确定性,在缺乏必要信息的情况下,无法通过“自上而下”(Top-down)的方式来理解系统。因此,从基本的“模式”出发,并在过程中学习和认知,不断地向上发展更高层的“模式”,才能最终实现对“复杂系统”的全面认知。

三、总结

所以,“敏捷”(Agile)代表的是一种方法,是在“以人为核心驱动”(Human-Driven)的“复杂系统”(Complex System)背景下,一个具有适应性的“经验性过程控制方法” (Adaptive Empirical Process Control)。

持续运用“敏捷”的方法,即使有眼前的“未知”和“不确定”所困扰,但逐渐拨开云层,便是灿烂的曙光。


了解了什么是“敏捷”之后,你对具体什么是“敏捷销售”是否更加期待?

转自:知乎:https://www.zhihu.com/question/30945320?sort=created

转载于:https://www.cnblogs.com/i16i1007/p/6650534.html

敏捷测试和瀑布测试的关联相关推荐

  1. 如何在敏捷环境中使用测试指标

    目录 翻译内容 What Is Agile Testing and an Agile Test Plan? 什么是敏捷测试和敏捷测试计划? Agile Testing Metrics 敏捷测试指标 B ...

  2. 敏捷开发过程中的测试

    Choerodon的测试管理主要为用户提供敏捷化的持续测试工具,包括测试用例管理.测试计划.测试分析等,可以有效地提高软件测试的效率和质量,提高测试的灵活性和可视化水平,最终减少测试时间,让用户将主要 ...

  3. 敏捷测试与传统测试的区别

    在敏捷测试中也有测试活动乃至专职的测试人员,但其活动内容和目标是有显著差异的. 一般在传统开发团队中,产品经理(或销售)为范围或称之为需求负责,项目经理和开发组为进度负责,测试组为质量负责,部门经理为 ...

  4. 敏捷项目如何保证测试质量

    关于敏捷项目,是迭代更新快,每个迭代都会有新的内容,或是业务需求,或是代码优化,我们身为测试,要在每个迭代的测试中,保证每个迭代的测试质量. 测试质量,包括这次迭代的改动不影响已有的功能,以及增加的功 ...

  5. 敏捷实践 | 浅谈测试金字塔

    Why 为什么要学习测试金字塔 之前做测试培训的时候经常会被问到几个问题--我们项目没有自动化测试,老板想让我做,我搞了几个星期 selenium 怎么不行呢?我应该先做 API 测试还是 UI 测试 ...

  6. 测试驱动开发 测试前移_测试驱动开发:它是什么,什么不是。

    测试驱动开发 测试前移 by Andrea Koutifaris 由Andrea Koutifaris Test driven development has become popular over ...

  7. 一年时间,从一个浑浑噩噩的测试小人物到测试主管的成长之路

    目录 关于自动化测试我的个人意见 一.测试基础 二.Linux必备知识 三.Shell脚本 四.互联网程序原理 五.MySQL数据库 六.抓包工具 七.接口测试工具 八.Web自动化测试Java&am ...

  8. 性能测试、负载测试以及压力测试

    为什么80%的码农都做不了架构师?>>> 根据产品的时间特性和资源特性,效率测试可以包括不同的测试类型,例如:性能测试.负载测试和压力测试.本文则主要介绍这三种测试,希望对你有帮助, ...

  9. 性能测试vs负载测试vs压力测试

    下面我们主要介绍性能测试.负载测试和压力测试. 效率作为ISO 9126内部和外部质量的重要质量属性之一,其含义是在规定条件下,相对于所用的资源的数量,软件产品可提供适当性能的能力.资源可能包括其他软 ...

最新文章

  1. 堆状态分析的利器——gperftools的Heap Profiler
  2. 字典怎么增加元素_python3基础之字典
  3. 2021.8.21 网易秋招开发笔试(题目 + java代码)
  4. open***无法启动日志报错解决方法
  5. 聊聊、Zookeeper 客户端 Curator
  6. nil 与 release
  7. 3D 机器视觉 02 - FPGA生成N位元格雷码
  8. mark python新手必碰到的问题---encode与decode,中文乱码[转]
  9. DevOps交付模式下,软件测试的那些事
  10. 设计海报|字符海报怎么玩?
  11. java输出结果校验_2. Bean Validation声明式校验方法的参数、返回值
  12. python工资一般多少p-Python里的黄金库,学会了你的工资至少翻一倍
  13. apulSoft apShaper for Mac(滤波失真插件)
  14. Luogu2680 [NOIP2015 提高组] 运输计划
  15. 生产计划体系完整解决方案(2) : 复杂大规模问题之 - 分区规划
  16. 在建设和培养技术团队,要有前瞻性
  17. 计算机三级数据库知识点整理
  18. 微分-解卷绕-积分算法提升matlab unwrap函数解卷绕范围
  19. 解决realplay在ubuntu中没有声音且画面很卡的问题
  20. java如何区分变量、成员变量、实例变量、静态变量、静态常量(类变量)、常量、静态常量、字段、属性

热门文章

  1. 游戏开发手记:战斗模块设计
  2. 智能客服 | 在线智能导购,你的另一个最佳员工
  3. 插入excel背景后,背景图片尺寸
  4. DOTA数据集 | YOLOv3 实现训练、测试
  5. 【Crypto——1.23wp】
  6. 无法定位序数4999于动态链接库libmysql.dll的解决办法
  7. Science慢性肾病与肠道菌群新机制
  8. 真实经济周期理论与凯恩斯主义经济周期理论的比较分析
  9. 论文总结之对话生成《Improving Knowledge-aware Dialogue Generation via Knowledge Base Question Answering》
  10. android 自定义 theme,Android 系统添加自定义主题属性