`
hudeyong926
  • 浏览: 2035018 次
  • 来自: 武汉
社区版块
存档分类
最新评论

什么是BUG?

阅读更多

我知道你们都很忙。忙得连给代码写注释的时间都没有,哪有时间做总结呢?还是我来替大家做一些总结吧。我最近会找时间写一系列的短文,在email给你们的同时会发送到你们常去的JavaEye上。如果你抽空看看,对你和我们团队都有好处。今天我写了第一篇。

 

写给我的团队成员(一)—— 什么是BUG?

 

      什么是BUG?每个写过代码或者使用过软件的人似乎都知道它是什么。然而,我们的很多工作年限有限的开发人员总是简单认为:程序跑通了,自己测了N遍了就 很少有BUG了。这是个危险的观念,没有理解深刻这一点的人会在自己的进步过中走很多弯路。更会给产品和团队带来各种大大小小的危机。

 

      对抗BUG是我们程序员永恒的主题,要在这场战斗中获胜,首先要做到“知己知彼”——什么是BUG?

 

      现在,我们来一起把BUG分为以下几个种类,你在Coding的时候要随时随地的想到这些:

 

  • 最最普通的BUG。 我实在缺乏用语言来给这类BUG下定义的能力,因此你现在能够识别,这就是BUG的东西,应该可以归属于这一类。
  • 编译不通过。 你可以认为这是最简单的BUG,根本不需要特别考虑,如果编译不过,Eclipse会在设计时给你个红XX 来提示的。但是,在下面的情况中,你可能看不到红XX,但BUG依然存在。
  1. spring的xml。缺省的eclipse可不会在design time时给任何检查。你写错一个字母,都会让你无法运行。跟业务逻辑相关的依赖关系,更别指望eclipse替你找出来。
  2. jsp中引用的java代码。不用我解释了吧,大家可能都有体验。至少我目前还没找到完全可靠的jsp plugin 可以帮助 eclipse来随时随地找出jsp中的代码错误。(除非你把上千个jsp文件都关闭并重新打开一遍)。
  • 业务逻辑实现错误。 这就不需要过多赘述了。地球人都知道。
  • 缺乏必要的事务。 在99.9%的“开发时”,事务不是必须的。在仅挨着的两条insert语句执行的瞬间,出现系统失效的可能性微乎其微。然而,一旦进入了生产环境,用 “事务”来保持你要进行的这个action的完整性就显得非常重要了。当然,并不是所有的业务逻辑步骤都需要用事务来保护,况且让容器帮你你管理事务也是 一种懒惰但有效的做法,但与此同时自己去考虑一下“这里如果没有事务,我是否安全?“的问题,对你的进步更有好处。
  • 团队使用的基本库出错。 不要认为团队自己开发的基本类库是100%正确的,轻信不完善的API的思想是大量顽固BUG的藏身之处。团队自己生产的代码还在不断的完善和发展,毕竟 咱们积累的这些”精华“与外面OpenSource的东西(而他们同样有BUG)相比,还差懂得远呢。我丝毫不怀疑里面存在超过100个算法缺陷和200 个不安全的使用方式。因此,不要”拿起来就用“,而要”三思而后行“。
  • 性能陷阱。 为了尽快实现业务逻辑。我们在第一次编码的时候往往不先考虑性能问题。这个想法不算太错误,但这个想法不能太过分。特别是涉及到一些”性能敏感”的代码 段,比如我们产品中多处涉及到的Tcp Server的内核。这些部件的代码1天可能遭受几百万次的访问,瞬时绝对并发100是最正常的情况。因此0.1秒的性能损失,也会带来 100x0.1=10秒的性能损耗。10秒,足以使一个TCP Server达到实际“不可用”的严重程度!10行马虎的代码,可能毁掉客户对我们团队辛苦生产的100万代码的信任。切记!切记!
  • 安全隐患。 某些安全隐患在我们刚开始写实验性的代码时往往可以忽略,但绝不能忘记。你必须在这个产品进入到下一阶段的时候加上必要的安全检查代码和与安全相关的逻辑验证代码。回忆一下,你是否忽略了下面的工作:
  1. http session检查。 尽管我们可以用框架来保证这一点。但你还是要检视一下,是否在某些功能的实现上,你确实忘记它了。
  2. 参数类型校验。 当你把一个'a'传递到servlet用Internet.parse()来处理的时候,你是否考虑了可能出现的异常情况。等等此类。
  3. NullException。 特别注意,千万不要让NullException出现在jsp中,否则你很难在系统部署后排查错误。在你第一次编写jsp代码时,你就必须考虑你所使用的对象或者属性是否可能为Null。
  4. Anti-flood。 最容易被初级程序员忽略的要点之一。因为这个bug永远不会出现在你的eclipse开发运行环境里。也往往被功能测试组的人忽略。但一旦存在这个隐患,一个最菜的Hacker用最普通的teardrop也会让你tear drop。
  • 线程安全。 永远不要忘记,你的代码需要在一个多线程的环境中运行,随时随地都有可能出现并发的情况。你的产生的临时文件名是否用uuid来避免重名了?你的静态(或单态)变量是否线程安全。你是否忘记将spring里定义的bean设置为scope=prototype?
  • 忘记删除临时文件。 在上传文件、生成验证图片、生成缩略图的时候,你都可能用到临时文件。你是否在使用完毕后及时的删除了它?你是否考虑过在发生异常后,仍然安全的删除了这 个文件?特别需要指出的是,我们在编码阶段的测试时,很难发现遗漏临时文件清理的工作。单在系统上线运行后,大量滞留在目录下的过期临时文件将用光客户的 服务器磁盘空间,降低系统IO的性能。
  • 极不友好的UI操作。 极不友好的UI操作同样是严重的BUG。比如:
  1. 当用户提交表单的时候可能填写了错误格式的信息,而你的程序再提示错误,重新显示表单的时候清除了用户已经填写的数据。这对你的软件的使用者来说是极其恼火的体验,对于创造这个代码的您来说则是一种耻辱。
  2. 另一种“极不友好的UI操作“可能发生在这种情况——你必须跟测试人员解释——他体验到这次系统出错的原因是他(测试人员)操作的步骤或顺序不正 确。天那,这是噩梦,不仅是用户的噩梦,也是你的噩梦。如果你坚持你的做法没错,我将决定在系统上线后,把你的手机和家里的电话号码做为HELP放在你创 造的界面的显著位置呈现给使用它的80万用户。
分享到:
评论

相关推荐

    一些bug的知识集

    1. **什么是Bug?** Bug通常指软件中的编程错误,它们可能是由于逻辑错误、语法错误或设计缺陷导致的。当用户执行程序时遇到不正常的行为,如程序崩溃、数据丢失或显示错误的结果,这些都可能是Bug的表现。 2. **...

    tip之bug?

    tip之bug 帐号对应信息显示出错

    VC2005_WinCE的Bug?

    标题 "VC2005_WinCE的Bug?" 暗示了可能在使用Visual C++ 2005开发Windows CE应用程序时遇到了问题。这是一个常见的开发者遇到的技术挑战,尤其是在嵌入式系统开发中。接下来,我们将深入探讨可能的问题、原因以及...

    Bug发现提交报告

    - 明确写出在正确执行操作后,预期应该看到的结果是什么。这有助于开发人员了解期望的功能行为。 - 同时,指出实际出现的结果,这样可以更直观地展现Bug的影响。 4. **Bug发现人的身份**: - 包含Bug发现人的...

    大家有没有发现VS2010——MFC的对话框有个BUG?

    大家有没有发现VS2010——MFC的对话框有个BUG?就是当对话框失去焦点后,外框的颜色没有变灰!

    bugfree,bug管理

    BugFree是一款开源的缺陷跟踪系统,专为程序代码的bug管理设计,旨在简化软件开发和测试过程中的问题追踪。在软件开发中,bug是不可避免的,BugFree提供了一个高效的平台来记录、跟踪、修复这些问题,确保项目的顺利...

    [测试开发技术] 面试必问:如何快速定位BUG?

    在软件开发领域,BUG定位是一项必不可少的技能。在面试中,如何快速准确地定位BUG,不仅能够体现一个测试人员的专业能力,还能直接影响到开发团队的工作效率和产品的质量。因此,掌握一些BUG定位技巧及策略显得尤为...

    缺陷管理(软件测试与度量).ppt

    一、什么是Bug? Bug是软件产品开发或维护过程中所存在的错误、毛病等各种问题。 IEEE 1983 of IEEE Standard 729 中对软件缺陷下了一个标准的定义:软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种...

    bugfree bugfree bugfree bugfree bugfree

    bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree

    BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载

    BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档软件开发文技术档下载BUG报告?提示与技巧.zip程序开发文档...

    程序员新人怎样在复杂代码中找bug?

    Mentor说先从找code base中bug开始。但是我感觉我们的codebase好复杂,这几天突然没什么进展。uml之类的也画了不少。想问问前辈们有什么建议?  update:  感谢各位分享自己的经验。这段时间略有进展,来说说...

    Bug报告模板.docx

    Bug 报告模板 在软件测试和质量保证过程中,_bug 报告模板是一种非常重要的文档工具。它用于记录和追踪软件中的缺陷和错误,以便在后续的开发和测试中进行修复和优化。本文将对 Bug 报告模板的主要组成部分进行详细...

    bugfree2.0软件测试bug管理工具

    BugFree 2.0 是一款专为软件测试而设计的开源Bug管理工具,它提供了高效、易用且灵活的环境来跟踪和管理软件开发过程中的缺陷。这款工具旨在帮助开发团队更好地协调工作,确保产品质量,减少错误并提高整体开发效率...

    bug定义和返工率计算统计方法

    "bug 定义和返工率计算统计方法" 本资源摘要信息主要介绍了 bug 的定义、返工率计算统计方法以及与之相关的质量提高方案。 首先,文档对 bug 的定义进行了详细的描述。bug 定义是指在软件开发过程中出现的错误或...

    版本验收与放行标准,主要明确了软件测试中对BUG等级的制定与分析

    * 若该版本发现的 BUG 按照测试 BUG 分级的相关规定折算后,大于 20 个标准 BUG 值,则版本不准放行。 * 若该版本发现的 BUG 小于 20 个标准 BUG 值,但测试认为其中部分问题会对现场造成影响较大,则测试人可以判定...

    TFS Bug管理使用教程

    **TFS Bug 管理使用教程** 团队项目中的Bug管理是软件开发过程中的关键环节,确保产品质量和项目进度。微软的TFS(Team Foundation Server)提供了强大的Bug管理功能,与Visual Studio(VS)深度集成,同时支持Java...

    软件测试bug统计分析图表

    而“软件测试bug统计分析图表”作为软件测试中的重要工具,扮演着至关重要的角色。本文将深入探讨这一主题,从多个角度解析其重要性、作用以及如何通过数据分析提升软件测试效率。 ### 一、软件测试与bug统计 软件...

    BugFree3.0.4导出BUG操作步骤

    BugFree是一个开源的缺陷跟踪系统,它允许项目团队对软件开发中的错误(bug)进行记录、跟踪和管理。BugFree3.0.4是BugFree的一个版本,导出BUG的操作步骤通常涉及到以下知识点: 1. BugFree系统环境配置:BugFree...

Global site tag (gtag.js) - Google Analytics