以下是为什么敏捷方法行之有效的原因:
1. 敏捷方法和传统的计划驱动方法的两个主要区别
i. 预测性计划(Predictive Planning)和自适应计划(Adaptive Planning)
计划驱动方法首先计划要做的工作(plan your work),然后着手工作以完成计划(work your plan)。这是一种带有预测性质的方法,其衡量项目成功的标准则是我们是否按计划、按时、按预算完成了工作。这种方法在很多领域里是适用的。但是对于软件开发而言,如果我们的需求没有办法做到不变更的话,我们就无法保证我们的计划以及其后的工作是不会变更的。Martin Fowler 向现场观众提出了一个问题,大意是你们当中有多少人的软件开发项目的需求是一成不变的,结果没有一位观众举手。因此,敏捷方法引入了自适应计划的概念,既然我们无法保证需求不变更,那么就让我们随时准备接受变更,接受挑战吧。自适应计划将计划驱动的流程缩短为以数周为单位的循环周期,在每一个周期中,我们根据当前的情况不断地调整计划以及计划的执行过程,同时不断地产生能够工作的代码,并且不断地将代码部署到应用环境中去。当然要实现这个目标我们需要一些具体方法的支持,如:自测试代码(Self-Testing Code),持续集成(Continuous Integration),重构(Refactoring),和简洁设计(Simple Design)等等这些技术层面上的方法。Martin Fowler 指出,一些公司和项目之所以受困于敏捷方法,原因之一是他们忽略了这些技术层面的方法,而仅仅实施了项目管理层面的方法。
ii. 以流程为本(Process First)和以人为本(People First)
在传统的方法论中,我们总是需要事先定义好工作的方法和流程,然后“工人们”被要求遵照这些方法和流程来工作。在软件开发领域,很多人把软件开发过程等同于软件本身,也就是说,软件开发的过程也如同软件程序般象机器一样运行,组件之间环环相扣,严密地协同工作。问题是软件开发的核心是人,人相对于机器零件和流水线而言,是相对不可预测的和不那么精密的。所以敏捷方法反其道而行之,提倡将“首先定义流程,然后要求软件开发人员遵照流程工作”变为“让参与软件开发的人员自己来定义和选择适合他们的流程”。简单来说就是以人为本,不把人当螺丝钉,发挥人的主观能动性,当然前提是需要团队成员有较高的平均素质。
 2. 沟通(Communication)
Neal Ford 让我们回顾或想象一下失败的软件开发项目,它们的失败是由于技术因素还是人的因素呢?《人件》的作者认为都是人的因素。人类的社会性决定了沟通的重要。Neal 举了几个有趣的例子,如:监狱里的犯人宁愿和其他人渣待在一起也不愿被关禁闭。很多国家禁止驾驶员驾驶时打移动电话,那为什么和乘客聊天就没有问题呢?原因是直接对话是最为有效和便捷的沟通方式,信息的传递在对话过程中非常顺畅和完整。虽然现在的移动通讯已经非常先进,信号质量也很高,但是我们的通话过程仍然是有损的,我们的大脑这个时候就需要努力地试图将通话信息拼凑得更完整以便能够理解对方的意思,因此才会分散驾驶的注意力。随后,Martin Fowler 举了另一个例子,拿他做水果蛋糕的方法和他在酒店的浴室中冲凉的方法来进行比较。因为做水果蛋糕的整个流程和配料都是非常固定的,所以他只需要按步照搬地烹饪即可做出味道非常一致(地好或者差)的水果蛋糕。而在酒店中冲凉就有些不同,因为每一个酒店浴室的开关设计几乎都是不一样的,所以他需要不断地调整开关来获得一个理想的水温,也就是需要不断地重复“调整开关”(输入),“用手试温”(输出)这个过程。相对于做水果蛋糕,在酒店浴室冲凉更好地反应了软件开发的特征,这就是在软件开发领域中,如果我们善于根据用户反馈的信息来做出新的判断和调整,就有可能提高产品的质量和用户的满意度。
沟通的确是一个非常重要的环节,它是敏捷方法的核心。在敏捷方法中,单元测试是程序员和代码组件的沟通,功能测试是程序员以及QA和系统的沟通,故事墙(Story Wall)和回顾(Retrospective)是团队和成员之间的沟通,功能演示(Showcase 或者 Demo)是团队通过产品和最终用户的沟通,持续集成(Continuous Integration)是产品和企业计算环境的沟通。沟通好了,什么事情都可以妥善解决,沟通得不好,好事也会变坏事。和广大技术爱好者交流沟通也是酷壳存在的目的和意义。
整个演讲时长一个小时,本文只是节选了我认为比较有意思的观点加上本人的理解写成,如有错误之处欢迎指正,不同看法欢迎交流。
最新内容请见作者的GitHub页:http://qaseven.github.io/

为什么敏捷方法能在软件开发中行之有效?相关推荐

  1. 为什么敏捷方法能在软件开发中行之有效

    有很多的书籍讨论敏捷方法是怎样工作的(How it works?),在这个主题演讲中,Martin Fowler 和他的同事 Neal Ford 讨论了敏捷方法能够在软件开发项目中行之有效的原因(Wh ...

  2. 敏捷软件开发方法论_什么是敏捷方法论? 现代软件开发讲解

    敏捷软件开发方法论 如今,每个技术组织似乎都在为软件开发或它的一种版本实践敏捷方法. 或者至少他们相信他们这样做. 无论您是敏捷应用程序开发的新手还是几十年前使用瀑布式软件开发方法学过的软件开发,如今 ...

  3. 在软件开发中实施人工智能和敏捷管理的9种方法

    来源:mush博客 自1956年年成立以来,人工智能已经彻底改变了企业决策和部署资源的方式. 几十年来,人工智能通过帮助各行各业的企业蓬勃发展,证明了其价值.从汽车制造厂的机器人到预测货币和库存变动到 ...

  4. 软件开发重要性_在软件开发中考虑时间的重要性

    软件开发重要性 by Crunch Tech 通过Crunch Tech 在软件开发中考虑时间的重要性 (The importance of time to think in Software Dev ...

  5. 软件开发中的10个认知偏差

    最近,在和同事们讨论产品经理职责的时候,聊到了关于产品的定义,如果不能准确定义"产品"的时候,可以考虑其必要条件,即可没有用户的产品肯定是没有意义的.产品有了用户, 必然存在用户与 ...

  6. 软件开发中的详细设计

    传统软件开发中的详细设计: 模块内的数据结构进行设计.比如模块中类.结构体的设计 对数据结构进行物体设计.比如数据库表的设计,文件存储的设计,文件存储目录的设计 每个模块进行详细算法设计.比如每个方法 ...

  7. 软件开发中的经验主义和理性主义

    软件开发中的经验主义和理性主义 读<设计原本>笔记 理性主义和经验主义是典型的认识论理论.这两种类型的思想,从古到今,从中到外,互相对立,互相斗争,又互相影响,互相渗透.经验主义者认为人类 ...

  8. Scrum: 在软件开发中应用80:20规则

    在软件开发中应用80:20规则 我们喜欢简单的经验法则,越简单越好.最有用的经验法则之一是80:20规则: 80%的影响来自20%的原因,80%的影响来自20%的努力. 这意味着 :通过更聪明,更努力 ...

  9. 软件开发中的著名定律

    软件开发中的著名定律 和其他领域一样,在软件开发的世界中也有一些有趣而著名的定律,开发人员.管理人员还是架构师,都经常在会议或闲谈中提到他们,很多时候我们都只是点头附和,免得让人知道自己其实根本没听说 ...

最新文章

  1. 中国信通院《新型智慧城市发展研究报告》
  2. 廖雪峰python教程视频-为什么看不懂廖雪峰的Python学习教程?
  3. 正则表达式需要转义的字符
  4. Pandas的学习(2.Series的索引和切片、基本概念以及Series的运算)
  5. 软件配置管理(二)配置管理角色与过程
  6. [深入学习C#]匿名函数、委托和Lambda表达式
  7. 学音视频一定要掌握这几个算法
  8. 如何避免文件被删无法找回的尴尬?
  9. JS让文本以打字效果呈现出来
  10. Android-JNI编程-图文解析
  11. 深度学习笔记--激活函数:sigmoid,maxout
  12. gps数据解析程序c语言,GPS数据采集分析要点
  13. php laravel 图片下载
  14. EyouCms前台GetShell漏洞复现
  15. linux查看ftp默认端口,linux系统如何修改ftp默认端口(图文)
  16. HFSS对称阵子仿真(2)
  17. 突然讨厌做前端,讨厌代码_如何安全清洁讨厌的游戏控制器
  18. 知识融合中几种计算文本相似度的方法(代码)
  19. Ubuntu使用apt管理安装软件包
  20. vue中如何利用js如何检测网络状况,监听网络状态

热门文章

  1. gdb调试android
  2. 一篇关于Maven项目的jar包Shell启动脚本
  3. 读取文件:TypeError: an integer is required (got type str)
  4. python--open用法
  5. 20170512 Python练习册0004统计英文的纯文本文件的单词出现的个数
  6. Illegal access:this web application instance has been stopped already
  7. Windows 8 系列 --Block Game --随笔
  8. 涨知识!提单及运输业务中常用的一些代码、术语及意义!
  9. 激活用户并让他留下,仅是“活下去”的第一步
  10. 导购的路上,媒体向左,社区向右