当前位置: 首页 > news >正文

如何修复软件中的BUG

笔者上一篇博文《如何开发出一款优秀的软件》主要讲了如何开发一款优秀的软件及相应的必要条件。但对一个已上线,已经成型的产品,该如何解决存在的bug呢?这是本文要阐述的内容。
在这里,首先说一下bug的种类及bug严重程度分类,请看下面的图一与图二:

在这里插入图片描述
在这里插入图片描述

如上图,分别为bug的种类及bug严重程度分类,通常遇到bug,都是按bug严重程度分类,比如我们用到的jira和禅道管理软件,按优先级依次解决致命bug、严重bug……而把一般bug、轻微bug放后。通常这样的做法也没有问题,但笔者认为软件是一个整体,如果粗略的这样分,可能会混淆我们的思路,不利于我们解决问题。我们不应该因为bug属于Medium而忽视它,说不定一个小的Medium可能后面隐藏着影响全局的大文章。我们就要静下心来,好好考虑一下。在这里笔者建议按bug类型来将bug进行归类,全方位的分析一下所有的bug。那么接下来,笔者就述说一下,如何正确解决软件中的bug问题,步骤如下:
第一:将所有bug统计在一起,并进行归类,按图一中的方法进行分类。即按功能类、功能缺陷类、性能类等11大类(可根据实际情况,增加分类)进行分类。

第二:梳理整体软件架构,并标识出bug所在位置。软件架构包括前端架构,后端架构、数据库部署架构,消息中间件部署架构,缓存架构、负载均衡架构等。
第三:分析软件架构。分析软件设计架构,部署架构,看是否合理;针对标准规范类bug,看框架设计是否遵循了行业标准协议,或者自定义的协议是否规范;对于设计缺陷类bug,查看设计中的不合理的地方;对于安装部署类bug,要详细看看相应软件的部署环境,操作系统,中间件等版本及功能支持情况;对于配置相关类bug,要仔细检查部署及配置情况,找出疏漏;对安全类bug,要从安全设计方案里排查解决及安全框架及代码编写;对兼容性类bug,要从设计及代码级别审查,比如如果用到了适配器设计模式,那么这种设计是否考虑周全等等;对于性能类bug,需要全面分析设计架构及部署架构,包括但不限于数据库表结构设计,负载均衡设计、异步设计及各种中间件设计等;对于功能缺陷类bug,查看设计方案,是否属于设计时漏选,还是编写代码时没有实现相应功能,必要时还需要查看需求文档等;对于功能类bug,也需要检查设计方案是否合理,业务逻辑是否合理,部署方案是否合理;功能不稳定,是否存在大模块问题,及业务模块拆分不合理,相同功能模块没有拆分出来公用,设计及编码冗余,是否存在业务模块设计,软件架构设计不合理问题,关于这点说明,请参见《如何开发出一款优秀的软件》中相应内容的论述。

以上是笔者关于解决软件bug问题的三步方法,其实解决软件bug的方法最重要的是规范开发软件,避免或者减少bug的产生,关于这点请参见《如何开发出一款优秀的软件》中相应内容的论述。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第四章 类和对象 课后训练(1)
  • 数据看板多端查看无压力,教你轻松设置响应式布局
  • Dockerfile中的RUN、CMD、ENTRYPOINT指令区别
  • PCL-统计滤波
  • 十、组合模式
  • 计算机毕业设计选题推荐-自驾游攻略管理系统-Java/Python项目实战
  • 让PPT动起来:用python-pptx轻松添加动画效果
  • TwinCAT3 实时核中ADS实现C++ server、clinet数据传输
  • 车载以太网之SOME/IP
  • 【达梦数据库】误删数据库目录问题复现解决方式
  • JDK 8 新增特性:Lambda 表达式
  • 亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理
  • 骨传导耳机哪个品牌好用?精选五大高能骨传导耳机分享!
  • Learn OpenGL In Qt之着色器
  • 深度学习算法:现代人工智能的核心驱动
  • [nginx文档翻译系列] 控制nginx
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • isset在php5.6-和php7.0+的一些差异
  • ReactNativeweexDeviceOne对比
  • 从setTimeout-setInterval看JS线程
  • 回流、重绘及其优化
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端面试之闭包
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 小试R空间处理新库sf
  • 一天一个设计模式之JS实现——适配器模式
  • ​卜东波研究员:高观点下的少儿计算思维
  • #1015 : KMP算法
  • #每天一道面试题# 什么是MySQL的回表查询
  • $GOPATH/go.mod exists but should not goland
  • (06)Hive——正则表达式
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)JAVA使用POI操作excel
  • (二)windows配置JDK环境
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (转)详解PHP处理密码的几种方式
  • (转载)Linux 多线程条件变量同步
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***详解账号泄露:全球约1亿用户已泄露
  • ***原理与防范
  • .gitignore文件_Git:.gitignore
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 4.0中的泛型协变和反变
  • .NET Core 成都线下面基会拉开序幕
  • .NET 的程序集加载上下文
  • .Net 应用中使用dot trace进行性能诊断
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @AliasFor 使用
  • @PreAuthorize与@Secured注解的区别是什么?
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @取消转义