`
neora
  • 浏览: 183812 次
  • 性别: Icon_minigender_1
  • 来自: 墨尔本
文章分类
社区版块
存档分类
最新评论

写给我的团队成员(一)——什么是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万用户。

 

......

 

儿子刚刚给我倒了杯咖啡端倒了书房里,从味道上判断,他在厨房里误把味精当白糖给我放了很多。但无论如何他是在讨好我去陪他玩了。那么,这次就写到这里吧。

 

分享到:
评论
6 楼 linxizeng 2008-09-17  
neora 写道
gurudk 写道
通过规范和样例这些客观的东西,比口头这样说教好。制定检查表,并培训,每开发完一个模块要求他们按照检查表进行自查。


不错的建议,谢谢。


规范文档有了
样例模板也有了
也培训了,也制定了检查表了...
可是
交期到了
大家开始加班了
没时间检查了
src开始变味了
bug慢慢多了
咋办?
5 楼 neora 2008-09-16  
gurudk 写道
通过规范和样例这些客观的东西,比口头这样说教好。制定检查表,并培训,每开发完一个模块要求他们按照检查表进行自查。


不错的建议,谢谢。
4 楼 gurudk 2008-09-16  
通过规范和样例这些客观的东西,比口头这样说教好。制定检查表,并培训,每开发完一个模块要求他们按照检查表进行自查。
3 楼 neora 2008-09-16  
linxizeng 写道
继续关注....

写道
javadoc 写描述错了或不清楚算不算bug?



写描述错了?! X!超级大BUG,而且这个Bug会生小bug的,还会害别人浪费无穷时间。
2 楼 linxizeng 2008-09-16  
继续关注....

写道
javadoc 写描述错了或不清楚算不算bug?

1 楼 neora 2008-09-16  
还有哪些我们忽略的BUG类型?欢迎Javaeyer补充。

相关推荐

    vs2008视频教程13:团队协作开发利器——如何提高团队开发效率

    团队成员可以利用TFS进行代码签入/签出,确保只有一个开发人员在任何时候修改同一段代码,从而避免了冲突的可能性。 其次,TFS还提供了工作项跟踪功能。开发团队可以通过创建、分配和跟踪工作项(如任务、缺陷和...

    bugfree管理工具

    4. **责任分配**:可以指派bug给特定的团队成员处理,明确责任归属,提高协作效率。 5. **报告和统计**:BugFree提供各种报表和统计功能,帮助管理层了解项目的健康状况,以及团队的工作绩效。 从压缩包中的文件名...

    中文版bug系统下载 bug反馈系统

    4. **状态跟踪**:系统会记录每个Bug的状态变化,如新建、待处理、已分配、正在处理、已修复和已关闭等,让团队成员随时了解Bug的进展。 5. **优先级和严重性设置**:根据问题的紧急程度和影响范围,可以设定不同的...

    Computer Bug计算机Bug的由来

    团队成员小心翼翼地取出了这只飞蛾,并将其贴在了当天的工作日志上,旁边写着:“First actual case of bug being found”(第一次真实发生的bug案例)。 这个事件不仅解决了当时的技术问题,更重要的是它创造了一...

    bugfree用户手册

    本用户手册将详细解释如何有效地使用BugFree,包括后台管理、用户管理、以及核心功能——bug管理。 **1. 后台管理** 后台管理是BugFree的核心组成部分,它允许管理员进行项目的配置和团队成员的管理。 **1.1 项目...

    如何减少程序中的bug.pdf

    定期组织技术分享会或研讨会,鼓励团队成员分享他们在解决问题时所学到的经验教训。这种方式不仅能够促进团队成长,还可以避免未来再次出现同样的问题。 #### 六、案例研究 文章的部分内容提到了几种常见的参数...

    bugfree中的bug导出、导入功能

    Bugfree是一款优秀的开源缺陷跟踪系统,它提供了便捷的Bug管理功能,包括Bug的创建、分配、跟踪以及本次我们重点关注的——Bug的导出与导入功能。在Bugfree 2.x版本中,这两个功能得到了进一步的优化,以满足团队...

    bugfree使用指南

    4. **提高效率**:通过规范化的流程,BugFree有助于团队成员协同工作,提高问题解决的效率。 5. **数据统计与分析**:系统支持查询和报表功能,帮助管理者了解项目的健康状况,做出决策。 ### Bugfree的登陆 1. **...

    项目管理BUG管理

    培养团队成员的责任感和主动性是BUG管理成功的关键之一。每个人都应该对自己的工作负责,并积极参与到问题的解决过程中。团队领导可以通过定期的培训和个人激励措施来增强成员的责任意识。 #### 五、案例分析——...

    dreamxmgl_a5Dream项目管理系统(又称:梦想项目管理系统)是一款基于PHP+Mysql开发的一款Bug管理系统

    DreamXMGL提供直观的用户界面,方便团队成员提交、查看和更新Bug。同时,系统具备权限管理机制,确保敏感信息的安全,防止未经授权的访问和修改。 五、集成与扩展性 作为一款灵活的管理系统,DreamXMGL可与其他工具...

    代码写的垃圾被嫌弃?这 3 个插件你值得拥有!(csdn)————程序.pdf

    这对于项目管理和持续集成非常有用,因为团队成员可以直观地看到代码质量的变化趋势。 3. **阿里巴巴代码规约插件**: 阿里巴巴代码规约插件遵循阿里巴巴内部的编码规范,为开发者提供了一套标准的代码检查规则。...

    bugfree改造文档

    "Bugfree"是一款开源的缺陷管理系统,主要用于软件开发过程中跟踪和管理bug。"bugfree改造"通常是指...在实际改造过程中,这类工具或许可以用来创建关于Bugfree改造过程的记录或教程,帮助团队成员理解和应用改造成果。

    第一周周报(子非鱼——智能模块化养鱼设备)1

    - 9月26日,团队成员fyl、zjh、lhs和tyh花了2小时组装树莓派,这是设备核心部分,用于运行系统和控制硬件。 - 9月28日,团队在尝试启动树莓派时遇到问题,未能成功,随后耗时1小时安装了git工具。 3. **软件开发*...

    禅道基本使用——适用于测试人员、项目经理

    * 每日例会:每天 Scrum Master 召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。 * 演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。 * ...

    初体验——FishEye

    这种实时的更新通知使得团队成员能够及时了解项目的进展,特别是对于测试人员来说,可以迅速跟进代码变动,提高工作效率。 在测试阶段, FishEye 的价值尤为显著。当开发人员提交代码后,测试人员可以立即追踪代码...

    BugAdvocacy

    为了解决这一问题,Cem Kaner 博士在其研究中提出了一种新的理念——**BugAdvocacy**,旨在通过改进Bug报告的质量来提高软件开发团队对Bug处理的重视程度。 #### BugAdvocacy核心概念 1. **测试的核心目的**:寻找...

    轻量、简单、易容、免费的bug管理工具-delbug管理

    从新建、已解决、未解决、延期到关闭,每个阶段的状态变化都一目了然,便于团队成员随时了解项目的进展。 ##### 4. **Bug表单自定义** 除了标准的信息字段外,Delbug还允许用户根据实际需求自定义表单内容。例如,...

    开发进度月报 符合国标GB8567——88.zip

    【开发进度月报符合国标GB8567——88】是软件开发过程中一个重要的文档,它严格按照国家制定的标准GB8567——88进行编写,旨在提供项目开发的详细进度信息,帮助管理者、团队成员以及相关利益者了解项目的实时状态、...

Global site tag (gtag.js) - Google Analytics