作者:mindwind @云下山巅
bug最早真的是一只虫子,后来才被用来比喻程序中的缺陷。
bug的从分类上来说太广泛,但从解决的难度层次上来分,大概有以下几种:
- 固定条件下,不符合预期的程序行为
这里的固定条件很容易模拟并被重放,一般的黑盒测试就能发现这类bug。
- 外部环境的变化,导致不符合预期的程序行为
这类bug相对比较隐晦,有时会带给你surprise,这是一种程序的过敏反应。
有经验的程序员和测试会对此有所预期并小心检查,避免此类bug也不太困难。
- 周期性的程序错误
与时间有关的bug相对比较困难。
但如果程序错误爆发的时间具有周期规律性,那么重现与解决还是相对容易。
这类bug的典型案例是内存溢出,一般功能性测试很难发现。
通常需要长时间压力条件下的稳定性测试来发现。
- 无规律性的程序错误,但重现条件相对简单
这类bug很多都是与时序相关的,例如线程的调度时序等。
错误现象出现的比较随机,但重现的条件相对还是容易,通常需要在压力测试条件下重现。
解决的难度则依赖具体的程序,无法一概而论。
我曾经写过一个网络服务端程序就发生过此类现象,最终定位的bug与网络协议收包的线程执行序列有关。
- 神出鬼没的heisenbug
这个bug的由来很有趣,量子力学里有个海森堡不确定性原理,认为观测者观测粒子的行为会最终影响观测结果。
这类bug我也曾遭遇过,当我增加程序debug日志输出时,bug 就会消失无踪。
heisenbug是一个双关语,指生产环境下不经意出现,费尽九牛二虎之力却无法重现的bug。
heisenbug的出现场景通常都是和分布式的并发编程有关。
这些年下来,解决bug的手段依然很有限
- 预防
预防之道最实用的方法有八个字『保持简单,小心编码』。
代码越少自然bug越少,从个人的一些经验和一些开源项目的统计来看,代码行数和bug数的比例接近100:1。
也就是说每100行代码里可能就隐藏着一个bug。
- 测试
测试依然是目前解决bug的最有效手段,对于上面提到的前4种bug都有对应的测试手段去发现。
只有heisenbug,目前没有太好的测试手段能够去预防和重现。
还有些研发/测试经理比较喜欢提测试覆盖率这种指标,看着100%的测试覆盖率报告能让人心理产生一种虚幻的质量安慰。
我认为测试覆盖率要因项目而异,对于现在大量的CRUD类管理系统项目,最有效益的单元测试覆盖率是0%。
对这类项目追求覆盖率除了产生昂贵的成本,并不会带来更多的额外好处。
而对于类似协议栈、基础算法库类的库程序,单元测试覆盖率100%也还不够,代码路径的覆盖率和case覆盖率本质是不同。
有些程序bug很难被测试发现的原因是,编写测试程序的难度甚至超过了开发原始程序本身,这在很多分布式并发程序种尤为常见。
- 评审
现在很多软件开发流程中都增加了评审环节,很多时候是让一些资深程序员或架构师来对新手程序员的代码质量进行把关。
我最早知道的评审是来自CMM(软件成熟度模型)中的Peer Review(同行评审)。
Peer这个词体现了一种对等关系,而让老手来review新手其实已经是不对等了,这也是现在很多review越发形式化的原因之一。
Peer Review 本应成为软件质量保证的重要手段,在现下却因为种种原因(工期、绩效、非对等、KPI)执行的不太好,特别是在公司内部的私有项目中。
目前,我倒是觉得最有效的Peer Review方式是开源。
程序员不断的和bug对抗正如医生不断和疾病对抗,人总是会生病正如程序必然伴生bug。
真正的程序员要正视bug,bug means lived code, dead code has no bug.
最后从埋葬着无数代码和bug的坟场中走出来的都是真正优秀的程序员。
分享到:
相关推荐
单片机程序BUG查找分析: 单片机程序BUG的定义: 在单片机程序开发过程中,BUG是指系统在运行时出现的故障,这些故障可以是硬件出错,也可以是程序设计中的漏洞。所有设计人员在单片机程序开发过程中都追求无BUG的...
4. `api.php`和`api3.php`:这些文件可能包含了BugFree的API接口,允许外部程序与BugFree进行交互,例如提交报告、查询缺陷状态等。API是软件集成和自动化的重要部分,使得BugFree能更好地融入开发流程。 5. `index...
如果没有集成,也可以通过命令行工具来启动GoBug并与你的Go程序交互。 使用GoBug调试Go程序的基本步骤如下: 1. **配置GoBug**:在你的项目中,需要通过GoBug的配置文件(通常为.gobug或launch.json)指定要调试的...
以下是一些常见的微信小程序bug及其解决方案。 1. **textarea的padding问题**: 微信小程序中的textarea组件在模拟器上可能不显示padding,但在真机环境下,特别是在Android和iOS设备上,会有自带的padding,导致...
此“3dmax2018子菜单bug修补程序”是针对该版本软件中出现的一个特定问题进行修复的更新。在3D Max的用户界面中,子菜单是其功能布局的重要组成部分,它允许用户方便地访问和操作各种工具和命令。然而,在3D Max ...
原生小程序开发过程中遇到的奇怪bug以及解决方案
bug报告.zip程序开发文档软件开发文技术档下载bug报告.zip程序开发文档软件开发文技术档下载bug报告.zip程序开发文档软件开发文技术档下载bug报告.zip程序开发文档软件开发文技术档下载 1.合个人学习技术做项目参考...
### 如何减少程序中的Bug 在软件开发过程中,减少程序中的Bug是提高软件质量和稳定性的重要环节。本文将根据“如何减少程序中的bug.pdf”的标题、描述及部分内容,深入探讨几种有效的减少Bug的方法。 #### 一、...
本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的。 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标闪烁的BUG。 原因 造成这个BUG的...
这个名为"Java白板程序(有Bug,真的有Bug!!!)"的资源显然聚焦于一个包含错误的Java程序,可能是用于教学或实际项目中的一个白板应用。白板程序通常指的是用于画图、演示或教学目的的软件,而在这里,它显然存在...
bug跟踪流程,以图表的形式详细说明了如何发现BUG,回归BUG
BugFree是一款开源的缺陷跟踪系统,专为程序代码的bug管理设计,旨在简化软件开发和测试过程中的问题追踪。在软件开发中,bug是不可避免的,BugFree提供了一个高效的平台来记录、跟踪、修复这些问题,确保项目的顺利...
主要用于测试php程序使用,直接my_debug($content)将其输出,会提示您测试代码行数,便于定位跟踪测试程序使用,希望对大家有用处
Delphi2007 系统带有一个Bug,即程序编译后在退出时会报错。这个工具是修复那个bug,只需要执行后退出d2007重新打开即可修复!
提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档软件开发...
"软件公司Bug管理系统的设计与实现"这一主题旨在通过毕业设计的方式,让学生深入理解并实践如何构建一个有效的Bug跟踪和管理系统。下面将详细解析这个系统的设计与实现过程,以及涉及的相关技术。 首先,该系统采用...
本资源摘要信息主要介绍了 bug 的定义、返工率计算统计方法以及与之相关的质量提高方案。 首先,文档对 bug 的定义进行了详细的描述。bug 定义是指在软件开发过程中出现的错误或缺陷,包括高级类、 中级类和低级类...
微信小程序入门介绍(自制PPt)。本人已开发2款小程序,公司分享会,需要介绍小程序。固出此ppt介绍小程序入门,及自己遇到的坑,和一些小门路,存在的bug及解决方案。
BugBrain (虫脑)是关于人工神经网络的策略类游戏,是关于虫子女士的养成类游戏; 游戏以已经获得广泛应用的的阶越激励函数神经元为基础,要求玩家构建神经网络,实现与环境的交互,使虫子拥有基本的生存技能; ...