燃爆上海 5·23-24,AICon 大模型实战风暴,50+ 干货一网打尽,100% 日程上线 了解详情
写点什么

在软件开发中应用 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:472877
用户头像

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

关注

评论

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

自动驾驶等级家喻户晓,小微企业宽带等级你知道吗?

脑极体

一次软件的可靠性测试实践

PingCode研发中心

软件测试 开发 PingCode 软件可靠性

OneFlow最新版本登陆矩池云,快来体验吧

OneFlow

未来已来:云原生时代(一)云计算如何一步步走来?

看,未来

Docker 实践经验(一)简介、安装与实操

看,未来

云原生

Vue3 Typescript + Axios 全栈开发教程:手把手教你写「待办清单」APP

蒋川

typescript 低代码 Vue3 axios 全栈开发

最好用的 6 款 Vue 实时消息提示通知(Message/Notification)组件推荐与测评

蒋川

JavaScript Vue 组件 低代码平台 消息提示通知

国产ETL数据仓库调度平台TASKCTL对于Kettle作业类型的转换使用

敏捷调度TASKCTL

DevOps 数据仓库 kettle ETL 自动化运维

未来已来:云原生时代(二)云计算发展现状调研

看,未来

云原生

Docker 实践经验(六):Docker 网络

看,未来

云原生

docker之搭建zookeeper和kafka集群

echoes

Docker实践经验(四)docker 上部署 mysql8 主从复制

看,未来

Spring Boot系列(一)

DC.夜猫

Java Spring Boot Spring Boot 2

不改一行代码,将微信小程序生成商用App可行吗?

Speedoooo

微信小程序 APP开发 小程序转app 用户留存

架构实战营 - 第 6 期 模块七课后作业

乐邦

「架构实战营」

Spring之 @Component和@ComponentScan注解用法介绍和注意事项

echoes

面向高校 | “云原生技术应用与实践”示范课程项目开放申报

阿里巴巴云原生

阿里云 云原生 云原生课程

Docker 实践经验(三):Docker 容器数据卷

看,未来

易周金融分析 |“一参一控一牌”落地;两家支付机构更名

易观分析

金融 银行

优秀标杆!华泰证券多芯协同云网管理平台

BoCloud博云

多云管理平台 多云管理

Docker 实践经验(五)docker上部署 redis 三主三从集群

看,未来

云原生

Docker实践经验(二)镜像的构建、镜像仓库、压缩、导入

看,未来

图解 DevOps

看,未来

哈希Hash竞猜游戏系统规则开发

薇電13242772558

区块链 哈希值

A8hash哈希竞猜娱乐游戏开发(源码搭建)

开发微hkkf5566

「开源人的福音」一键部署Java构件到Sonatype

Jianmu

后端 持续集成 开源项目 部署 Java构件

战码先锋直播预告丨参与ArkUI,共建OpenHarmony繁荣生态

OpenHarmony开发者

Open Harmony

“Docker 实践经验” 系列导航

看,未来

云原生

书单 | 5月,这10本上榜新书带你打开新世界的大门!

博文视点Broadview

React 实现 PDF 文件在线预览 - 手把手教你写 React PDF 预览功能

蒋川

JavaScript react.js 低代码 CRM pdf预览

11年程序员给本科、研究生应届生以及准备从事后台开发同学的建议,学习进阶之路

C++后台开发

后台开发 社招 应届生 Linux服务器开发 校招

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