对于程序员来说,bug很讨厌。每天重复着写代码、找bug、修改bug的动作。按理说互联网巨头的产品,bug应该比较少。但是实际上,无论是用百度、天猫、谷歌等产品,经常都会出现这些低级的bug,让人很火大。这不,有个网友就在网上吐槽:

这个网友称,腾讯QQ空间好友的动态里,经常没办法显示好友的备注名称。安卓客户端的同个页面,可以打卡很多次,这样导致的后果就是,返回的时候要按很多次的返回键。不仅如此,天猫登录界面在firefox下的兼容性很差。例如说,明明没有显示出来验证码,却要求登录用户输入验证码。

还有在google云端硬盘上传文件夹,结果是乱码。

关于网友提出的这个问题,大家深有感触。但是很多网友还是觉得,程序员混口饭吃不容易,莫要再截图打兄弟们的脸了。

网友一:

巨头的系统都很庞大,产品组的同事每提一个bug,程序员要先去重现bug重现,然后看它跑的哪几行代码,再去改代码。这时本地开发算是完成,也通过测试,可以提交到团队的测试环境了。但是有时候,好几个bug背后的代码相互依赖,可能你的同事 merge 的时候把你的代码冲掉了,或者在中间插入了其他的代码,然后又要想办法重新改,或者说产生了新bug。

网友二:毕竟互联网才发展了这么些年,还很不完善。

网友三:没有百分百的测试覆盖率,只要是人写出来的程序,做出来的产品,就会有bug。无须大惊小怪。

网友四:无论什么公司的产品都不可避免有一些bug,互联网巨头也无法例外而且还有可能更多。

网友五:有人的地方,就有江湖,和BUG。

看来大家对待bug,态度还是很宽容的。其实也是,再好的程序,可能也会出现代码,更何况互联网巨头这些拥有庞大系统的代码库。下面,有个网友分享了一个,据说是最大的bug。

Azure底层fabric有过这么一段code,目的是在做创建一张新的证书并设置有效期为一年后这件事。

那么要先获得一年后的日期,本来用DateTime.Today().Add(new TimeSpan(365,0,0,0))就可以了(编辑:经提醒,AddYear(1)是最简单而且更精确的)。写代码的哥们脑洞了下写成new DateTime(today.Year+1,today.Month,today.Day)。经过各种测试运行一直都没问题。直到2012年2月29日,ArgumentOutOfRangeException。后果是整个Azure挂了十多个小时吧。

虽然说bug不可避免,但是写代码时,最好还是尽量减少bug,下面分享几个方法。

1.写代码时不要分心,缺陷代码头号敌人就是分心。有些时候,一个Twitter或GTalk都会将你的思路打断,这时候你需要集中注意力。

2.集成测试或者单元测试模块,写代码一定要遵循测试、代码、测试的原理。

3.如果代码库已经测试好,是很多开发者都使用过的,经过很多次测试的,而且你又打算实现这个代码库同样功能,这时候,你可以尽情的使用这些代码。

4.编译器的警告,千万不能忽视。通常情况下,编译器很容易将代码中存在的bug识别出来。对代码进行调试之前,最好是使用最高级别的警告,来编译代码,看看有没有明显的错误存在。

5.日志:日志工具安装很方便,它可以把日志分为info、warning、error三大类型。而通过这些日志,你很快就可以追踪到到底发生什么。

6.代码审查:提交代码时,最好让别人审查一下你的代码,以此看看有没有错误出现。

其实出现bug,算是很正常的一件事,程序员相信都不敢很绝对的说自己写的代码不会出错,当然,谷歌技术大牛Jeff Dean除外,因为他号称自己的代码从来不会出错。但是作为程序员,还是尽量避免出现bug。

学编程技术,就到W3Cschool,如果你喜欢我们的文章,可以点击右上角关注我们;如果你想看到更多IT界的资讯,可以加我们的公众号。

公众号:w3cschoolcn

腾讯天猫经常出现这些低级的bug!的更多相关文章

  1. iOS之利用腾讯Bugly程序调试,测试代码bug、卡顿等情况

    1.自己先写一个 Demo 演示一下利用bugly测试崩溃的具体情况. 在ViewController里面实现崩溃代码如下:  运行后 毫无疑问程序报错了! 2.使用到第三方的框架Bugly,官方下载 ...

  2. 复盘价值1000万的腾讯云硬盘固件"BUG"

    摘要: 除了吃瓜,还是得吸取教训啊同学们! 这次,我从纯技术角度分析腾讯云与前沿数控的磁盘数据丢失事件,不站队. 硬盘门 这里说的硬盘门不是10年前陈老师的那一次,而聊的是最近"腾讯云&qu ...

  3. 2021S软件工程——结对项目第三阶段

    2021S软件工程--结对项目第三阶段 2021春季软件工程(罗杰 任健) 项目地址 1020 1169 1 实践反思 1.1 问题分析 两人习惯不一致 没有具体制定时间节点 写完代码才开始" ...

  4. 谈谈DOMContentLoaded:Javascript中的domReady引入机制

    一.扯淡部分 回想当年,在摆脱写页面时js全靠从各种DEMO中copy出来然后东拼西凑的幽暗岁月之后,毅然决然地打算放弃这种处处“拿来主义”的不正之风,然后开启通往高大上的“前端攻城狮”的飞升之旅.想 ...

  5. 初级Bug率,随时受不了

    一听到初级Bug这个名字,很多开发工程师都会觉得很头痛,还有那个“初级Bug率”,让人随时受不了. 初级Bug这个概念,在多数缺陷跟踪工具中,是不存在的,可以说是淘宝研发部的特色.初级Bug对应Bug ...

  6. 代码规范、代码复审、PSP

    作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作  一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...

  7. python标准库xml.etree.ElementTree的bug

    使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...

  8. JDK中的并发bug?

    最近研究Java并发,无意中在JDK8的System.console()方法的源码中翻到了下面的一段代码: private static volatile Console cons = null; / ...

  9. 如何进行shell脚本正确性测试

    在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...

随机推荐

  1. pl/sql 实例精解 05

    本章主要讨论 case 语句 1: case [SELECTOR] 2: when expression 1 then statement 1; 3: when expression 2 then s ...

  2. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)

    前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...

  3. 如何用MathType编辑这三个符号

    MathType是一款专门的公式编辑器,用来编辑数学物理等公式,很多期刊杂志的排版都会用到它.用MathType编辑公式的时候,完全不用考虑学习和上手的过程,打开就可以编辑出你的公式,所以这个工具对于 ...

  4. 【转】node.exe调试JavaScript代码

    node.exe调试JavaScript代码 目的: Console.log可以打印一些信息,光有log还不够,当程序出现问题时通过log可以定位到错误位置,但是当我们想查看错误现场的变量时,log就 ...

  5. Camlistore名词解释

    Terminology 名词解释 To stay sane and communicate effectively we try hard to use consistent terminology ...

  6. 编写高质量代码--改善python程序的建议(四)

    原文发表在我的博客主页,转载请注明出处! 建议十八:有节制的使用from...import语句 python提供了三种方式引入外部模块: import语句 from...import... __imp ...

  7. 160719、Spring + Dubbo + zookeeper (linux) 框架搭建

    转载一篇博客,写得不错(至少我参考一下搭建成功了) 转载地址:http://my.oschina.net/wangt10/blog/522799 dubbo简介 节点角色说明: Provider: 暴 ...

  8. Java获取当前服务器IP

    package hope.ipaddress.demo; import java.net.InetAddress; import java.net.NetworkInterface; import j ...

  9. JavaScript -获取屏窗与视窗、文档宽高

    实例:1920*1080的电脑屏幕 1.获取窗口中的文档显示区域宽高 clientw = window.innerWidth; //1920(包含滚动条) clienth = window.inner ...

  10. Android异步处理之AsyncTaskLoader简单使用

    简介 不管是在Android应用开发还是Android平台开发中,异步处理通常是最基本的coding要求.如果你还在主线程中写一些数据库,网络请求,读写本地文件等操作的话那说明你还不是一个合格的And ...