`
isiqi
  • 浏览: 16623624 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

创建小型测试程序排除软件故障的艺术

阅读更多

创建小型测试程序排除软件故障的艺术


作者:Chip Camden
翻译:PurpleEndurer,2011-01-31 第1版


  前言:当你的程序出现故障时,Chip Camden建议你创建一个小型测试程序,因为它会帮助供应商和开发商向你提供帮助。创建这样一个程序的相关资料如下。


  又来了!无论你如何细心地测试了所用语言、函数库和架构的每一项性能,无论你如何审慎地为每个组件创建了单元测试,当你最终把它纳入应用程序时,得到的是不可理解的故障。


  尝试所知的每一种调试技术;改写并简化了最可疑的代码段;掐掉或剔除整个组件。这可能会帮助你把故障缩小到特定区域,但你对出错的东西或原因仍然没有头绪。如果你知道语言或函数库的来源,你可能会得到更进一步的信息,但你也许仍然会因为缺乏知识或文档,对故障的理解不足以解决问题。

  这时需要求助了。在论坛上提交问题,或者直接联系作者/供应商,但他们不能重现该问题。(不知何故,你知道这种情形会发生。)他们要求提供重现实例。你把整个应用程序直接发送给他们,问题永远得不到解决,因为它太麻烦了。最后不了了之。

  好吧,我们不喜欢这样的结局。我们怎样才能改写这种结局呢?在付费支持的情况下,我们可以跺脚、叫喊并升级,迫使供应商在该问题上花时间;但如果整个应用程序运行和调试被证明太困难,那么他们仍然可以推说“无法再现(unreproducible)”。供应商可以做的只有这么多。即使他们把这个问题留下来继续研究,也可能需要很长的时间来对它刨根问底。幸运的是,在遇到这种问题时,我们可以做一样东西来帮助供应商为我们提供帮助:这个东西就是我所说的小型测试程序(Small Test Program,简写为STP)。

  “哇!等一下!当我们在尝试进行调试时已经删除一切多余的东西!”我听见你泣道。

  你说的可能是实情,但是我们的目标却是要排除其他原因。把目标转为缩小测试程序牵涉的范围,这样你几乎总是有更多事情可以做。这两个目标听上去几乎是一样的,而且它们有很多重叠之处,但它们的覆盖范围并不完全一样。在第一种情况下,我们试图尽一切可能来自力更生解决问题。在第二种情况下,我们要尽自己所能帮助开发人员解决问题。这意味着我们需要采取以下步骤:

  ▲ 去掉对特定配置的依赖。豪无疑问,你已经定制了自己的开发环境,通过各种捷径和惯例来节省时间;但对不熟悉这些的人来说,它们中任何一项都耗费时间。你要么去掉这些依赖,创造一个更普通的环境,要么为他们提供了一个不会被入侵的快速安装程序。例如,如果您需要用户设置某些环境变量,那么可以提供一个脚本来完成这些设置,然后启动应用程序。最好是完全消除对环境变量依赖——如果在一个以上的地方设置,或没能正确导出,那么这种依赖关系会增加不确定性。

  ▲ 尽自己所能地去掉所有自定义或第三方组件。你应该已经做了这件事情,但在提交故障时,这变得更加重要。外部组件总是引来指责——确实如此,因为它们经常会造成不可预见的问题。把它们排除出来。此外,如果外部组件需要安装和设置,这会延迟开发者看问题的时间。开发人员在让这些组件在其系统上工作时通常会遇到麻烦,如果他们在开始时并不真正需要这些组件,这就纯粹是浪费时间。

  ▲ 减少需要用户操作的步骤。如果你认为通过运行测试程序一次或两次就会发现问题,那么你就是一个盲目乐观的人(Pollyanna)。如果他们要将测试程序运行一千次,执行时间里的每一分钟的费用为两个工作日。实际上比这更多,这是因为开发人员也是人——每一次开发人员都必须重新启动一个冗长、艰难的设置步骤,他们需要时不时地暂停下来叹息并纳闷他们的命怎么这么苦。

  ▲ 清晰记录操作步骤。我不知道有多少次收到一些自称是重现问题的步骤的东西,内容为“运行应用程序。”除非应用程序非常简单,不需要安装或互动,而且故障明显到连[典型无能之人]也不会错过,否则该指令将无法重现。不管它看起来多么明显,都要包括每一个步骤——每条一安装命令,启动应用程序的命令,以及所需输入的一切。如果您遵循上述步骤,这应该不会太多。

  ▲ 尽可能减少执行代码行数。整个程序可能在两秒钟内运行,但如果它执行了30000行代码,那么开发人员可能要排除至少30000个可能的原因。此外,这还会让调试变得复杂。如果你能将整个程序压缩至“一,二,搞定!”那你就学乖了。

  ▲ 包含明确的故障标示。不要想当然地认为开发人员将立即辨别出来,你那是10个像素的玩意太小了——请在步骤说明中告诉他们。理想的情况是,应用程序在运行时应该大叫:“这就是我出故障的地方!”。使用断言,或者至少用printf或消息框来输出。

  ▲ 包含明确的成功标示。有很多次,我已经解决了测试程序表现出来的一个问题,随即又碰到另一个故障。难道我之前解决了一个他们没有报告的问题,现在才看到他们提出的故障吗?通常他们知道第二个故障,但他们根本不费心去阻止它出现,因为他们已经重现了第一个故障。这很失礼。在理想情况下,你希望测试程序是为某个问题量身定制的,这样同样的问题就不会在另一个测试程序中出现。为了实现这一目标,它要有一个成功的标志。这会让我们对故障是否已成功排除不存有任何疑问。

  ▲ 变换角色来测试程序。把自己设想为负责该工作的开发人员再运行测试程序,这样可确保你没有什么遗漏。不要在你自己的开发系统上运行它,因为你的环境设置方式可能与开发人员不同。在虚拟机中使用普通配置来运行测试程序,并确保它按你打算的那样精确地把故障表现出来。这可以为你减少几趟电子邮件上的交涉,避免给别人造成“你这人做事糊里糊涂”的印象。

  你为什么需要创建小型测试程序

  你为什么要投入额外的努力创建一个小型测试程序?毕竟这是他们的错误,让他们去找到它,解决它。

  我的客户大多是软件开发人员,所以我从两个角度来看这个问题。作为一名在过去20年里数百(也许是数千)个待解决故障的受理者,我不得不把它们提交给许多软件供应商。纯粹从我的个人经验来说,我可以告诉你一点:决定开发人员解决问题快速程度的惟一一个最具影响力的因素——既不是你是否向提供产品支持的供应商付费,或者付了多少费,亦不是你歇斯底里的大怒大喊,也不是你的恭维奉承,更不是他们可以按时响应的信誉——而是:如何清楚扼简要地演示故障。

  所以,下次你需要提交问题报告时,应记得史蒂夫·马丁(Steve Martin)的不朽名言:“让我们做得小些”。(完)
http://www.techrepublic.com/blog/programming-and-development/the-art-of-the-small-test-program/3787

分享到:
评论

相关推荐

    笔记本故障排除 笔记本故障排除

    在IT领域,笔记本电脑故障排除是一项常见的技术工作,尤其对于个人用户和小型企业来说,能够自行诊断和解决一些常见问题可以极大地节省时间和成本。本文将深入探讨笔记本故障排除的一些核心概念、步骤和技巧。 首先...

    计算机故障排除ppt

    计算机故障排除是IT领域中必不可少的一项技能,尤其对于个人用户和小型企业来说,掌握基本的故障排查方法可以节省大量时间和金钱。本项目主要探讨了计算机故障的概述、硬件故障及排除以及软件故障及排除,旨在帮助...

    IBM P系列小型机日常维护_故障定位_故障排除

    ### IBM P系列小型机日常维护、故障定位与故障排除 #### 一、环境与电源管理 在进行IBM P系列小型机的日常维护时,首先需要注意的是环境与电源管理。这包括温度、湿度以及电源的稳定性等方面。 - **温度**:理想...

    小型机故障处理与维护指南

    教程名称:小型机故障处理与维护指南课程目录:【】HP、IBM、SUN小型机维护指导书【】IBMP系列小型机日常维护故障定位故障排除手册【】IBM小型机故障处理指导V1.0【】IBM小型机日常操作维护手册【】IBM小型机日常...

    IBMP系列小型机日常维护故障定位故障排除手册

    IBMP系列小型机日常维护故障定位故障排除手册

    IBM__P系列小型机_故障定位、故障排除

    ### IBM P系列小型机故障定位与排除详解 #### 一、引言 IBM P系列小型机作为企业级计算平台,在金融、电信等多个行业中扮演着重要角色。为了确保系统的稳定运行,掌握有效的故障定位与排除技术至关重要。本文将详细...

    计算机常见故障诊断及排除

    计算机常见故障诊断及排除是IT领域中不可或缺的一部分,尤其对于个人用户和小型企业来说,能够自行识别并解决一些基础的计算机问题,可以节省大量的时间和金钱。以下是一些关于计算机故障诊断和排除的关键知识点: ...

    网速慢网络故障检测软件

    标题 "网速慢网络故障检测软件" 暗示了我们关注的是用于诊断和解决网络速度问题的应用程序。这类软件通常包含多种功能,如网络连接测试、带宽监控、ping测试、路由跟踪等,帮助用户识别和修复导致网络速度下降的原因...

    中小型PLC系统维护及常见故障排除分析.pdf

    中小型PLC系统维护及常见故障排除分析的知识点主要包括以下几个方面: 1. PLC系统的基本概念:PLC(Programmable Logic Controller)即可编程逻辑控制器,是一种专门为工业环境设计的数字运算操作的电子系统,用于...

    IBM小型机故障处理指导书V1.0

    运行故障诊断程序(DIAGNOSTIC)可以对硬件进行全面检查,发现潜在问题,而使用DUMP和系统日志命令则能进一步收集系统的详细状态信息。 在故障信息收集完毕后,第三章则介绍了硬件故障的定位方法。IPL流程是系统...

    VMware Virtual SAM诊断和故障排除参考手册 中文版

    ### VMware Virtual SAN 诊断与故障排除关键知识点 #### 一、引言 - **Virtual SAN (VSAN)**:VMware Virtual SAN 是一种软件定义的存储解决方案,它将多个物理主机上的本地存储资源整合起来,形成一个统一的高性能...

    路由协议故障排除(V2[1].0)

    【路由协议故障排除(V2[1].0)】课程主要关注了三种主要的路由协议——RIP、OSPF和BGP的故障诊断与排除。在RIP协议部分,首先介绍了RIP的基本概念,它是Routing Information Protocol的缩写,是一种距离矢量路由协议...

    三通it学院-IBM小型机常见故障的基本定位

    ### IBM小型机常见故障的基本定位 #### 一、故障的定义与识别 在处理IBM小型机的故障时,首先需要明确“故障”的定义及其表现形式。所谓故障,是指系统偏离正常工作状态的一种情况,可能会影响到系统的稳定性和...

    C#小型简单型摇号软件

    《C#小型简单型摇号软件详解》 摇号软件是一种广泛应用在各种抽奖、选号等场合的程序,它需要具备公正、公平、随机性的特点。本篇文章将深入探讨一个基于C#语言的小型摇号软件,分析其核心技术点,包括时钟技术和...

    VC++ 又一小型计算器程序

    【VC++ 又一小型计算器程序】是一款使用Microsoft Visual C++开发的简易计算器软件,它提供了基础的数学运算,如加、减、乘、除,同时还有平方根计算以及清屏功能,对于初学者来说是一个很好的实践项目。下面将详细...

    CAD程序.zip_MFC_cad_mfc cad_小型CAD程序_小型的CAD程序

    在这个上下文中,MFC被用来开发这个小型CAD程序,它提供了一种结构化和简化的方式来实现CAD软件的基础架构。 描述中提到,这个小型CAD软件具有基本的绘图功能,如绘制点、线、圆、折线和多边形。这些都是CAD软件的...

    笔记本故障速查涵盖笔记本故障的方方面面自己动手丰衣足食

    - **添加或删除程序窗口中存有孤立的安装登记条目故障的排除** - 清除已卸载程序的残留登记信息。 - 使用专门的卸载工具或手动编辑注册表删除无效条目。 - **控制面板空白故障的排除** - 控制面板无法加载可能是...

    电信ADSL故障排除

    电信ADSL(Asymmetric Digital Subscriber Line)是一种广泛应用于家庭和小型企业的宽带接入技术,它通过普通电话线提供高速数据传输。ADSL故障排除是确保网络稳定性和服务质量的关键环节。以下是一些关于电信ADSL...

    【宽带故障检测工具2012】宽带故障诊断修复软件

    【宽带故障检测工具2012】是一款专为用户解决宽带连接问题的诊断与修复软件。这款工具旨在帮助用户快速定位并修复各种宽带网络故障,提高上网体验。下面将详细介绍这款软件及其相关知识点。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics