首页 > 其他分享 >随想录(软件中的bug)

随想录(软件中的bug)

时间:2022-11-23 11:35:29浏览次数:55  
标签:随想录 故障 内存 解决 软件 bug 复现


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

  

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

 

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

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

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

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

        b)故障是否必现;

        c)有没有前提配置;

        d)错误号是什么;

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

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

 

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

 

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

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

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

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

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

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

 

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

 

 

 

标签:随想录,故障,内存,解决,软件,bug,复现
From: https://blog.51cto.com/feixiaoxing/5880704

相关文章

  • 随想录(锁的来由和使用)
       对于开发系统级别软件的朋友来说,无论你是主动的还是被动的,锁的应用都是少不了的。很多人用锁,可是却未必知道锁的前世今生,什么时候用锁,什么时候不用锁?该用什么样的锁?......
  • 随想录(编写用户侧定时器)
       定时器是我们在平时开发中经常使用到的工具,特别是在协议的编写上更是必不可少的组成部分。虽然系统本身给我们提供了定时器,但是有的时候,我们也想自己编写一个粗粒度......
  • 随想录(为什么循环队列具有先天的并行性)
       循环队列是很多人喜欢用的一种数据结构。本着先来先服务的特性,循环队列是一种十分简单、健壮的数据结构。不像链表、二叉树,如果使用不慎,就会造成很大的麻烦,但是在循......
  • 随想录(linux下的pv操作)
         关于pv操作部分的内容,其实算不上什么新的东西。但是它对于我们理解信号量、消息处理部分的工作还是有很大帮助的。之前我们给出了一个win32的处理方案,但是实现的......
  • 随想录(写给那些学校不是985、211的同学们)
       每年的6、7月份都是一年一度的毕业季。按照某些新闻机构的统计数字来说,现在每一年毕业的人数达到了600万之多。然而随着社会经济的放缓、贫富差距的拉开,找工作变得越......
  • 随想录(用memmove函数代替strncpy函数)
        有过C语言编程的朋友应该都有过指针越界的困扰。不管越界的地方是全局地址、还是局部地址,查起来都是非常麻烦,原因大多时候都来自于自己对char数组类型的误用。很多......
  • 随想录(编写简单资源管理代码)
      不管编写什么软件,我们都会涉及到模块的编写。说是模块,其实就是管理一片资源,这些资源的概念很广,可以是内存、锁、socket、字符串、文件、空间大小等等。所以不管是什么......
  • 随想录(设计软件模块的接口)
       开发软件是一件复杂而且辛苦的工作,不同的模块之间的逻辑需要考虑,应用层与底层的关系也需要考虑。模块之间的关系处理不好,就会给软件的编写质量带来影响。当然不管软......
  • 软件性能计时
      在单元测试中,有一部分的内容就是计算各个函数计算时间,这样可以知道性能瓶颈在哪里。所以,如何对软件进行性能计时一直是我关注的一个话题。就我目前的认知来说,不同的环......
  • 随想录(矩阵计算的几种方法)
    【声明:版权所有,欢迎转载,请勿用于商业用途。】   要进行图像处理,矩阵运算是少不了的。不管是加减乘除,还是旋转、求逆、矩阵分解,都需要lib来好好支持。下面,主要就说一......