转自:http://blog.jobbole.com/113230/

1913 年,美利坚工业之神——亨利福特,发明了世界上第一条流水线,汽车工业从此进入了大规模生产的时代。丰田公司提出的丰田生产系统(Toyota Production System)又为汽车工业带来了很多先进的生产和管理理念。

先进的生产和管理理念是一个行业从小作坊走向规模化的必经之路,软件工业虽然诞生较晚,但是发展却非常迅速,这也同样得益于软件工业开发和管理理念的发展。这其中就从汽车工业吸收了很多成熟的理念。

下面,就让我们通过这张出自 Toggle 的漫画,来了解软件开发模式的变迁史。

 
总览

这张图片从上向下,五个房间,分别是瀑布模型(waterfall),敏捷开发(agile),看板(KANBAN),SCRUM 和精益软件开发(lean)

除了瀑布模型这间小屋和其他小屋有着明显的界限之外,其他几种模型就像一个四合院,有着不可分割的关系,这也恰好表明,瀑布模式和敏捷开发模式是软件工业先后经历的两个阶段,而 KANBAN,SCRUM 和 LEAN 则是敏捷运动的产物。

OK,客官里边请,让我们进第一个屋子看看。

 
Old Days——瀑布式软件开发
所谓瀑布模型,就是说,软件开发是按照一定顺序展开的(传统线性生产流程 : Traditional,linear production flow)。就像汽车生产的流水线一样,每个部门各司其责,工作按照顺序展开,交付件单通道线性流动。你看这幅图,总体上就分为:需求 → 设计 → 制造 → 测试,四个阶段。
在这个系统中,客户被排除在生产系统之外(围墙是密闭不透明的),它们只能从需求的接口人那里向系统输入需求(Client places order)。正因如此,客户无法理解生产所需的费用以及为什么交付总是会延期,因此,也难免会闹出下面这样的笑话:
客户希望你造一辆汽车,却只愿意支付一辆自行车的开发成本。 
需求接纳后进入到设计阶段:
设计定型后,进入制造阶段:
在线性的生产系统中,或者说在瀑布开发模式中,需求和设计是不可以进行修改的。工人被安排在制造系统中一个个工位上,每个人仅负责一个部件的生产和装配,就像这位盘腿坐着的“I know HTML”大哥一样,HTML 开发者只需要负责 HTML 的开发而无需,也不应该关心软件的其他部分。
喂喂喂,这位老铁,不上班玩什么球啊?哎,您也别怪他,毕竟交付件(整车/软件)还没有完成开发,测试工作自然无法开展,当然得等着咯。这也是瀑布模型最大的弊端,下游工作的开展严格依赖于上游交付件的完成情况,这无疑是一种浪费,在争分夺秒的软件开发过程中,你能忍受这种浪费吗?
汽车完成生产和测试之后,一次性交付到客户手中,完成客户的全部需求。
走进新时代——敏捷开发模式
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
 
有点书面是吧,其实很简单,敏捷开发的一个前提假设是:用户不可能在产品开发之前,设计之初就完整、明确的提出需求。期望用户在开发过程中不变更需求是不现实的。用户在开发前提出的需求,可能并不是它们最终希望得到的。
在敏捷开发中,客户会参与到软件开发的整个流程中。整个开发过程不再是一堵不透风的墙,透明是关键(TRANSPARENCY IS KEY),但是,随着越来越多的用户参与进来,越来越多的问题也暴露出来了,越来越多不着调的需求也会被提出。
敏捷开发的另一个重要概念就是迭代,所谓迭代,就是不断对产品进行细微的、渐进式的改进(Small incremental changes)。
“先给您上个小号的尾翼,用着好我再给您换个大的~”
在敏捷开发中,生产不再是线性的,开发的同时还会进行测试工作,所有人都在同时工作。尴尬等待的日子一去不复返咯~
利用敏捷模式开发出的产品,相较于传统的软件交付方式,一个显著的特点是能够及时响应客户需求的变更,不断适应新的趋势。
这不,隔壁老王喜当爹了,之前定的法拉利显得有点不稳重,宝宝也没地方坐。我们的产品经理和开发人员快速响应,轿跑变商务也不是什么大问题~~ 当然,为谁辛苦为谁忙,客户爸爸们一定要买单呀! 
什么?您问第一稿方案是什么样的?去翻垃圾桶吧!
 
一股来自东方的神秘力量——看板

相信各位也注意到了,相对于瀑布模式的井井有条,敏捷开发在灵活的同时,也带来了一定程度的混乱。

就在这个节骨眼上,还得请这位来自东方的神秘人物——丰田看板大师(KANBAN SENSEI)给你点拨点拨。

KANBAN,不是汉语拼音,更不是英文缩写,它来自日语“看板”,カンバン的罗马拼写:Kanban。它正是丰田生产系统的一个重要概念:
看板管理,常作“Kanban管理”,是丰田生产模式中的重要概念,指为了达到及时生产(JIT)方式控制现场生产流程的工具。及时生产方式中的拉式(Pull)生产系统可以使信息的流程缩短,并配合定量、固定装货容器等方式,而使生产过程中的物料流动顺畅。
KANBAN要求把开发中的任务,以 TODO List 的方式表现出来:
形式可以是即时贴,也可以是可视化软件等等。
在制造业中,看板也是非常重要的管理方法。也有将其称为目视化管理的。
 
SCRUM 又是什么?

Scrum原始含义是指英式橄榄球次要犯规时在犯规地点对阵争球。争球双方各有8个队员参与,各方出3名前锋队员,并肩各站成一横排,面对面躬身互相顶肩,中间形成一条通道,其他队员分别站在后面,后排队员用肩顶住前锋队员的臀部,组成3、2、3或3、4、1阵形。然后,由犯规队的对方队员在对阵一侧1码外,用双手低手将球抛入通道,不得有利于本队。当球抛入通道时,前排的3对前锋队员互相抗挤,争相踢球给本方前卫或后卫队员,前卫和后卫队员必须等候前锋将球踢回后,方可移动。
在敏捷开发领域,SCRUM是一种迭代式增量软件开发过程,它包括了一些预定义的角色:
  • 产品负责人 Product Owner
产品负责人负责维护订单

  • Scrum主管 Scrum Master
SCURM Master 对整个SCRUM 过程负责,不惜一切代价(AT ANY COST),保证团队的工作时间和计划。
 
  • 开发团队 Team 

在 SCRUM 过程中,开发团队通常会进行冲刺 (Sprint),一个冲刺周期的长度通常是2-4周。

在这个冲刺过程中,开发小组专注于完成一组订单项的开发。比如:制造一个发动机
对于KANBAN 和 SCRUM,有人说 KANBAN vs SCRUM,也有人说 KANBAN+SCRUM,究竟谁是谁非,我看只有适合自己团队的才是最好的,毕竟方法和流程是为业务服务的。就这篇漫画来看,SCRUM + KANBAN 是两个避免混乱的好方法。
来来来,兄弟们,我们来开一个关于减少站会的站会~~
 
精益软件开发

第二次世界大战结束后,丰田公司前社长丰田英二曾经去美国汽车城底特律对福特生产线进行了考察,尽管福特高效的大规模生产线给他造成了很大的冲击,丰田英二还是非常理智的认识到了当时日本制造业所面临的困难。经济萧条,资源短缺,小批量差异化的需求使他不能盲目的引进这种大规模的生产方式,随后丰田公司发明并实践了一系列的管理和生产方法,这些方法在后来被统称为精益生产和管理方式(lean)。

精益生产的思想, 简单来说就是Just In Time(JIT),也就是说,只在必要的时候,按照需求的量,仅生产必要的产品,杜绝浪费。

Eric Ries曾在《精益创业实战》中提出MVP(minimum viable product)概念,意即“最简可行产品”——用最快、最简明的方式建立一个可用的产品原型,这个原型要表达出你产品最终想要的效果,然后通过迭代来完善细节。
 
精益软件开发不再像传统的软件开发一样,耗时几年才向客户交付完整的软件。取而代之的是,优先建立一个最简可用的原型产品投放市场或交付到客户手中。
一辆最简可用的汽车是什么样子的呢?不就是四个轮子、一个方向盘、一个座椅然后一起装在底盘上么。能开、能停、能转弯不就是汽车嘛。让客户先享受到产品带来的收益是最重要的。
 
BUT!!! 
你看,这里还有一位失落的大叔
尽管MPV 的概念听上去是如此的简单,可是实施起来却没有那么容易。
 
因为在设计产品原型的过程中,很多设计师是这么做的:把他们认为的产品应当具备的功能罗列出来,然后一一排除,排定优先级,决定哪个功能要在最初的版本中出现,而哪个可以靠后一些。但设计师们往往无法真的只把最必要的功能留在初级版本中——因为诱惑太多。设计师们总希望把很cool、很有惊喜的小细节带给用户来博取赞叹,但从全局来看,其实把某些功能刻意强加进产品,是会削弱产品整体流畅性的。Mr Jamie曾在其博客中把这种心理表现称作“艺术家心结”。
 
所有不必的东西(ALL NON-ESSENTIALS ARE THROWN OUT)都不能应用到当前的最小可用产品。你说,艺术家们得多伤心啊(愁的胡子都长一脸了)

此外,尽早交付产品给客户或部署到生产环境,也促进了 DevOps,持续集成(CI),生产环境测试(testing in production)等实践的发展。尽早交付产品,尽早从用户获取反馈,不论是好的还是坏的,促使问题尽早暴露,尽早修复,持续集成,持续改进。

 
眼尖的童鞋,估计早就看到了桌子上有一只程序员的好朋友 —— 小黄鸭。你还不知道小黄鸭?那你该看看这篇文章:《小黄鸭调试法,每个程序员都要知道的》
结束语 

实际工作中的软件开发和管理模式,往往并不能纯粹的归类于以上某种类型。即使是相同的开发模型,在不同的团队中也往往会根据实际情况进行变化和改进,留言告诉我们你所在的公司是如何进行软件开发的吧~

此外,如果你对我的解析有不同的看法,或者你在图中看出了新的内涵,也欢迎在评论中互动!

客户想要的 vs 客户实际预算:漫画解读软件开发模式 ​​​​的更多相关文章

  1. ASP微信服务号H5客户登陆,且获取客户授权的用户基本信息

    ASP微信服务号H5客户登陆,且获取客户授权的用户基本信息是需要客户授权,下面讲解详细步骤: 第一步:客户点击登录页,自动跳转到微信服务器端获取code 第二步:用第一步获取的code去获取客户的ac ...

  2. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

  3. IT增值服务实践心得体会:企业客户的钱比个人客户好赚得多

    友情提示 本人喜欢直言不讳,不喜欢拐弯抹角.喜欢从客观和主观.自身和他人等多种角度去探讨问题.如有不当之处,欢迎吐槽. 若干心得体会1.企业客户的钱更好赚,个人客户的钱很难.  为什么这么说呢? a. ...

  4. MySQL_活动期间单笔订单最高的且满600元 判别是重激活客户还是10月注册客户_20161031

    将29号和30号两个需求放到一个表当中 首先都满足在10.29到31号之间单笔订单最高的且满600元 数据结构为一个用户一个订单ID 一行一行的 上面是第一个表 我们当做主表 a 第二个表 我们找注册 ...

  5. 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结

    2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...

  6. sitecore系列教程之改进Sitecore编辑体验的5个步骤

    Sitecore完全关注客户体验,在适当的时间为合适的人提供合适的体验.虽然没有人会不同意客户体验是王道,但我们仍然需要记住每天使用Sitecore的人们为客户带来惊人体验的体验. 我看到无数客户通过 ...

  7. 微软开源 PowerShell 并支持 Linux 和 OS X

    微软近日宣布开源 PowerShell,开始支持 Linux 和 OSX.PowerShell 是面向 Windows 和 Windows Server 的自动化平台和可扩展脚本语言,可帮助用户简化系 ...

  8. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. 医院管理者必须知道的医院客户关系管理(CRM)

    客户关系管理(customer relationship management,CRM)是在二战之后首先由美国IBM.道氏.通用等大型企业提出并运用的一种以有效销售为目的的市场营销思想,其理论基础就是 ...

随机推荐

  1. Python - pytesseract 机器视觉

    机器视觉  - tesseract ( 验证码 ) 安装 Ubuntu sudo apt-get install tesseract-ocr Windows 下载安装包 添加环境变量(Path) :搜 ...

  2. C++ unique

    #include <iostream>#include <algorithm>#include <list>#include <iterator>#in ...

  3. Visual Studio Code 上java开发环境搭建

    在把一些开源的SDK中java代码转成C#代码时经常需要写点java代码来实验下功能,装个Eclipse或IDEAs吧,好像也不太值当,所以用vs code搭个环境偶尔来实验下.以下: 1.下载并装好 ...

  4. markdown居中对齐,左对齐,右对齐

    Markdown语法本身没有居中,但Markdown中支持基本的HTMl语法,可以使用HTML语法. 居中: <center>居中</center> 左对齐: <p al ...

  5. 【计算机视觉】双目测距(六)--三维重建及UI显示

    原文: http://blog.csdn.NET/chenyusiyuan/article/details/5970799 在获取到视差数据后,利用 OpenCV 的 reProjectImageTo ...

  6. Vue Cli3.0 使用jquery

    参考链接:https://blog.csdn.net/ai520587/article/details/84098601

  7. 【转】转载一篇优质的讲解epoll模型的文章

    从事服务端开发,少不了要接触网络编程.Epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,Nginx.Redis.Skynet 和大部分游戏服务器都使用到这一多路复用技术. Epoll ...

  8. [转] zookeeper 本地启动多节点

    1. zoo.cfg配置文件如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks that ...

  9. hadoop(二MapReduce)

    hadoop(二MapReduce) 介绍 MapReduce:其实就是把数据分开处理后再将数据合在一起. Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理.可以进行拆分的前提是这 ...

  10. 使用pycharm开发web——django2.1.5(四)视图和模板相关

    刘老师说这块很重要..... 应该是很重要,大概看了一下,这里面关于views中函数作用,大概看来可能就是相应请求,传入数据和跳转,基本功能上貌似这些框架都差不多吧(其实我并没用过3个框架以上.... ...