【OO课下讨论】bug中的“二八定律”
bug中的“二八定律”
有一个经典的经验性原则,叫帕累托原则,也称为二八定律。这个原则在经济、社会和科技等多个领域都有精彩的应用和解释。在代码质量方面也有这样的观察:80%的bug集中在20%的模块中,针对这个现象,请思考:
- 为什么会出现这种bug聚集效应?
- 这样的20%模块是否具有什么共性特征?
二八定律
- 二八定律在很多领域都基本成立,具有一定普适性
- 二八定律反映的是重要问题的分布规律
- 二八定律如果被运用得当,可以节省不少成本就能获得理想的回报
bug中的二八定律

为什么会出现这种bug聚集效应?
- 比较简单的模块不容易写出问题,比如1+1=?这种问题大家想出错都难。
- IDE给开发者提供了强大的辅助能力,就算是python、javascript这种动态类型的语言,现在的IDE也能在我们coding时提供一定的提示和检查。代码补全功能使得变量尽管很长我们也基本不会拼错,函数调用的参数提示使得参数基本都会写在正确的位置,IDEA甚至提供了get/set方法一键生成、接口/抽象方法一键添加等更加高级的功能。大量工作实际上都是IDE完成的。这大大降低了程序员犯低级错误的空间,这些低级错误显然是不会遵守二八定律的,只要写代码就有机会犯这些错误,而IDE的辅助帮助我们规避了大部分平均分布的错误,那么就导致错误会更加高级。
- 复用。尤其是OOP编程的时候,OOP的一条哲学就是“避免重复造轮子”,代码复用一方面加快了开发速度,而另一方面也把容易出错的代码集中到了被复用的代码上。
- “祸不单行”。一个地方出现了bug,往往意味着这一部分在我们构思的时候就出现了问题,没有认真思考好这一部分应该是什么样的,就匆匆撸键盘开搞了,砍柴不磨刀的代价可能就是一顿猛砍啥都没砍断。
这样的20%模块是否具有什么共性特征?
- 算法复杂的模块。问题本身难度高,开发者就更容易犯错。
- 造轮子的代码。没有啥参考,没有啥别的轮子可以用,复杂度就上来了,很多细枝末节的部分就容易被忽略。
- 和其它模块交互频繁而复杂的模块。写这些模块的时候不仅要考虑自己模块本身的业务逻辑,还要熟悉所交互的模块的逻辑。尤其需要与几天前写的/别人写的/没有文档/没有注释/该private的方法也都给public的的模块进行交互的情况下,写本模块的代码的时候所需要考虑的东西就会相当庞杂。东西一多,就有很多地方考虑不到,就容易引发“祸不单行”式的bug,哪哪都是洞,补好一个又漏了另一个。
我们怎样利用这样的性质?
最后
【OO课下讨论】bug中的“二八定律”的更多相关文章
- 【OO第三次课下讨论】农场主的饲料分配问题
需求分析与项目设计 本思考题的设计需求是力图找到一个简单且可行的饲料分配方案,由于不涉及到饲料价格或者是营养均衡之类的优化问题,因此在假设总的饲料量必能满足所有动物的热量需求的前提下,我们只需要采 ...
- OO博客总结——OO落下帷幕
OO博客总结--OO落下帷幕 凡此过往,皆为序章. 不知不觉OO课程即将落下帷幕,一路坎坎坷坷磕磕绊绊,可算是要结束了,心里终于松了一口气,也有小小的不甘和遗憾.凡此过往,皆为序章.特殊的线上OO课程 ...
- 【SEO 决胜网络索引】 课程大纲及第一部分第一课:网络营销战略中的索引
内容简介 1.课程大纲 2.第一部分第一课: 网络营销战略中的索引 3.第一部分第二课预告: 索引是什么 课程大纲 现在是网络为王的时代,人们越来越离不开互联网: SEO(Search Engine ...
- 20175221 MyCP(课下作业,必做)
MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...
- JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼?
<JavaScript 深入浅出>系列: JavaScript 深入浅出第 1 课:箭头函数中的 this 究竟是什么鬼? JavaScript 深入浅出第 2 课:函数是一等公民是什么意 ...
- alibaba druid 在springboot start autoconfig 下的bug
alibaba druid 在springboot start autoconfig下的bug 标签(空格分隔):druid springboot start autoconfig 背景 发现.分析过 ...
- 20175221 《Java程序设计》迭代和JDB(课下作业,选做):
20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...
- 20175333曹雅坤MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...
- ###20175311MyCP(课下作业,必做)
MyCP(课下作业,必做) 作业题目 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...
随机推荐
- 如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件
ASP.NET Core是一个跨平台.开源的框架,用于在Windows.Mac和Linux操作系统(OS)上开发web应用程序.你可以使用以下任何IDE开发ASP.NET Core 应用程序: Vis ...
- C++的指针,引用,指向指针的引用和Java中的引用
#include <iostream> #include<algorithm> using namespace std; class Test { public: Test(i ...
- 如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情?
如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情? 答:跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求.利用受害者在被攻击网站已经获取的注册凭证 ...
- 还在用crontab? 分布式定时任务了解一下
前言 日常任务开放中,我们会有很多异步.批量.定时.延迟任务要处理,go-zero中有 go-queue,推荐使用 go-queue 去处理,go-queue 本身也是基于 go-zero 开发的,其 ...
- 漏洞复现-CVE-2015-1427-Groovy远程代码执行
0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 Elasticsearch 1.3.0-1.3. ...
- nginx使用-2(模块和日志)
默认官方模块 1.1.Gzip压缩 压缩文件,使文件变小,传输更快了.目前市场上大部分浏览器是支持GZIP的.IE6以下支持不好,会出现乱码情况. 官方文档:http://nginx.org/en/d ...
- subprocess如何设置命令超时时间
一.subprocess如何设置命令超时时间 最近遇到一个问题,就是我需要在服务器上执行某些shell命令,但是有些命令失败的时候是不会自动终止的,只会一直停在那里,很耗时间. 因此想到了设置超时时间 ...
- Springboot项目启动后自动创建多表关联的数据库与表的方案
文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...
- python创建一个二维列表
方法一:利用for-in语句来生成一个二维列表 a = [] 2 for i in range(10): 3 a.append([]) 4 for j in range(10): 5 a[i].app ...
- 记录Java注解在JavaWeb中的一个应用实例
概述 在学习注解的时候,学了个懵懵懂懂.学了JavaWeb之后,在做Demo项目的过程中,借助注解和反射实现了对页面按钮的权限控制,对于注解才算咂摸出了点味儿来. 需求 以"角色列表&quo ...