AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

  • 2013-11-19
  • 本文字数:2018 字

    阅读完需:约 7 分钟

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),经常会发生变化的代码。你与你的团队应该将注意力放在这些地方上才能确保最后的成功。

2013-11-19 09:472898
用户头像

发布了 88 篇内容, 共 269.1 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

价值连城 神经网络- 吴恩达Andrew Ng Coursera Neural Networks and Deep Learning John 易筋 ARTS 打卡 Week 58

John(易筋)

ARTS 打卡计划

香港云服务器的性能提升对行业服务带来显著动力

九河云安全

亚信科技AntDB数据库与中科可控、海光公司完成产品兼容认证

亚信AntDB数据库

服务器 国产化 国产芯片 国产数据库 产品兼容性互认

GitHub标星过万!10592字,475行

Java 程序员 后端

IBM大面积辞退40岁+的员工,【Spring Boot 1

Java 程序员 后端

FastApi-02-路径参数

Python研究所

FastApi 8月日更

Java开发6年了,BAT面试文档:ActiveMQ(1)

策划Java工程师

Java 程序员 后端

TimeUtils 实用封装

Changing Lin

8月日更

唯品会三年,我只做了5件事,如今跳槽天猫拿下offer(Java岗)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

现成FIL分币系统介绍|FIL分币平台搭建

Geek_23f0c3

Filecoin fil挖矿 FIL挖矿分币系统

ELK原来这么简单!《零基础(1)

Java 程序员 后端

Java开发三年月薪才12K,你知道如何用面向对象思想写好并发编程吗?

策划Java工程师

Java 程序员 后端

Java开发全套学习!MySQL进阶,秒变大神(1)

策划Java工程师

Java 程序员 后端

IM之Qunar实现

Qunar技术沙龙

架构 IM 办公 客服 消息

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

【“互联网+”大赛华为云赛道】API命题攻略:厘清三步解题思路,用好开发工具

华为云开发者联盟

API 华为云 modelarts 互联网+ API Explorer

【“互联网+”大赛华为云赛道】CloudIDE命题攻略:明确业务场景,快速开发插件

华为云开发者联盟

ide 开发 插件 华为云 CloudIDE

太可惜了,四面字节跳动,我的offer竟被一道“算法题”给拦截了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

GitHub标星过万!亦直问JVM(1)

Java 程序员 后端

京东:Flink SQL 优化实战

Apache Flink

flink

Java入门你值得拥有!【Spring Boot 26

Java 程序员 后端

Java开发从零开始!《SpringCloud超级入门(4)

策划Java工程师

Java 程序员 后端

香港服务器弹性是企业数字化转型的一个关键方面

九河云安全

GitHub标星8k!Java虚拟机5大核心知识点

Java 程序员 后端

Java应用性能优化!Java-进阶:集合框架1

Java 程序员 后端

AI应用说 | 百度专家&行业大咖畅谈AI技术与落地应用

百度大脑

人工智能 开发者 开发

Java基础72问:不搞定HR这3个问题,建议不要轻易跳槽(1)

Java 程序员 后端

Java大厂技术面试题汇总!美团阿里Java程序员晒工资被围观,总结

Java 程序员 后端

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

公众号_愿天堂没有BUG

Java体系化进阶学习图谱:所有帖子的 分类 总结

Java 程序员 后端

Java开发入门教程!程序员:面试官

策划Java工程师

Java 程序员 后端

在软件开发中应用80:20原则_技术管理_张龙_InfoQ精选文章