人工智能

如何写出一个让人很难发现的Bug?

字号+作者:益华科技来源:数据库2025-11-04 06:31:38我要评论(0)

程序员的日常三件事:写bug、改bug、背锅。连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug。那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢?1 -新手开发+新手测试

程序员的何写日常三件事:写bug、改bug、让人背锅。何写连程序员都自我调侃道,让人为什么每天都在加班?何写因为我的眼里常含bug。

那么如何写出一个让(坑)人(王)很(之)难(王)发现的让人bug呢?

1 -新手开发+新手测试=无敌巨坑

有一天凌晨,某组的何写程序员们被电话轰炸醒了。用户纷纷投诉自己的让人业务数据离奇消失了!

大伙排查半天,原来是何写新来的小王埋的坑。他三个月前开发的让人定时任务出bug了!

那时刚来的小王刷刷地将代码写完后,手把手教新来的何写测试实习妹子怎样测试这块代码,估计是让人妹子还没搞清楚里面的逻辑时便稀里糊涂地将代码上线了。

万万没想到这bug隐藏这么久,何写由于错误的让人逻辑导致错误的数据,错误的何写数据导致任务死循环执行,当执行的时间过长,到某个点时,亿华云计算系统如汽水开瓶般“砰”地崩了。

业务不熟导致逻辑理解有问题,是大部分新人都会存在的问题。此时***安排个有经验的测试“调教”下,降低bug发生率。

2 -不考虑系统拓展性,怎么方便怎么写

史上最出名的“千年虫”bug令全世界恐慌,甚至传出“世界末日”的谣言。

原因竟让人啼笑皆非:当时的程序员没考虑到软件会被使用至21世纪,为了节省内存省略掉代表年份的前两位数字”19”,或者默认前两位为”19”。

“千年虫“千年一遇,可日常关于时间的低级bug经常发生,而且通常等到一段时间后的某个特定时间点才暴露出来,让人防不胜防。

例如正则只匹配了“16”,“17”年,等到18年零点到来问题才暴露。

关于时间的bug非常多,大到闰年、夏令时、节假日、时区等,高防服务器小到时间格式,每年都会碰到不小心遗漏的时间bug,所以很多公司对时间的通用测试用例就有许多条。

除了时间问题,程序员如果只考虑本次需求或者单个系统时,常常将字段设置不正确,后续业务拓展或者和别的系统交互时发现字段不够用,只能修改字段长度了。

3 -不考虑上下游系统,招呼不打便随意改接口

曾遇到A系统上线后,大伙回归A系统正常运行后,正乐滋滋地松一口气之际,本来好端端运行的B系统突然坏了,B组人排查半天发现,原来是A提供的接口改了,B系统不兼容新接口。

大概程序员走过最长的路便是背锅之路了。

2005 年 12 月 8 日瑞穗证券的交易员因手误输入错的股价,2 分钟后这人试图通过交易软件撤销这笔卖单。可是连续输入 3 次撤单指令,都被东证的交易系统拒绝了。亿华云这次事故造成400 亿日元的损失。

后来查明是交易系统出 bug了,程序员在 2000 年某次程序修改时不小心埋进去的。

所以很多公司会严格要求在程序修改后必须经过严格的回归测试,来验证对其他业务流程有没有影响。 

4 -复制、粘贴,我闭着眼,有bug看不见,debug了没?

已发布已验证的代码,是安全可靠的,是可以拿来即用的,无需质疑,不用浪费时间去调试,这是程序员的惯性思维。

被记入史上bug王之一的阿丽亚娜5型自毁事件就是因代码复用而导致的。1996年6月4日,阿丽亚娜5型运载火箭发射点火后,由于bug,在发射39秒后火箭发生偏轨,最终被迫引爆自毁。

这件事情发生的原因是因为5型火箭是基于4型火箭开发的,发射系统的代码程序员也直接照搬4型的。

该段代码在4型火箭中被反复验证,但在5型却没有进行验证。实际上4型的飞行条件和5型的飞行条件截然不同,最终导致事故发生,此次事故损失3.7亿美元。

有测试工程师说,最害怕开发说这次没啥改动,跟线上某功能差不多。这时候反而要细心验证代码的正确性。

这是因为“安全心理”作祟:程序员直觉已信任上线的代码是正确的,便直接复制过来用,不会再花时间自测,因为这是“对的”,“毋庸置疑”的。

此时测试人员不可轻易听信开发的话,更要严谨对待,毕竟程序员的三大谎言有:没问题的;只改了两行代码;和线上一样。 

程序员花30分钟写程序,花2小时改bug。bug,子子孙孙无穷尽也。所以在面对测试人员的质疑时,程序员们一定要保持镇定,该甩锅时速速甩掉:这是历史问题,我没动过;刚刚在我这是好的,你环境配错了;你重启试试……

***一招是两个字:我改!

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 男生的电脑拍摄教程(轻松掌握拍摄技巧,打造个性化照片)

    男生的电脑拍摄教程(轻松掌握拍摄技巧,打造个性化照片)

    2025-11-04 06:03

  • 前面两个经验我们准备好了安装Ubuntu15.04所需的工具和文件。一是下载好了Ubuntu15.04的系统镜像,需要注意的是通过官网下载,要到其英文官方网站上去下载最新的,假如是中文官网的话,可能内容较旧。二是我们通过Virtualbox新建好了一个虚拟机,我们可以将其理解成准备好了一台PC机。下面我们正式开始系统安装吧。软件名称:Ubuntu 14.04 官方正式版软件大小:752MB更新时间:2014-05-071、点击“Start”,打开虚拟机,启动系统安装。2、我们选择“Install Ubuntu”可以直接开始安装,也可以先试用,选择“Try Ubuntu”,然后再决定是否正式安装。此处,我们直接选择“Install Ubuntu”。3、此处我们需要注意的是:在安装Ubuntu桌面系统期间,最好断开网络,不然它会安装过程中连接互联网进行一些更新,这样会安装很慢。因此,我们断开网络。方法:在虚拟机右下角的网络图标上,选择断开。4、断开后,过一会,is connected to Internet 前面会变一个X字,表示网络已经断开。5、点击“Continue”继续,进入安装类型的选择,我们选择默认,“擦除磁盘并安装系统”,点击“Install Now”。6、需要确认,我们点击Continue继续。7、进入区域选择,我们选择Shanghai,或者直接输入Shanghai也是可以的。点击Continue。8、进入键盘布局配置,我们默认,继续Continue。9、进入用户配置。设置用户名和密码。点击Continue。10、此时就会进入安装界面了,我们可以来杯coffee了。11、安装成功。12、点击”Restart Now“,重启进入安装好的Ubuntu桌面系统。输入刚刚设置的密码,登录系统。

    前面两个经验我们准备好了安装Ubuntu15.04所需的工具和文件。一是下载好了Ubuntu15.04的系统镜像,需要注意的是通过官网下载,要到其英文官方网站上去下载最新的,假如是中文官网的话,可能内容较旧。二是我们通过Virtualbox新建好了一个虚拟机,我们可以将其理解成准备好了一台PC机。下面我们正式开始系统安装吧。软件名称:Ubuntu 14.04 官方正式版软件大小:752MB更新时间:2014-05-071、点击“Start”,打开虚拟机,启动系统安装。2、我们选择“Install Ubuntu”可以直接开始安装,也可以先试用,选择“Try Ubuntu”,然后再决定是否正式安装。此处,我们直接选择“Install Ubuntu”。3、此处我们需要注意的是:在安装Ubuntu桌面系统期间,最好断开网络,不然它会安装过程中连接互联网进行一些更新,这样会安装很慢。因此,我们断开网络。方法:在虚拟机右下角的网络图标上,选择断开。4、断开后,过一会,is connected to Internet 前面会变一个X字,表示网络已经断开。5、点击“Continue”继续,进入安装类型的选择,我们选择默认,“擦除磁盘并安装系统”,点击“Install Now”。6、需要确认,我们点击Continue继续。7、进入区域选择,我们选择Shanghai,或者直接输入Shanghai也是可以的。点击Continue。8、进入键盘布局配置,我们默认,继续Continue。9、进入用户配置。设置用户名和密码。点击Continue。10、此时就会进入安装界面了,我们可以来杯coffee了。11、安装成功。12、点击”Restart Now“,重启进入安装好的Ubuntu桌面系统。输入刚刚设置的密码,登录系统。

    2025-11-04 04:56

  • ubuntu无法解析亚马逊的DNS解决方法 编辑/etc/resolv.conf文件。 将 nameserver改为 8.8.8.8 或者8.8.4.4 再重启网络就解决问题。 /etc/init.d/networking restart

    ubuntu无法解析亚马逊的DNS解决方法 编辑/etc/resolv.conf文件。 将 nameserver改为 8.8.8.8 或者8.8.4.4 再重启网络就解决问题。 /etc/init.d/networking restart

    2025-11-04 04:27

  • 电脑桌面错误频发(解决电脑桌面错误,轻松提高工作效率)

    电脑桌面错误频发(解决电脑桌面错误,轻松提高工作效率)

    2025-11-04 04:26

网友点评
精彩导读
但是配置了,我的老是出现Error code 1: File not found错误,经过探索,tftpd-hpa 是一个功能增强的TFTP服务器。它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统1、sudo apt-get install tftp-hpa tftpd-hpa xinetd2、建立配置文件sudo vi /etc/xinetd.d/tftp新建文件tftptftp内容:复制代码代码如下: service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot -c per_source = 11 cps = 100 2 }注意:第九行中server_args = -s /tftpboot -c-c参数是允许上传用的,参数/tftpboot则是你的tftp目录,修改成你的目录即可,但是笔者建议在根目录下,方便3:修改配置文件/etc/default/tftpd-hpa1 sudo vim /etc/default/tftpd-hpa修改为:1 # /etc/default/tftpd-hpa2 TFTP_USERNAME=tftp3 TFTP_DIRECTORY=/tftpboot  //改成你想要的那个tftpboot4 TFTP_ADDRESS=0.0.0.0:695 TFTP_OPTIONS=-l -c -s //这里是选项4:在根目录下新建tftpboot目录,并修改权限1 mkdir /tftpboot2 sudo chmod 777 -R /tftpboot5:在/tftpboot中新建一个测试文件test1 touch test6:【重要】重启服务,修改配置文件的任何地方都要重启服务1 sudo /etc/init.d/xinetd reload2 sudo /etc/init.d/xinetd restart7:测试服务tftp是否启动netstat -a|grep tftp显示 :udp 0 0 *:tftp *:*则启动服务了8:测试tftp进入另一个目录【不是/tftpboot目录,比如用户jyg目录】cd /home/jyg测试如图:9:出现错误:【错误】Error code 0: Permission denied,是因为tftpboot文件夹没有权限,或者是要上传和下载的文件没有权限。【解决】修改权限sudo chmod 777 -R /tftpboot【错误】Error code 1: File not found,原因1:指定的文件不存在;原因2:tftpd启动参数中没有指定-c选项;原因3:目录有问题,因为安装的时候默认的tftp目录是【/var/lib/tftpboot】,您可以把test文件放在这个目录中重新测试一下,假如正确说明猜想是正确的。【解决】原因1和原因2都好解决,这里只解决原因3:重启服务或者重启系统

但是配置了,我的老是出现Error code 1: File not found错误,经过探索,tftpd-hpa 是一个功能增强的TFTP服务器。它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统1、sudo apt-get install tftp-hpa tftpd-hpa xinetd2、建立配置文件sudo vi /etc/xinetd.d/tftp新建文件tftptftp内容:复制代码代码如下: service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot -c per_source = 11 cps = 100 2 }注意:第九行中server_args = -s /tftpboot -c-c参数是允许上传用的,参数/tftpboot则是你的tftp目录,修改成你的目录即可,但是笔者建议在根目录下,方便3:修改配置文件/etc/default/tftpd-hpa1 sudo vim /etc/default/tftpd-hpa修改为:1 # /etc/default/tftpd-hpa2 TFTP_USERNAME=tftp3 TFTP_DIRECTORY=/tftpboot //改成你想要的那个tftpboot4 TFTP_ADDRESS=0.0.0.0:695 TFTP_OPTIONS=-l -c -s //这里是选项4:在根目录下新建tftpboot目录,并修改权限1 mkdir /tftpboot2 sudo chmod 777 -R /tftpboot5:在/tftpboot中新建一个测试文件test1 touch test6:【重要】重启服务,修改配置文件的任何地方都要重启服务1 sudo /etc/init.d/xinetd reload2 sudo /etc/init.d/xinetd restart7:测试服务tftp是否启动netstat -a|grep tftp显示 :udp 0 0 *:tftp *:*则启动服务了8:测试tftp进入另一个目录【不是/tftpboot目录,比如用户jyg目录】cd /home/jyg测试如图:9:出现错误:【错误】Error code 0: Permission denied,是因为tftpboot文件夹没有权限,或者是要上传和下载的文件没有权限。【解决】修改权限sudo chmod 777 -R /tftpboot【错误】Error code 1: File not found,原因1:指定的文件不存在;原因2:tftpd启动参数中没有指定-c选项;原因3:目录有问题,因为安装的时候默认的tftp目录是【/var/lib/tftpboot】,您可以把test文件放在这个目录中重新测试一下,假如正确说明猜想是正确的。【解决】原因1和原因2都好解决,这里只解决原因3:重启服务或者重启系统

热门资讯