前言

知乎上有一个提问: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. java协程线程之虚拟线程

    前言 众所周知,java 是没有协程线程的,在我们如此熟知的jdk 1.8时代,大佬们想出来的办法就是异步io,甚至用并行的stream流来实现,高并发也好,缩短事件处理时间也好:大家都在想着自己认为 ...

  2. Django学习笔记:第二章django的安装和创建应用

    1.安装Django 终端运行 pip install django 查看django是否安装成功 python -m django --version 1.1 安装虚拟环境 在控制台运行 pip i ...

  3. 2023-07-23:给你 n 个任务和 m 个工人 每个任务需要一定的力量值才能完成 需要的力量值保存在下标从 0 开始的整数数组 tasks 中 第 i 个任务需要 tasks[i] 的力量才能完

    2023-07-23:给你 n 个任务和 m 个工人 每个任务需要一定的力量值才能完成 需要的力量值保存在下标从 0 开始的整数数组 tasks 中 第 i 个任务需要 tasks[i] 的力量才能完 ...

  4. TCP的Keep-Alive机制:链接存在但是没有数据传输,内核怎么处理

    服务端/客户端会定期发送探测报文来检测客户端的存活状态. 由三个内核参数控制: 首次发送探测报文时间:net.ipv4.tcp_keepalive_time有报文传输时重置 探测报文的发送间隔:net ...

  5. 【JMeter】JMeter添加插件

    JMeter添加插件 目录 JMeter添加插件 一.前言 二.插件管理器 三.推荐插件 1.Custom Thread Groups (1)Ultmate Thread Group (2)Stepp ...

  6. Wampserver64 报错:无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。

    缺少环境配置, 程序下载地址如下: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30679 点击下载,下载完成后,双击程 ...

  7. ACl与ACL实验

    ACl与ACL实验 ACL 1,ACL概述及 产生的背景 ACL: access list 访问控制列表 2,ACL应用 ACL两种应用: 应用在接口的ACL-----过滤数据包(原目ip地址,原目 ...

  8. [go]封装go的docker镜像

    前言 多阶段封装docker镜像,使用scratch镜像,尽量减小镜像包的体积. 封装用于编译的go镜像 Dockerfile FROM golang:1.20.1 AS builder WORKDI ...

  9. vue实现文本复制

    一. 下载插件 npm install --save vue-clipboard2 二. main.js import VueClipBoard from 'vue-clipboard2' Vue.u ...

  10. Protobuf vs JSON

    Protobuf(Protocol Buffers)和 JSON 都是数据序列化格式,但它们在许多方面有着显著的不同.以下是对两者的一些主要比较: 数据大小和速度: Protobuf:由于 Proto ...