【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 ...
随机推荐
- linux之docker 安装 mysql
首先进入docker : 命令:systemctl start docker 查詢一下docker的状态: 命令:docker images 现在开始安装mysql了,第一步拉取镜像 命令:doc ...
- 【粉丝问答10】C语言关键字static的使用详解
视频地址:https://www.ixigua.com/6935761378816819748 粉丝提问 粉丝问题,总结一下: 关键字static的使用方法. 要想搞清楚关键字static的使用方法, ...
- Vue入门干货,以及遇到的坑
一.安装环境及Vue脚手架搭建 参考文档:https://www.jianshu.com/p/1626b8643676 二.开发文档 官方文档:https://cn.vuejs.org/v2/guid ...
- Linux安全模型中的3A
3A Authentication : 认证 验证用户身份 Authorization : 授权 不同用户设置不同权限 Accouting | Audition : 审计 Linux 验证用户身份 U ...
- ElasticSearch(ES)使用Nested结构存储KV及聚合查询
自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...
- 浅谈Dotnet的数据定位和匹配
Dotnet里,数据定位和匹配的相关编程现在变得很舒服. 最近项目紧,还要不停出差. 所以,写个短点的.最近经常用到的内容:数据定位和匹配. 数据定位 假设我们有这样一个数组: var arr ...
- 痞子衡嵌入式:盘点国内车规级MCU厂商
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内车规级MCU厂商及其产品. 在汽车电子领域,MCU的应用非常广泛,大到车身控制与动力总成,小到雨刷车窗等控制单元,都离不开MCU的身 ...
- 商品购买 & 收银台订单优化测试点疑问归纳梳理
摘要 更新内容 更新人 更新时间 初版内容 Young 2020.11.20 16:40 贾轩审查确认 Harry 2020.11.20 17:00 和林森沟通问题答疑 参与人:林森.Harry. ...
- python基础学习之元组和字典的功能方法
什么是元组?(tuple) emmmmmm,这个没必要深究吧,就是一排'元素',一行 格式: a = (1,2,3,4,5,6,7,8,9)用小括号表示的,极为元组. 其有序,且不可更改,可以对比st ...
- dex、apk完整性校验
对Dex进行完整性的检查,可通过CRC,或者Hash值.可将校验值放到String资源文件里,或者放到服务器中. 在代码中完成校验值对比逻辑,此部分代码后续不能再改变,否则CRC值会发生变化: 从生成 ...