`
xiaofengtoo
  • 浏览: 493859 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

主题:写给我的团队成员 之 BUG篇

阅读更多
转载:neora 的BBS一篇文章,用以时时对照自己的团队。

什么是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篇_2.docx

    - **绩效优化**:通过对团队成员的指导和支持,提升整体项目绩效,特别是针对关键岗位,如项目经理、技术负责人等,进行个性化辅导和激励。 5. **学生管理与素质教育**: - **生源管理**:对应IT团队的人才招聘和...

    敏捷软件开发模型—Scrum.pdf

    此类会议通常持续6-8小时,参与者包括Scrum Master、产品负责人、团队成员及利益相关者。 - **产品待办事项列表示例**: - **功能名称**:存款 - **重要性估算**:30人天 - **演示方法**:登录系统,打开存款...

    观《冲出亚马逊》有感10篇.docx

    在IT项目中,团队成员也需要密切配合,共同解决问题,以确保项目的成功。 2. **适应性与灵活性**:主人公们在面对不断变化的训练环境和挑战时,需要快速适应和灵活应对。在IT行业,技术日新月异,开发者和工程师也...

    朋友,下来吧作文.doc

    这篇文档虽然名为“朋友,下来吧作文.doc”,但其内容实际上讲述了一个关于勇气、信任和克服恐惧的故事,而非直接涉及IT知识。故事中通过一位朋友的鼓励和引导,帮助另一位朋友从悬崖上安全下来,展现了人际交往中的...

    软件公司会议纪要范例

    在软件行业中,会议纪要是一种重要的沟通工具,用于记录会议中的讨论内容、决策结果和待办事项,确保团队成员能够明确了解会议的目标和后续行动。本篇“软件公司会议纪要范例”提供了宝贵的指导,尤其对刚步入职场的...

    Mantis的安装过程

    4. **通知设置**:配置邮件通知规则,确保团队成员能及时接收到Bug报告和更新信息。 5. **自定义字段**:根据项目需求,添加自定义字段以收集更多关于问题的信息。 通过以上步骤,你已经成功地安装并配置了Mantis...

    软件测试优秀文章分享

    团队成员应具备扎实的编程基础,以便理解并分析软件的内部工作原理;同时,他们应熟悉各种测试方法,如黑盒测试、白盒测试和灰盒测试,以便从不同角度发现潜在问题。此外,团队协作和项目管理能力也是不可或缺的,这...

    设计模式:可复用面向对象的基础

    3. **促进团队协作**:团队成员之间通过共享的设计模式语言进行沟通,提高了效率。 4. **加速开发过程**:通过复用已有的模式,可以快速构建软件系统的核心框架。 #### 三、面向对象设计模式分类 面向对象设计模式...

    我心中的秘密作文.doc

    当团队成员相信彼此的诚实和能力,整个团队的效能会显著提升。 最后,故事的教训是关于自我反思和成长。在IT行业,持续学习和自我改进是关键。当犯错误时,勇于承认并从中吸取教训,是个人和专业发展的关键步骤。...

    讲文明从不不乱扔垃圾做起PPT学习教案.pptx

    每个人都要对自己的工作负责,同时,团队成员之间也需要有效协作,共同达成目标。 5. **教育与引导**:PPT教案的目的在于教育学生养成良好的行为习惯,这与IT行业中的培训和知识分享相似。IT企业会定期进行技术培训...

    好词好句作文集锦六篇.docx

    【标题】和【描述】中提到的"好词好句作文集锦"实际上与IT技术没有直接关联,但我们可以从【标签】中的"技术"出发,结合【部分内容】中的感恩主题,探讨一下技术领域中感恩心态的重要性。 在IT行业中,感恩心态同样...

    软件公司实习报告合集7篇 (2).pdf

    通过团队项目,实习生可以学习如何在团队中发挥作用,如何在不同的团队成员之间建立有效的沟通,以及如何处理团队内部可能出现的分歧。 职业态度的培养对于实习生来说同样重要。实习经历通常会面临许多困难和挑战,...

    详细代码.zip

    10. **代码审查**:在代码合并之前,团队成员会进行代码审查,以提高代码质量和团队协作。 如果您能提供更具体的信息,比如压缩包内的代码是关于什么的,使用了哪种编程语言,或者涉及到的具体技术点,我将能够生成...

    对于写好的数据库框架个性化修改及数据库框架资源

    在给定的标题“对于写好的数据库框架个性化修改及数据库框架资源”中,我们可以理解到这是一个关于如何根据项目需求对已有的数据库框架进行定制化改造的主题。这种修改通常涉及对框架源码的理解、功能扩展、性能优化...

    感恩生活.doc

    【标题】和【描述】中提到的文档"感恩生活.doc"主要是关于感恩的主题,文档包含了两篇文章,一篇是《生活在感恩的世界》,另一篇是关于"感恩是一种生活态度"的感悟。文档通过引用诗句和寓言,阐述了感恩的重要性和...

    Folly of reward

    鼓励开发者之间的互相学习和分享,通过代码审查和定期的技术讨论,促进团队成员共同提升,这有助于提高整体的代码质量和团队凝聚力。 总结来说,"奖励的谬误"提醒我们在IT行业中,激励机制的设计应当充分考虑到其对...

    《人类生命的独特性》[文].pdf

    在软件开发中,团队协作是常态,团队成员需要互相理解、尊重,共同完成项目。 7. **自我反思与提升**:学生被鼓励反思自我并提升个性,软件开发者也需要持续反思自己的编程习惯,寻找改进的空间,不断提升技术能力...

    《秋天的怀念》3 (2).ppt

    在IT行业,这可以启示我们,无论遇到多大的困难,如代码bug、项目延期等,都应保持积极态度,与团队成员携手共进,共同解决问题,这样才能不断成长和进步。 文章中提到的“瘫痪”可以比喻为职业生涯中遇到的挫折,...

    visiual studio2010

    在本篇内容中,我们将围绕“Visual Studio 2010”这一主题展开详细的知识点讲解。虽然提供的信息较为简略,但我们仍可以基于标题、描述以及部分提及的内容来探讨与Visual Studio 2010相关的诸多方面。 ### Visual ...

    编程者的修养

    优秀的程序员懂得倾听他人意见,尊重团队成员,共同推动项目进展。 **4. 谦逊与自我反省** 即使是最资深的程序员也需保持谦逊,认识到学习是一个永无止境的过程。定期进行自我反省,识别并改正自身不足,是持续...

Global site tag (gtag.js) - Google Analytics