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


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 系统的安全漏洞为例


  • 第一道关:程序员(提升程序员的修养,是一个永不过期的课题。从别人的失败和本身的失败中学习、积累、提升,是一个程序员成长的必修课)
  • 第二道关:编译器(编译器在代码质量方面,做为机器,恪尽职守,它能够帮助咱们清除不少错误)
  • 第三道关:回归测试 (通常地,软件测试会尽量地覆盖关键逻辑和负面清单,以确保关键功能可以正确执行,关键错误可以有效处理)
  • 第四道关:代码评审 (代码评审是一个有效的在软件研发过程当中抵御人类缺陷的制度)
  • 第五道关:代码分析 (静态代码分析是经过对源代码的检查来发现潜在问题的一种软件质量保障方式)
代码制造的流水线咱们分析了这重重关卡,我特别想传递的一个想法就是,编写优秀的代码,不能仅仅依靠一我的的战斗。代码的优秀级别,依赖于每一个关卡的优秀级别。高质量的代码,依赖于高质量的流水线。每道关卡都应该给程序员提供积极的反馈。这些反馈,在保障代码质量的同时,也能帮助程序员快速学习和成长。

微信扫描二维码,关注个人公众号

深刻浅出分享 Java 干货 , 找回对代码的 Passion , 助力月入 20K+

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

相关文章
相关标签/搜索