对于程序员来说,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. 在Linux系统上查看Apache服务器的错误日志

    错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器.根据你 Web 服务器配置的不 ...

  2. tuning 03 Sizing the Share pool

    share pool : (组成) library cache: stores shared sql and pl/sql code (包含 statement text, parsed code, ...

  3. C++设计模式之建造者模式(二)

    3.省略指挥者Director的建造者模式 指挥者类Director在建造者模式中扮演很关键的数据.简单的Director类用于指导详细建造者怎样构建产品,它按一定次序调用Builder的buildP ...

  4. EEPlat的基于浏览器的在线开发技术

    EEPlat的开发内容主要包含配置开发和基于API的扩展开发两块内容. EEPlat的配置开发基于后台的配置环境.直接通过界面操作配置就可以. EEPlat的配置平台是用EEPlat自解释构建的.本身 ...

  5. Codeforces 193A. Cutting Figure

    看起来非常神,但仅仅有三种情况 -1 , 1 ,2..... A. Cutting Figure time limit per test 2 seconds memory limit per test ...

  6. 如何在ChemDraw 15.1 Pro中添加模板

    ChemDraw化学绘图工具为了方便用户的使用,特地开发了众多的各种类型模板.用户在绘制一些简单或复杂的化学结构式时,可以直接从ChemDraw模板库里直接调用使用,虽然ChemDraw模板非常的丰富 ...

  7. shell基础(二)

    echo命令 Shell 的 echo 指令是用于字符串的输出. #!/bin/sh read name #读取标准输入的行 echo "$name It is a test" e ...

  8. Python_selenium之获取页面上的全部邮箱

    Python_selenium之获取页面上的全部邮箱 一.思路拆分 获取网页(这里以百度的“联系我们”为例),网址http://home.baidu.com/contact.html 获取页面的全部内 ...

  9. DB水平切换要点

    分区健选择 数据应该怎样拆分,依照什么纬度来拆分 节点路由 应用程序写死/客户端(TDDL,cobar-client)/中间层(cobar-server) 固定分配/动态分配/混合 分片数据均衡 某些 ...

  10. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.3——排除任务

    问题: 你想要在构建进程当中排除指定的任务. 解决方案: 可以使用-x排除单个任务.编辑task graph排除多个任务. 讨论: Gradle的构建进程包含了许多任务的执行顺序.他们中的大多数都依赖 ...