php程序员写bug,程序员的修炼-我们为什么会编写BUG

在最近的一周,我维护的业务系统出现了很多坏毛病,一周七天crash掉了4次,每次都需要都是因为一点很小的问题,触发了蝴蝶效应,导致整个系统全盘崩溃,于是产生除了叙述本篇的想法,当然这并不是为了掩盖我在Coding上的一些细节处理和职责疏忽,只是为了从根本的细节上去分析这些问题。

(一、)为什么会产生BUG

首先我们需要尝试理解一下什么Bug?

关于bug的解释

bug 是指任何计算机程序或硬件系统中的错误,故障或缺陷。错误会产生意外结果或导致系统意外运行

简单来说:bug就是程序出了问题,产生了意外的结果,没有按照预期的结果去运行。

产生Bug的原因有很多种:

开发者水平太低

不同的编译及运行环境

与需求方沟通不到位

马虎大意、考虑不周

放飞自我,Coding全靠自嗨

选择了错误的或者运行不稳定的第三方库

以上原因总结,主观和客观因素都会影响到Bug的产生,正如误差不可避免一般,我们应该对自己写出的代码进行测试、分析、"沟通".

(二、)如何尽量避免Bug

鉴于以上bug产出的原因,我们可以通过这些一些对策来避免Bug的产生,下面是一些常见原因分析和处理对策。

1.开发者水平太低

在进行系统的构建中,部分开发者可能通常因为开发经验过少,或者语言不熟悉,会编写错误的代码,然后未经过代码测试和审计,便进行提交和上线操作,导致了异常的引发

解决方案:

如果是语法错误,可通过一些ide的代码检测器,或者语法检查来检测代码可否正常运行.

如果是PHP等弱类型语言,可使用静态代码扫描工具来发现程序中明显的语法错误.

编写足够的测试用例,覆盖整个模块的语句

请求你的伙伴进行CodeReview(代码审计),来改善代码的质量和发现代码中的缺陷

2.不同的编译及运行环境

因为业务的拓展和服务支持,需要部署多个不同的运行环境中,如:转账系统,你在测试环境中转账了1000元给用户小明,小明却在生产环境中收到了这1000元,并成功进行提现,往往因为没有环境判断,导致了失误的操作!

解决方案:

1.在代码中多进行注释说明,标明哪些函数会在其他环境中操作和运行

2.加强环境逻辑判断

以下是我在使用的一些标注和说明,其他开发者或我本人再次阅览该代码时,就会得到一个清晰的运行结果.

/**

* 执行该函数时,会根据env环境进行处理,详细如下

* prod(生产环境):会启动队列对视频进行转码、截图、写入到生产数据库中操作.

* staging(预演环境):不会启动队列,但会写入staging数据库中

* test(测试环境):会启动队列对视频进行转码、截图、写入到测试数据库中操作.

*/

$video = $this->uploadVideo($file);

$queue = $this->videoQueue($video);

3.与需求方沟通不到位

这是经常程序员与产品对撕的一个很重要原因,TA想要A,而你却做出了B,于是你们产生了很大的争论

解决方案:

多进行沟通,需求进行反复确认,不要上手就进行编码,先进行分析。

通过PM系统,留存需求规划与变更记录,以便每一次业务更改,都得能与系统中的问题对上号.

4.马虎大意、考虑不周

编码时以为问题很小,修改代码,不走调试与测试流程,直接上线.

解决方案:

不要盲目过于自信,相信自己的主观判断,一定走测试流程,确保改动无误!(这是我之前经常犯的错,然后系统出了问题,我的fix commit从1变成了N....)

CodeReview(代码审计),这是一个最好的办法,当然需要耗费不少的人力,但是能最大的去降低缺陷和错误.

5.放飞自我,Coding全靠自嗨

解决方案:

这类朋友不适合做开发者,适合去做创造者!

6.选择了错误的或者运行不稳定的第三方库

有时候为了省略接入时间,往往会忽略掉一些大型库,因为业务的支持只用到了一小部分,所以我们有时候会去选择一些mini库,最后由于不稳定或方案不成熟,出现错误的运行结果

解决方案:

如果业务级别比较高的话,不建议采用冷门或者无人问津的mini库使用,因为出现问题的损失会更大.

进行反复测试,开发人员对核心代码进行阅览,确保正常无误.

自我组织编写或实现,但是学习和开发成本比较高,小型规模不建议采取.

(三、)多与代码进行"沟通"

“橡皮鸭调试法”是我在阅读《编写可读代码》一书中看到的一个技巧,我在一个人开发的时候会使用这个技巧,我认为是一个不错的选择.

4e5c77c3ac843bf0b74198fa32812152.png

(四、)总结

我们为什么会编写BUG,如果没有BUG?开发和测试不就失业了吗?当然这只是一句玩笑话。

在此引用知乎上一句很有意思的话.

8151e54fcad72a05aa261145e1d996e6.png

编码也亦如此,因为很多主观和客观的因素,导致程序执行了错误的逻辑,产生了不如预期的结果,作为一个合格的开发人员,我们应该尽力确保程序稳妥运行,减少失误和异常。

正如CZG提到的"你写的每一行代码,都是你的名片",我们每个人都义务去维护好这张名片,让其他人对这张名片充满敬畏之心,而不是"what shit code",诸君共勉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强人工智能和弱人工智能

来源:人机与认知实验室人工智能的一个比较流行的定义,也是该领域较早的定义,是由当时麻省理工学院的约翰麦卡锡在1956年的达特矛斯会议上提出的(对此有争议):人工智能就是要让机器的行为看起来就像是人所表…

张亚勤2020寄语哥伦比亚大学毕业生:引领未知时代

(哥伦比亚大学巴特勒图书馆)2020年5月18日,人工智能和数字视频的世界级科学家和企业家,美国艺术与科学院院士、百度前总裁、清华大学智能科学讲席教授张亚勤博士,在哥伦比亚大学工程学院的毕业典礼上发表了主题演讲。张亚勤说:“面…

科技部部长:基础研究是科技创新“总开关”

来源:中国新闻网中新社北京5月19日电 (记者 孙自法)“基础研究是科技创新的‘总开关’!”言及基础研究在中国科技发展、增强原始创新能力中的地位与作用,中国科学技术部部长王志刚这样概括道。国务院新闻办公室19日下午在北京举行加快建设创新…

从通用到专用,5G时代IP核的新故事

来源:半导体行业观察如同芯片在不断迭代,IP核也在不断进步。集成电路技术60年来基本遵循摩尔定律的演进规律。随着进入后摩尔时代,即两年一代技术更换的节奏开始放缓,设计和制造企业开始更加重视产品的多样化发展,而不…

连续信号与系统频域分析的matlab实现,实验十三 连续信号与系统频域分析的MATLB实现...

实验十三 连续信号与系统频域分析的MATLB实现 实验十三 连续信号与系统频域分析的 MATLAB 实现70实验十三 连续信号与系统频域分析的 MATLAB 实现一、实验目的 1. 掌握连续时间信号频谱特性的 MATLAB 分析方法;2.掌握连续系统的频率响应 MATLAB 分析方法方法。二、实…

[机器学习] Apriori算法

适用场合 Apriori算法包含两部分内容:1,发现频繁项集 2,挖掘关联规则。 通俗地解释一下,就是这个意思:1.发现哪些项目常常同时出现 2.挖掘这些常常出现的项目是否存在“如果A那么B”的关系。 举个例子:网店…

华为发布《自动驾驶网络解决方案白皮书》

来源:华为近日,全球分析师大会HAS 2020期间,华为面向全球发布《自动驾驶网络解决方案白皮书》,系统阐述未来网络架构、运维架构和其关键技术,通过网元、网络和云端的三层AI能力协同,使能网络走向极简超宽、…

linux服务器运维操作命令,Windows和Linux系统服务器运维基本操作指令

原标题:Windows和Linux系统服务器运维基本操作指令服务器总归是机械化设备,在运行过程中难免会出现一些问题,遇到这些问题怎么办?请运维人员代维修?即使请也会造成,运维人员维护不及时和成本太高的问题&…

百度大脑城市白皮书

来源 | 百度智能云(转载请注明来源)编辑 | 蒲蒲5月18日,百度智能云在大会上正式发布《百度城市大脑白皮书》。白皮书结合未来我国智慧城市发展重点,深入分析研究了我国智慧城市发展的背景和发展中的机遇,重点阐述了百度…

Python开发基础--- 进程间通信、进程池、协程

进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的。 进程队列queue 不同于线程queue,进程queue的生成是用mu…

linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件

一、方案:Linux中使用sed命令或awk命令修改常规配置文件二、步骤:1、假设有一个a.txt,内容如下:#!/bin/bashaabbbccc#ddd2、如果想要把里面的内容bbb23输出成bbb55,可以这样做:sed s/bbb23/bbb55/g a.txt说…

python数据分析笔记中panda(2)

1 将手机号码分开为运营商,地区和号码段 1 from pandas import read_csv;2 3 df read_csv("H:\\pythonCode\\4.6\\data.csv");4 5 6 #转换成字符数据 方便用slice7 df[tel] df[tel].astype(str);8 9 #字符的抽取:根据已知列数…

刘忠范院士:新型研发机构建设成了口号

来源:科学网作者 | 郑金武编辑 | 宗华排版 | 华园● 刘忠范认为,如果只是单纯地再建一两所研究机构,在机制、理念上与现有的高校和研究院所没有差别,那就是在“1000”的基础上再加“1”,对现有的科研格局不会带来任何改…

linux属性表示的文件,Linux基础入门:文件和目录属性的含义

比如 :[rootistester isTester]# lltotal 12drwxr-xr-x 2 root root 4096 May 21 17:58 21Day-rw-r-xr-- 1 root root 6 May 14 16:04 idoxu.ini-rw-r--r-- 1 root root 0 May 21 17:12 istester.ini-rw-r--r-- 1 root root 10 May 14 16:02 README.md解释&…

一线工程师如何看待《没了美国的EDA软件,我们就不能做芯片了》

来源:真视界这些天看了不少讲国内EDA情况的帖子,有客观的也有极其离谱的,作为一名从业十余年的芯片设计工程师,我以一线从业者的角度来谈谈我们在实际工作中的EDA软件使用情况究竟是怎样的吧。先回答个很常见的问题:没…

2015Cocos游戏开发大赛作品——人鱼塞壬

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 消失了一个月,干啥去了捏? 就是做这个游戏了(事实上 考试课设北京。。。) 游戏背…

柳叶刀发布陈薇团队新冠疫苗试验结果:安全,能诱导免疫反应

来源:腾讯新闻客户端自媒体论文称,研究显示,前述以腺病毒Ad5为载体的新冠疫苗,在给志愿者接种后28天时,显示出免疫原性和人体耐受性。在健康成年人中,对SARS-CoV-2的体液免疫反应,在接种疫苗后第…

UE4从4.15移植到4.16

如果是旧版本的工程需要移植到4.16,有几个地方需要修改: 假设RC是工程名,修改如下(三个CS文件) 类似的,插件也需要这样修改 转载于:https://www.cnblogs.com/AnKen/p/7365806.html

c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码

在Linux环境下用C语言编写线程创建。//file name: pthreadtext.c#include #include //线程头文件//pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败//在gcc编译的时候,附加要…

自动驾驶发展到了哪个阶段?七大应用场景走进现实

来源: 智车科技2020年初,新冠疫情突发,百度、京东、美团等在各地提供无人配送、无人清扫服务。在抗击疫情的过程中,自动驾驶商业化得到了很好的实践验证。当自动驾驶技术渐渐走入现实场景,那么我们不禁要问这项技术究竟…