转载: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万用户。
分享到:
相关推荐
- **绩效优化**:通过对团队成员的指导和支持,提升整体项目绩效,特别是针对关键岗位,如项目经理、技术负责人等,进行个性化辅导和激励。 5. **学生管理与素质教育**: - **生源管理**:对应IT团队的人才招聘和...
此类会议通常持续6-8小时,参与者包括Scrum Master、产品负责人、团队成员及利益相关者。 - **产品待办事项列表示例**: - **功能名称**:存款 - **重要性估算**:30人天 - **演示方法**:登录系统,打开存款...
在IT团队中,每个成员都应具备这种精神,为团队的目标贡献力量,共同解决技术难题,推动项目的成功。 3. 坚韧不拔的毅力:黑人男孩在比赛中遭遇困难但仍坚持走到终点,象征着面对技术挑战时的坚韧不拔。在IT行业,...
【父爱如山】这篇国旗下讲话稿,虽然标题中并未直接涉及IT知识,但其内容却触及了人性、家庭责任、关爱与成长的主题,这些主题在任何领域,包括IT行业,都具有普遍的价值。在IT行业中,员工的个人成长、团队协作、...
在IT项目中,团队成员也需要密切配合,共同解决问题,以确保项目的成功。 2. **适应性与灵活性**:主人公们在面对不断变化的训练环境和挑战时,需要快速适应和灵活应对。在IT行业,技术日新月异,开发者和工程师也...
这篇文档虽然名为“朋友,下来吧作文.doc”,但其内容实际上讲述了一个关于勇气、信任和克服恐惧的故事,而非直接涉及IT知识。故事中通过一位朋友的鼓励和引导,帮助另一位朋友从悬崖上安全下来,展现了人际交往中的...
在IT项目中,这可以象征项目中遇到的技术难题或资源危机,如软件bug、数据安全问题或硬件故障等,这些问题可能导致项目延期或功能受损,引发团队成员的困扰和担忧。 海鸥再也飞不起来,可能暗示着环境恶化导致生物...
在软件行业中,会议纪要是一种重要的沟通工具,用于记录会议中的讨论内容、决策结果和待办事项,确保团队成员能够明确了解会议的目标和后续行动。本篇“软件公司会议纪要范例”提供了宝贵的指导,尤其对刚步入职场的...
4. **通知设置**:配置邮件通知规则,确保团队成员能及时接收到Bug报告和更新信息。 5. **自定义字段**:根据项目需求,添加自定义字段以收集更多关于问题的信息。 通过以上步骤,你已经成功地安装并配置了Mantis...
团队成员应具备扎实的编程基础,以便理解并分析软件的内部工作原理;同时,他们应熟悉各种测试方法,如黑盒测试、白盒测试和灰盒测试,以便从不同角度发现潜在问题。此外,团队协作和项目管理能力也是不可或缺的,这...
3. **促进团队协作**:团队成员之间通过共享的设计模式语言进行沟通,提高了效率。 4. **加速开发过程**:通过复用已有的模式,可以快速构建软件系统的核心框架。 #### 三、面向对象设计模式分类 面向对象设计模式...
当团队成员相信彼此的诚实和能力,整个团队的效能会显著提升。 最后,故事的教训是关于自我反思和成长。在IT行业,持续学习和自我改进是关键。当犯错误时,勇于承认并从中吸取教训,是个人和专业发展的关键步骤。...
每个人都要对自己的工作负责,同时,团队成员之间也需要有效协作,共同达成目标。 5. **教育与引导**:PPT教案的目的在于教育学生养成良好的行为习惯,这与IT行业中的培训和知识分享相似。IT企业会定期进行技术培训...
【标题】和【描述】中提到的"好词好句作文集锦"实际上与IT技术没有直接关联,但我们可以从【标签】中的"技术"出发,结合【部分内容】中的感恩主题,探讨一下技术领域中感恩心态的重要性。 在IT行业中,感恩心态同样...
10. **代码审查**:在代码合并之前,团队成员会进行代码审查,以提高代码质量和团队协作。 如果您能提供更具体的信息,比如压缩包内的代码是关于什么的,使用了哪种编程语言,或者涉及到的具体技术点,我将能够生成...
在给定的标题“对于写好的数据库框架个性化修改及数据库框架资源”中,我们可以理解到这是一个关于如何根据项目需求对已有的数据库框架进行定制化改造的主题。这种修改通常涉及对框架源码的理解、功能扩展、性能优化...
【标题】和【描述】中提到的文档"感恩生活.doc"主要是关于感恩的主题,文档包含了两篇文章,一篇是《生活在感恩的世界》,另一篇是关于"感恩是一种生活态度"的感悟。文档通过引用诗句和寓言,阐述了感恩的重要性和...
鼓励开发者之间的互相学习和分享,通过代码审查和定期的技术讨论,促进团队成员共同提升,这有助于提高整体的代码质量和团队凝聚力。 总结来说,"奖励的谬误"提醒我们在IT行业中,激励机制的设计应当充分考虑到其对...
在IT项目中,团队成员也需要各司其职,共同完成任务,从而实现项目目标。 最后,文章中的“不管多小的事都是一份心意”传递了即使是微不足道的行动也能带来改变的信息。在IT领域,这可能意味着修复一个小的bug,...
在软件开发中,团队协作是常态,团队成员需要互相理解、尊重,共同完成项目。 7. **自我反思与提升**:学生被鼓励反思自我并提升个性,软件开发者也需要持续反思自己的编程习惯,寻找改进的空间,不断提升技术能力...