在软件开发中应用80:20原则

标签: 软件开发 应用 原则 | 发表时间:2013-11-20 07:53 | 作者:ricohzhanglong
出处:http://blog.csdn.net

本文来源于我在InfoQ中文站原创的文章,原文地址是: http://www.infoq.com/cn/news/2013/11/80-20-rules-software-dev


Jim Bird是一位经验丰富的软件开发经理、项目经理与CTO,专注于软件开发与维护中疑难问题的解决、软件质量管理与安全领域。在过去的15年间,Jim曾管理过团队建设与高性能的财务系统。他的主要兴趣在于如何帮助小团队更有效地构建真正的软件:高质量、安全、高性能且易使用。近日,Jim 撰文谈到了如何在软件开发中应用流行的 80:20原则,颇具代表意义。

很多经理都不想陷入太多的思考当中,他们喜欢简单的原则,快速且直接的审视问题的方式并能找准问题的方向。越简单,越好。其中最为有效的一个原则就是 80:20原则

80%的效果是由20%的原因导致的,或者是80%的结果来自于20%的努力。

这是收益递减的另一方面:相对于做得越多,得到越少来说,你可以实现做得少但得到多的结果,方式就是通过更加聪明而非更加努力的工作。

不用太费力你就能发现在软件开发中80:20原则的用武之地。比如说,80%的性能改进是通过优化20%的代码实现的,虽然在性能优化这个领域实际的比率可能更加接近于90:10,甚至是99:1。不过,无论是80:20、90:10还是70:30,这个原则本质上没什么差别。

80:20,谁使用什么,你需要交付的到底是什么

在软件开发中,另一个众所周知的80:20原则就是80%的用户只使用了20%的特性。这来自于Standish Group在2002年的一项 研究成果,他们发现:

  • 45%的特性是从来没有被使用过的
  • 19%的特性很少为人使用
  • 16%的特性有时会被使用
  • 只有20%的特性是被频繁使用的

这个发现对 敏捷与精益开发产生了深远的影响,它鼓励人们将精力放在 最小的特性集或是最小的产品上,即便在大规模的企业项目中亦如此。相对于设计与规划大量的特性来说,定义重要且有用的特性才是正确之道: 定义好特性的优先级,然后以稳健的步伐尽快交付。

Standish Group最新的研究成果表明缩小思考范围,交付更少的特性是促使软件项目成功的关键之所在。有超过70%的小项目是成功交付的,而很多大型项目在延迟交付、预算超支以及漏掉关键特性上的可能性要超出小项目的两倍之多。

80:20,Bug与测试

代码质量、Bug与测试是另一个适用于80:20原则的领域:

  • 80%的Bug是由20%的代码造成的
  • 90%的停机是由10%(甚至更少)的缺陷造成的

Bug总是集中爆发在某几部分代码中,特别是严重的Bug;而大多数严重的问题都是由少数几个Bug导致的。

Windows与Office中80%的错误与崩溃是由检测出的20%的Bug造成的

理解大多数严重的Bug发生在何处,为什么会在那里,该如何去做才能防止这些Bug的产生,你应该将时间花在这方面。还有些研究发现你所编写的一半代码是没有Bug的,而大多数Bug都出现在10—20%的代码中间,通常来说,这10—20%的代码是经常被改动的代码。每次发现代码中的Bug时就表明还有更多Bug需要修复。你发现的Bug越多,剩下的Bug也就越多,这是一种恶性循环。每次碰到那些高风险代码时,甚至在你尝试修复一些问题时,那么很有可能你会将事情搞得越来越糟而不是越来越好:当开发者修复容易出错的代码中的一个Bug时,有20%的机会他会引入新的Bug,即所谓的副作用。

大多数容易出错的模块都是非常复杂的,也是很难理解的,因此也是难以修复的。有些Bug要比其他Bug更难以修复。有时是因为代码质量很差、有时是因为问题难以重现和调试、有时是因为他们隐藏得更深。

80:20,哪些代码被修改了,修改频率是多少

Michael Feathers发现80:20原则也适用于代码随时间变化的频率:

80%的修改发生在20%的代码上

很多代码一旦写完之后就再也不会被修改了,比如说静态与标准化的接口、基本的配置等等。还有些代码一直都在发生着变化:20%的特性花了80%的时间,他们经常会根据需求的变化而发生变化;需要不断优化的核心代码、还有些代码会经常发生变化是因为出现了太多的Bug。

向已有的方法添加代码要比添加新方法容易,向已有的类添加新方法要比添加新的类容易。

这样, 很多系统最后都会有几个非常庞大的类,包含了大量的方法,随着代码的不断变更,这些类将会变得越来越大。

80:20与编程时间

前80%的代码只花了20%的时间,而剩下的20%的代码则花了其余的80%的时间。完成某个功能通常并不会花太多时间,特别是采用迭代与渐进的方式、频繁且快速的交付的情况下。

不过在背后通常还会有大量工作等待你去完成,比如说处理边界情况、处理错误,确保系统的性能与可伸缩性,寻找并修复各种Bug,部署前的各种调整等等。客户通常并不理解为什么最后的20%工作要花费那么多的时间。程序员也经常忘记这一点,因此在估算时就会发生各种偏差。这也是开发者经常出现估算错误的原因所在。

80:20与软件开发管理

时刻谨记80:20原则可以节省你大量的金钱与时间,将精力专注于重要的事情上可以不断提升你成功的可能性。哪些事情是重要的呢?比如说重要的特性、大多数严重的Bug出现的代码区域(需要花费最多时间去修复的Bug),经常会发生变化的代码。你与你的团队应该将注意力放在这些地方上才能确保最后的成功。

作者:ricohzhanglong 发表于2013-11-19 23:53:37 原文链接
阅读:170 评论:0 查看评论

相关 [软件开发 应用 原则] 推荐:

在软件开发中应用80:20原则

- - CSDN博客研发管理推荐文章
本文来源于我在InfoQ中文站原创的文章,原文地址是:. Jim Bird是一位经验丰富的软件开发经理、项目经理与CTO,专注于软件开发与维护中疑难问题的解决、软件质量管理与安全领域. 在过去的15年间,Jim曾管理过团队建设与高性能的财务系统. 他的主要兴趣在于如何帮助小团队更有效地构建真正的软件:高质量、安全、高性能且易使用.

3 条必须知道的软件开发原则

- - 博客 - 伯乐在线
在本文中将介绍 3 条重要的软件开发原则,你可能已经知道,也可能只知道其中一条. 这些原则看似很简单,但实施起来会很难. 无论如何,这些原则提供了一个管理复杂软件项目的强大的途径. 当涉及到真实世界中的项目开发时,你会发现这些原则都是非常有用的. 原则1:不要重复自己(Don’t Repeat Yourself,DRY 原则).

【外刊IT评论网】趣图图解SOLID软件开发原则

- - 外刊IT评论网
今天早上我发现了 Motivator这个工具. 下面就是我的首次尝试,以 SOLID软件开发原则为主题的具有启发意义的图片. 这图片都是从谷歌里搜索出来的,我“借用”了一下. 希望这些作品能给你带来一些快乐. 我已经把它们挂在了我们开发团队的办公室里了. (这张图片来自 Mark Nijhof.

软件开发的 5 条核心原则,让工作事半功倍

- - 掘金后端
作为一名程序员,小伙伴们有没有想过这个简单的问题,“软件是什么. ”可以闭上眼睛让自己想一会,如果觉得有点抽象不太好回答的话,来看看我的答案. 软件 = 程序 + 数据 + 文档 + (服务) 程序 = 数据结构 + 算法. 看完这两个直观的公式,是不是有一种恍然大悟的感觉,“哦,原来这样啊. 再来看四条对“软件”的定义,虽然比较枯燥,但概念是到位的:.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

移动应用丰富动效的六点原则

- - 落花流水——elya妞╰_╯
如果想让你的移动应用更活泼更灵动,丰富的动效是不可少的,丰富的动效可以让你的应用更具活力,充满生机;丰富的动效可以让你的应用彰显效率,提升品质感;丰富的动效可以让你的应用充满魅力,引人探索;丰富的动效可以让你的应用减少焦虑,消除等待感;丰富的动效可以让你的应用充满韵味,有节奏感;丰富的动效可以让你的应用有出奇的信息组织,整洁高效.

增强应用“可用性”的10条设计原则

- - 酷勤网-挖经验 [expanded by feedex.net]
 来源:CocoaChina移动观察   2011-12-25. 众所周知,如果开发者想发布一款iOS应用,必须提交苹果应用商店审查. 苹果可能以各种各样的理由驳回你的申请,所幸苹果也把审查的规矩讲很清楚. 通过审查的必备条件之一是你的应用必须有很高的“可用性”. 你可以去查这份叫做 iOS Human Interface Guidelines的指导手册,更方便的是直接阅读从中提炼出的10条精华小贴士.

大型网站css样式命名和应用原则

- - 教育技术前沿探索
原则1:首页DIV最小块级单位须设置高度;子页可能添加资料的DIV块不应设置高度;. 原则2:css 样式继承关系必须控制在三层以内;. 原则3: 对于浮动所产生的IE6BUG,在全局样式里面应定义.clear{clear:both;height;0px; overflow: hidden;}. 原则 4:所有页面文件的编码格式统一为:UTF-8;.

移动应用的十项设计原则

- - 雷锋网
【编者按】原文作者 Jonathan Stark 是一名移动设备顾问、培训师,本文由 @C7210编译. 文中总结了移动应用界面设计的十条原则,其中包括设计观念以及规范、使用的场景环境、导航、用户输入、操作手势、屏幕定向、启动加载等方面. 希望通过规范的思路能够帮助那些还不是非常熟悉这个领域的设计师们建立起一套有实践价值的设计思维框架.

软件开发的“三重门”

- - 酷壳 - CoolShell.cn
自从上次写了“ 程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了. 而春节前有人问我,是做底层技术,还是做业务. 这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章.