前言

知乎上有一个提问:Bug是如何产生的?
↓↓↓

今天,我们就这个话题,一起来做个讨论。
个人觉得程序员与BUG的关系,就像空气中的细菌与人的关系一样。
我们不能完全杜绝与它接触,唯一能做的,就是提高我们自身的”免疫力“(俗称可用性或健壮性),让它尽可能的远离我们,影响不了我们。

我的回答

早些时候,我写过一篇文章:趣图|为什么祖传代码被称为“屎山”?
那篇文章我的观点认为,那种一个类成百上千行代码堆在一起,经过一个又一个接盘侠维护后的“屎山代码”,是很容易产生bug的。
那产生bug具体涉及到哪些场景呢?在这里,我深度总结了以下10种场景,与你分享:
  1. 编程错误: 最常见的Bug产生原因之一是编程错误。本质原因还是程序员代码写的不规范或有漏洞,导致逻辑错误和数据错误。编程错误可能导致程序无法正常执行或返回错误的结果。

  2. 不完善的测试: 如果程序没有经过充分的测试,某些情况下可能会出现未被检测到的问题。测试覆盖率低、测试用例不全面或测试数据不准确都可能导致Bug。

  3. 需求变更: 在开发过程中,项目需求可能会发生变化,但这些变化可能会导致现有的代码出现Bug。未能适应新需求的代码可能会出现问题。

  4. 并发和同步问题: 在多线程或多进程环境中,竞争条件和同步问题可能会导致Bug。例如,两个线程同时访问共享数据可能导致数据损坏或不一致。

  5. 外部因素: 程序可能会受到外部因素的影响,如网络故障、硬件故障或操作系统错误,这些因素可能导致程序异常或崩溃。

  6. 第三方组件: 使用第三方库、框架或组件时,这些组件本身可能包含Bug,从而影响整个应用程序的稳定性。(比如早些时候发现的log4j漏洞)

  7. 内存管理问题: 内存泄漏、访问已释放内存或者指针错误可能导致程序崩溃或产生不确定的行为。

  8. 安全漏洞: 安全漏洞也是一种Bug,可能被黑客用于攻击系统。例如,缓冲区溢出漏洞、SQL注入漏洞等都是安全相关的Bug。

  9. 不一致的环境: 不同的操作系统、浏览器和硬件环境可能对程序的行为产生影响,特别是在跨平台开发中。

  10. 压力测试不足: 当系统在高负荷下运行时,可能会出现性能问题或崩溃。压力测试不足或未能模拟真实世界的使用情况可能导致Bug的出现。

为了减少Bug的出现,开发者通常会采取严格的质量控制措施,包括代码审查(Code Review)、单元测试、集成测试、用户验收测试等。

还有稍具规模的公司,还会搭建完备的监控体系,每当指定窗口时间内业务异常数(error)达到指定阈值或一些性能异常(比如磁盘空间不足、内存不足、CPU100%、GC频繁、各种中间件异常等)都会触发应用告警,告知应用Owner,及时干预,进行处理。

OK,接下来向大家分享,两则,我们可爱的知友关于这个问题的精彩答复,一个比一个精彩,一定看到最后哦!

知友答复

  回答一

  回答二

~本文完~

以上文章内容摘自作者原创公众号:「陶朱公Boy」一文,欢迎关注与转载,转载请保留出处。

Bug是如何产生的?的更多相关文章

  1. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  2. a标签点击跳转失效--IE6、7的奇葩bug

    一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...

  3. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  4. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  5. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  6. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  7. 应该是Angular2的一个bug?

    为了应对未来的趋势,及时赶上下一趟互联网技术,我最近也在通过具体项目研究angular2,首先必须要吐槽的是,学习angular2的成本本身不高,但是一堆的工具.配置实在让人 很是焦灼,就像asp.n ...

  8. 记录一次bug解决过程:数据迁移

    一 总结 不擅长语言表达,勤于沟通,多锻炼 调试MyBatis中SQL语法:foreach 问题:缺少关键字VALUES.很遗憾:它的错误报的让人找不着北. 二 BUG描述:MyBatis中批量插入数 ...

  9. 关于MJRefresh的下拉加载数据bug

    当没有更多数据的时候显示NoMoreData 我的理解是先结束刷新再显示没有更多 今天之前一直没发现有问题 贴之前的代码 [self.collectionView reloadData]; [self ...

  10. [异常特工]android常见bug跟踪

    前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...

随机推荐

  1. [python] 基于matplotlib-scalebar库绘制比例尺

    matplotlib-scalebar是一个Python库,用于在matplotlib图形中添加比例尺.它允许用户指定比例尺的大小.位置.字体和颜色,以及比例尺的单位.该库支持不同的比例尺单位,例如米 ...

  2. auto.js自动化手机脚本初始配置

    软件选择: auto.js 8.0pro版本(对比4.0版本有阉割,微信支付宝不能点)有两种模式: 客户端模式 服务器模式 auto.js 4.0版本有一种模式: 客户端模式 设备和电脑连接: 手机: ...

  3. 「学习笔记」CDQ分治

    CDQ 分治的思想最早由 IOI2008 金牌得主陈丹琦在高中时整理并总结,目前这个思想的拓展十分广泛. 优点:可以将数据结构或者 DP 优化掉一维 缺点:这是离线算法. 引入 让我们来看一个问题 有 ...

  4. 大数据面试题集锦-Hadoop面试题(四)-YARN

    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...

  5. [Java基础]String,StringBuffer,StringBuilder的区别

    String 和 StringBuffer/StringBuilder应该分开来看 java.lang.String源码中的注释说明 java.lang.StringBuffer源码中的注释说明 ja ...

  6. HTML前端js

    ajax请求方法书写 $.ajax({ type:"POST", url:CONTEXT_PATH+"/appAudit/insertSnDocCountAdmin&qu ...

  7. AcWing 4486. 数字操作题解

    题目描述 给定一个整数 \(n\),你可以对该数进行任意次(可以是 \(0\) 次)变换操作. 每次操作为以下两种之一: 将整数 \(n\) 乘以任意一个正整数 \(x\). 将整数 \(n\) 替换 ...

  8. iphone拍照的历史顽固问题-鬼影

    iphone11 系列的鬼影问题 近期苹果 iPhone 11 系列的手机又出现了新问题,其中有不少网友表示,自己在用手机拍照后,图片中莫名出现了"鬼影"的现象,这次的" ...

  9. C# DateTime 时间格式化

    今天做任务的时候,数据库日期拼写需要 从凌晨到晚上最后一秒,但是传过来的日期数据是 当前的时间,下面是我尝试的解决方案. endTime.ToString("yyyy-MM-dd 23:59 ...

  10. Docker容器怎么安装Vim编辑器

    ​ 在现代软件开发和系统管理中,Docker已经成为一个不可或缺的工具.它允许我们轻松地创建.部署和运行应用程序,以及构建可移植的容器化环境.然而,在Docker容器中安装特定的工具可能会有一些挑战, ...