有Bug不会解? 这篇文章很Nice ! 网友: 这套方法论太赞了 !

Bug是什么?

来自百度百科的词条定义

漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在Sendmail早期版本中的编程错误,在NFS协议中认证方式上的弱点,在Unix系统管理员设置匿名Ftp服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。因而这些都可以认为是系统中存在的安全漏洞。bug狭义的概念是指软件程序漏洞或缺陷,广义的概念还包括测试工程师或用户所发现和提出的软件可更改的细节、或与需求文档存在差异的功能实现等。

综上所述Bug 的定义有如下几类

  • 软件程序漏洞
  • 与原型不符的技术实践
  • 业务场景中技术架构的缺陷(可靠性,可扩展性,可维护性)

如何发现Bug ?

第一种Bug的发现途径, 主要靠渗透工程师的测试 或者来自黑客的管教. (比如 XSS, CSRF..) 第二种Bug的发现途径, 主要靠项目交付后一行一行的执行测试用例与 有着火眼金睛的产品经理的把关. (比如 Ant Design 圣诞节日彩蛋) 而第三种Bug 则是最常见的. 对于业务认知与实践上的欠缺, 有些Bug可能在上线前的自测种就能察觉到, 可有些Bug就随着时间的流逝被雪藏了起来, 比如使用 JDK1.7的HashMap在多线程业务中导致的死锁问题, 使用分词器不建立单列模式加载语料包导致的OOM, 以及在金融场景使用 不安全的流式处理的漏算问题等等. 爆发之时, 宕机之日. 看完这么多Bug发生方式, 有没有一种 众生皆苦 的感觉~

如何在Bug发生后Debug?

  1. 项目必须有日志框架收集每天的日志, 在计算密集型系统(单机)中需要捕获Bug后将异常快照发往值班人员邮箱 , 而在数据密集型系统(分布式)部署中需要引入 ElasticStack 分析日志事件.

腾讯技术工程:腾讯技术课|基于Elastic Stack 搭建日志分析平台​zhuanlan.zhihu.com

2. 日志框架可对易错业务进行埋点, 而 ElasticStack 则可配置日志分析事件. 方便Debug,

3. 上面的两步操作是为了获取Bug发生后的第一现场. 有利于定位Bug.

4. 定位到了Bug ,就要沉住气, 告诉自己告诉自己已经成功了一半, 什么事情都可以解决, 要么花钱要么花时间, Bug一定会解决的.

5. 面对满屏日志, 不要慌. 日志打印范围从大到小分别为 DEBUG , INFO , WARN , ERROR , 如果已经对易错的业务埋点就使用 全局搜索 WARN , 大致看一眼下面有没有错误的. 如果没有则, 直接 搜索 ERROR , 从第一个 ERROR 开始看, 主要看 异常名和异常信息调用堆栈 然后根据 异常信息找到 发生 ERROR 的代码行数, 接下来就是在自己的项目中找到异常的调用类, 打个断点, 要想复现BUG需先将日志级别调整为 DEBUG, 这样就可以输出全部日志, 然后去启动当前项目. 一步一步Debug这个类直到异常再次复现.

6. 将当前项目中未提交代码提交, 为了避免解决Bug而引发的Bug, 根据自己对这个 Bug的理解去修复出现Bug的代码, 然后在这个过程中去查资料, 去请教大佬,也是提升的一个过程 !

7. 对于初学者建议建立一个Bug手册, 将自己知道的所有Bug 都记录在上面, 以及相应的解决方案, 以便下次直接套用.

如何防止Bug发生?

首先研发团队要有正视Bug的勇气, Bug从有这个名字开始就一直存在到今天, 我相信 一百年以后仍然还有Bug存在, 只要代码是人写的, 人非圣贤熟能无过? 要有积极预防Bug的心态, 对于生产事故要理性对待, 从表面上看这是人的责任 但其本质其实是制度的问题, 比如以 苹果公司的 iOS 和 OS X 系统的安全漏洞为例

极客时间​time.geekbang.org

  • 第一道关:程序员(提高程序员的修养,是一个永不过时的课题。从别人的失败和自己的失败中学习、积累、提高,是一个程序员成长的必修课)
  • 第二道关:编译器(编译器在代码质量方面,作为机器,恪尽职守,它可以帮助我们清除很多错误)
  • 第三道关:回归测试 (一般地,软件测试会尽可能地覆盖关键逻辑和负面清单,以确保关键功能能够正确执行,关键错误能够有效处理)
  • 第四道关:代码评审 (代码评审是一个有效的在软件研发过程中抵御人类缺陷的制度)
  • 第五道关:代码分析 (静态代码分析是通过对源代码的检查来发现潜在问题的一种软件质量保障方式)

代码制造的流水线我们分析了这重重关卡,我特别想传递的一个想法就是,编写优秀的代码,不能仅仅依靠一个人的战斗。代码的优秀级别,依赖于每个关卡的优秀级别。高质量的代码,依赖于高质量的流水线。每道关卡都应该给程序员提供积极的反馈。这些反馈,在保障代码质量的同时,也能帮助程序员快速学习和成长。

 

公众号名称 20K+,  深入浅出分享 Java 干货 , 找回对代码的 Passion , 助力月入 20K+ 

原文地址: https://mp.weixin.qq.com/s/e2arxLqnsbKZ_arFPTRwBw

发布了35 篇原创文章 · 获赞 19 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37977176/article/details/104459431