`
阅读更多

 

精益生产是制造业领域的一大创举,而如果把精益生产的简单原则运用到软件开发上,我们称之为精益编程(Lean Programming)。有人预言,精益编程的效果可能与20世纪80年代精益生产所带来的生产改进一样重大。精益生产的10条简单原则对精益编程同样适用。实际上自适用软件开发及肯特·贝克的极限编程(Extreme Programming)中都运用了这些原则。

精益原则一:消除浪费

精益生产的第一个原则就是消除浪费。利用价值流分析可以发现流程中的所有活动,并能找出最终添加到产品中的价值,然后价值流分析会试图找到更为有效的方法去产生同一价值。

在软件开发过程中制作的文档、图表及模型是软件开发项目的一部分,但它们往往是消耗品,可以用来帮助系统的生产,但未必是最终产品。一旦系统交付,用户对这些中间过程的消耗品并不在乎。所以此类消耗品需要证明自己不仅能为最终产品增值,而且还是获得最终价值的最有效的方法。

精益原则二: 尽量减少冗余“库存”

库存太多会耗用资源、延长响应时间以及隐藏质量问题。软件开发的“库存”是指不属于最终产品的那些文档。分析一下就会发现,制作这类文档所花费的时间占据了产品周期的一大部分,而最大的浪费还是因为文档无法正确、全面地抓住用户需求而开发了不符合用户需求的系统。

我们知道用户很难依据文档去设想系统的细节;即使是在实际使用前,用户也不可能正确预测系统的运行;甚至在系统交付之后,用户还可能发现这并不是今后整个使用期间自己所期望的系统运行方式。而在评估文档的价值时,这些因素都必须考虑在内。

精益原则三: 缩短系统的响应时间

20世纪80年代,TQM(全面质量管理)原则教会我们如何在数小时而不是数天或数周之内完成产品生产;在传统软件开发需要几个月或几年时间的时候,电子商务项目往往能够在几周之内完成。

丹尼斯·弗雷利曾提议利用降低制造周期所用的技术来缩短软件开发周期。他建议充分利用“小批量”和“流畅流程”原则。

迭代开发基本上就是把这些原则运用到软件编程上。按照这种方法,在整个开发周期不断设计和交付小而完整的部分。迭代周期从几周到几个月不等,每个迭代阶段都涵盖从收集需求到验收测试的整个开发过程。

精益原则四:获取需求 延迟决策

制造行业过去常常认为,如果营销部分能够准确预测市场需求那该多好。但后来发现这种想法是不对的,相反,应该大大缩短系统的响应时间,以便系统能够对变化做出充分的反应,从而抛弃对预测的依赖。其实IBM目前所推广的E-Business On Demand正是出于这样的思路,而此前戴尔的成功也是与这个理念分不开的。

使需求保持灵活性,并尽可能贴近交付系统,将为软件开发提供更强的竞争优势。在软件开发的早期阶段敲定设计同样带有预测性,所以软件系统的设计应该随时捕获新的需求,并对变化做出响应。

精益原则五:满足客户需求

导致软件项目失败最常见的原因就是需求不全面或不正确,针对这种风险,软件开发商在继续设计系统之前,会尽量收集详细的用户需求,然后由用户确认。

但很多用户在确认需求文档时经常会拖拖拉拉,他们担心自己认可的项目到头来会是个错误,所以等待他们确认文档会浪费大量时间。从这个角度来说,获得用户的同意非但不能鼓励用户参与,反而会造成开发人员和用户之间的对立。

准确抓住用户需求的有效办法就是借助于迭代系统开发,及早开发核心特性并且通过每个迭代阶段的可用性演示获得客户反馈。

精益原则六:结合反馈 一次做好

当在生产线上发现劣质产品时,很多制造企业会对劣质品进行返工,但效果不佳。相反,如果在整个制造流程中运用测试和控制手段,确保每次移交时每个部件都是合格的,这样就很容易查明产品何时偏离了规格。

业界已经公认,软件交付后找到问题并修正的成本是早期设计阶段的100倍,所以企业需要在编写程序之前验证详细设计的合理性。当然软件的规格在不断变化,企业需要利用各种技术手段不断适应变化。

各种测试技术是整个开发过程中适应变化的最佳手段。另一种应对变化的技术就是再构,即通过受控的方式改进现有软件的设计,利用再构,初始设计可以专注于眼前的问题,以后再考虑将来的需求。

精益原则七:对员工下放权力

如果软件开发环境不如预期,主管的本能反应往往是实行更严格的流程,更加详细地明确员工如何完成任务。精益生产则建议采取截然相反的方法,如果开发出现了问题,不要引进外面的专家,而是为员工提供评估及改进各自领域的工具,给予员工足够的权力,最终自己解决问题。

跟精益生产一样,精益编程同样重视团队的协作。软件开发至少需要一次信息移交,即从用户到编程人员,但更多的时候不止一次,比如从用户到设计人员,再到编程人员。有观点认为,这类书面信息最好全部移交,但实际上在移交纸面信息时,会无形中丢失大量有效信息,而让小组成员协同工作则效率要高得多,同时还减少了文书工作。

精益原则八:取消局部优化

在过去,不让机器满负荷运作是难以接受的,但在精益生产中这却是合理的。

一些受过训练的项目经理会非常关注某些局部的管理,正如制造工人致力于尽量提高机器的生产效率一样。但精益编程是受时间和反馈的驱动,所以局部生产力的优化会削弱整个制造流程。在用户所处环境不断变化的今天,如果把局部优化放在非常重要的位置,那当用户需求发生变化时,所有优化工作都付之东流。

如果某个局部的功能有一定的框架限制,只要它不会拖延工期,就不必为它担心。

精益原则九:利用逐步采购

供应链并不是在今天才产生,让供应商相互竞争,保证以最低的成本获得原材料也是很常见的,但精益生产又一次改变了这种惯例。美国管理大师W·爱德华兹·戴明认为,与供应商基于信赖的关系创造了给双方公司带来最大效益的环境。

事实证明,减少供应商的数量,其合作关系具有更高的质量。长期的合作关系可以帮助企业改进产品设计及生产流程,而且几乎无需文书工作。

很多软件企业认识到,传统的软件开发合同造成了隐性浪费。而对软件用户来说,相对稳定的软件开发商可以专注于为用户提供更优秀的软件,并可在开发中尽可能迟地使需求稳定下来。

精益原则十:缔造精益文化

这个原则不用解释也一目了然,如今优秀的软件开发意味着能够不断适应变化。其实在类似CMM的模型中缺乏对变化迅速做出响应的灵活性。

从某种意义上来说,迭代项目环境成了运行环境,因为流程重复出现,就可以把流程改进技术从一个迭代阶段运用到另一个阶段。不过我们需要的不仅仅是涵盖某个项目的改进模型,只要学习现有的项目,就可以改进未来项目的性能。

到目前为止,精益生产的十大原则已经被普及到了多个行业,包括物流、客户服务、医疗保健、金融、建筑、软件等领域。(建苗 编译)

 

分享到:
评论
1 楼 qiaoweishu 2010-11-19  
精辟深刻,很是受益!

相关推荐

    敏捷软件开发.pdf

    目录  译者序  第2版前言  第1版前言  第0章不可知和不可说 ... 附录Aa敏捷软件开发宣言和相互依赖声明  附录BNaur、Ehn、宫本武藏  附录BaNaur、Ehn、宫本武藏:演进  附录C后记  参考文献

    基于精益技术的汽车生产系统的设计与实现.docx

    随着信息化时代的到来,中国汽车产销量在全球排在第一位,而汽车生产行业竞争激烈,为了顺应市场经济需要,为了满足消费者的需求,汽车生产系统加入精益理念,其主要目的是为了提高生产过程中的控制效率减少浪费,无...

    敏捷开发知识体系

    《敏捷开发知识体系》面向敏捷实践者学习敏捷知识和敏捷软件开发企业进行敏捷转型的需要,旨在帮助个人更快地掌握敏捷开发知识,帮助企业更好地实施敏捷转型。主要内容包括:敏捷开发的哲学理念、价值观、敏捷开发...

    云计算核心技术架构论坛(二)—容器如何帮助企业转型互联网架构—陈齐彦

    陈齐彦认为,在互联网+的时代,企业软件发展到今天,已经到...容器的出现,使得软件开发过程有了新的理念,即:精益工程(方法论)、移动(应用)、Git Flow(协作)、微服务(架构)、云平台(平台)、容器(发布)。

    将创业精神引入本科软件开发课程-研究论文

    为了满足学生对创业日益增长的兴趣,在过去三年中,我们修改了软件开发课程的内容,以介绍精益创业理念并模拟学生创业的过程。 课程开始时,学生向班上的其他学生“推销”他们的想法,然后选择他们将从事的项目,...

    张燎原从持续交付到业务创新阿里巴巴研发效能实践日.pdf

    内容简介:精益软件开发的目的是,持续高质量的交付价值,通过本次分享,受众可以了解到: 系统化思考:建立有效的业务模型,找到关键的业务目标; 结构化分解:目标驱动的需求规划,有效组织和管理需求; 流水线...

    泛迅OA协同办公软件.rar

    泛迅OA协同办公软件系统融合了最先进的管理理念和开发技术,是新一代全方位精益化管理软件.手机短 信、网络传真、电子签名、手写批注高端功能应用;强大的自定义工作流程设置,多级部门划分,自定义 表单,同时还...

    Zoomla!逐浪CMS_v8.1.2.rar

    再远,我都不会停息,因为技术而生,因为技术而强,这是逐浪软件的命与根! 全新打造,三百多项超级功能,助你十分钟快速构建超级强大的门户,使每一个信息化时代的个体,都能拥有自主的信息化平台。 很难,...

    ITOps在DevOps中的作用-研究论文

    IT行业正在通过结合开发实践,文化理念和软件工具来采用DevOps进行自我转型,该软件工具通过以比使用传统软件开发方法更快的速度不断改进交付,从而提高了高速交付产品和应用程序的能力。 DevOps的成功取决于协作...

    Choerodon猪齿鱼开源多云集成平台-其他

    以DevOps理念为指引,结合精益看板和Gitlab的分支管理,提供持续集成的流水线,缩短应用服务开发周期,同时提高团队效率,高效频繁向测试团队或者用户交付软件新版本。3、测试 -敏捷化的持续测试工具,可以有效地...

    loadrunner测试资料

    无不体现着这一理念,测试工作越发被机械化Coding化,很多企业招人时也不乏喜欢给自己的员工提些要求QTP/Loadrunner/Winrunner/RTF/Rebot一系列测试化工具被列入正规、精益的代名词。于是我们投入了大量人力物力来...

    面向对象方法(UML)串口通讯的设计与实现

    我在串口程序的设计和实现过程中,引入了面向对象分析和设计的理念,通过UML方式提高程序的设计效率,并增加程序的复用性。这样做的好处是可以增加了程序的可维护性,有效降低了开发难度和开发成本。

Global site tag (gtag.js) - Google Analytics