【声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

软件由于其特殊性,始终和bug紧密地联系在一起。没有bug的软件是不存在的。为什么这么说呢?我们知道,软件是由很多人完成的,不同的人完成代码的水平是不一样的,一旦沟通不畅是很容易引入故障的。另外软件的需求是时刻在改变的、软件的修改是每时每刻都在进行的、软件的外部硬件环境也是在不断变化的。某些软件即使现在不存在bug,也可能是因为我们暂时还没有发现而已,和软件本身是否没有bug其实关系不大。

其实,只要你进入软件开发这个行业,基本上每天都需要和bug打交道,这是不以你的意志为转移的。问题的关键是,对待这些bug故障我们应该这么做?哪些是必须完成的,哪些是有待改进的,哪些是必须拒绝的。在发现和验证故障的过程中,有几条原则是我们需要牢记的,

(1)故障的处理是需要成本的,需要优先处理那些基本业务故障;

(2)必须使得故障复现,故障必现或者有概率地复现,这样解决的可能性才会大大提高,否则极有可能没办法解决;

(3)做好故障的描述工作是一件十分重要的事情,恰当、精确的描述可以大大提高问题解决的速度,比如说

a)当前软件的版本是什么;

b)故障是否必现;

c)有没有前提配置;

d)错误号是什么;

e)故障出现前的最后一个操作是什么;

f)故障的基本现象是什么。

当然,出现了故障总要解决吧。要是故障出现了,真正的原因却一直查不到,这也是一件什么恼人的事情。就我个人的经验来说,一般只要故障可以稳定复现出来,基本上都可以解决的,但是这个中间会有一些处理效率的问题。所以,有一些简单的准则和方法是需要注意的,

(1)寻找到故障的真实原因,通过日志和二分法寻找到故障发生的精确地点;

(2)充分利用故障发生时的日志信息、内存数据、回溯堆栈和调试信息等等;

(3)掌握单步调试的技巧,关注内存数据发生的每一点变化,尤其是验证内存越界的时候十分有效;

(4)解决故障的时候,注意一并处理同类的故障的,比如相似代码段的故障;

(5)修改故障,验证代码,注意不要引入新的故障,其实这是极难的一件事情;

(6)编写测试用例,防止类似事件的发生,我自己做得也不好。

当然,话又说回来,正所谓知易行难。很多事情说说很容易,但是真正实施起来的时候往往打了很多的折扣,这也导致我们处理bug的效果常常很不理想。其实也没有什么好的方法,关键还在于我们自己要及时反省、及时总结吧。不过有一点是肯定的,好的编程习惯可以消除一批类型的故障,比如说内存、死锁、重复编译、野指针等等。愿这篇文章和大家共勉。

随想录(软件中的bug)相关推荐

  1. 软件中的易用性设计及测试(三)之实践

    易用性测试 在<软件工程产品质量>质量模型中,提出易用性包含易理解性.易学习性和易操作性:即易用性是指在指定条件下使用时,软件产品被理解.学习.使用和吸引用户的能力.易用性测试包括针对应用 ...

  2. flv 开源 修复_如何修复开源软件中的错误

    flv 开源 修复 我们都在同一个团队中,并且都朝着使我们的开源软件变得更好的相同目标努力. 您的小贡献会产生重大影响. 开源软件的支持方式与运行方式同样重要. 如果选择构建令人敬畏的新功能,还是仔细 ...

  3. 报表软件公司悬赏 BUG,100块钱1个的真实用意

    上一篇文章我讲到,报表软件FineReport一反常态,做了个<提BUG,拿现金>的活动,1个BUG,100块钱.纵览软件行业,如金蝶用友浪潮IBM微软等国内外巨头,均没有这样的举动去征集 ...

  4. 如何减少开发中的 Bug

    作者: Jartto http://jartto.wang/2019/08/24/how-to-decrease-bugs/ 一.概述 爱因斯坦曾经说过:「如果给我一个小时解答一道决定我生死的问题,我 ...

  5. 邂逅JVM中的Bug

    邂逅JVM中的Bug 作者:张桂权 接触JAVA已有两年多的时间了,应该说对她已经有了一个很深刻的了解,可还是第一次邂逅JAVA虚拟机的bug,而且更然人吃惊的是代码竟然只有那么可怜的几行. 这一天我 ...

  6. Blynk扩展库正式发布!Mind+软件中也能愉快地使用Blynk物联网平台了!

    简介 使用过 Blynk 物联网平台的朋友应该都知道,Blynk 物联网平台是一个非常简单好用的物联网开发平台,几分钟之内就可以为你的物联网项目创建一个手机 App. 但是对于大部分中小学老师来说,上 ...

  7. 软件中的质量属性(一)

    开发高质量的软件是一件极具挑战的工作.其中一个重要的原因就是对于"质量"的定义各不相同,变化莫测. 杰拉尔德温伯格在他的四部曲巨作<质量软件管理>的第一卷第一章中就谈到 ...

  8. 关于用DELPHI开发服务器软件中的一些经验

    保存 评价 游戏规则 免费注册 资料下载 关于本站 问题分类 编程问题 非技术题 富翁列表 我的信息 提出问题 在线富翁 富翁日历 笔记列表 我的笔记 写作笔记 全文检索 <专家门诊> / ...

  9. linux sip 桥接,linux – 如何在FreeSWITCH pbx软件中关闭SIP调用的RTP缓冲?

    我想在freeswitch pbx软件中关闭SIP调用的缓冲. Freeswitch在缓冲区中保存来自客户端的RTP数据,并每隔20ms发送一次. 我希望freeswitch能够在没有保持的情况下通过 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之工厂方法模式(二):解决方案 I
  2. 克隆指定的分支:git clone -b 分支名仓库地址
  3. 一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义
  4. 定时器0工作方式2,定时1s
  5. linux下的精确wait
  6. 网页简单上传图片 imgareaselect插件
  7. 索尼申请“Pregius S”商标 或用于CMOS图像传感器
  8. 如何让你的JavaScript代码更加语义化
  9. java之关系运算符
  10. 推荐这5款Windows软件,一款比一款惊喜
  11. 应对雾霾,哪款口罩适合你?
  12. IXI数据预处理 + Linux + freesurfer
  13. [UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机
  14. Unity Shader 扇形进度条
  15. 相见恨晚的超实用网站
  16. OpenGL风车项目
  17. ACM1008玛雅历 剖析
  18. TPC/IP 协议头部说明
  19. 程序员小灰2017-2019年原创汇总
  20. linux进程系列(5)进程链与进程扇

热门文章

  1. Know more about Enqueue Deadlock Detection
  2. 为什么PHP能够受到大家追捧和喜爱,又为什么饱受嘲讽?
  3. ORACLE数据库事务隔离级别
  4. 程序设计 关键字解释
  5. 通用mapper版+SpringBoot+MyBatis框架+mysql数据库的整合
  6. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
  7. 【转】SQL SERVER 开窗函数简介
  8. UIView中常见的方法汇总
  9. 基于WebMatrix的轻量级Web开发系列课程
  10. 查看当前环境下内核导出了哪些符号