冲出软件Bug的泥潭

来源:互联网 发布:编程入门知识 编辑:程序博客网 时间:2024/04/27 19:21

 ■ 今年4月,一个软件的小问题让美国航空集团公司损失了数千美元,当时一些机票的价格被错误地定为1.86美元;
■ 在最近的一次美国总统选举中,计票错误也出现在 几个使用新型投票系统的选区;
■ 更严重的例子是,2003年8月美国东北地区的大停电也是由软件Bug造成的,这次停电让数百万人陷入黑暗。

        其实,这张清单还可以一直罗列下去,后果也相当严重。据有关资料显示,2002年,存在缺陷的软件让美国经济损失了600亿美元。这个数字还在增加之中。如今,低质量的软件困扰着几乎每一家使用计算机的机构,软件Bug造成停机过程中工作时间的损失、数据的丢失或损坏、以及错失销售机会,产生了高昂的IT支持与维护费用,并且降低了客户满意度。
        因此,CIO们开始认真研究Bug是如何进入应用开发过程的,研究它们为什么那么防不胜防。他们一致认为,这不是某个具体的失误,而是参与每个应用的规划、开发、测试和维护的IT人员之间缺乏联系和交流的结果。
        研究人员说,这个问题是软件生命周期管理失败所造成的,他们认为提高软件质量的任何努力必须跨越应用程序生命的每个阶段,从最初的规划到部署,以及后期的维护。Berkshire寿险公司是美洲Guardian寿险公司的子公司。该公司一直在研究提高应用程序在整个生命周期中质量的方法。
Berkshire寿险公司的项目经理Sorin Fiscu解释说:“去年,我们研究了自己的开发过程、需求收集方法,以及监测系统的方式。”
        Fiscu领导的开发小组进行了一些改革,比如让质量保证(QA)人员参与早期规划,征求来自业务分析师的意见,在测试阶段引入更多的自动化技术。这些举措让该公司可以达到或超越两个部署后的目标:即应用程序的可用性和用户对应用程序的整体满意度。
        在Berkshire公司中,开发应用程序的第一步是将业务用户和IT人员召集在一起,在应用程序的功能规范上达成一致,列出从屏幕流到数据域的名称等用户需要的各种特性和功能。
        Fiscu说: “这是一幅描绘应用程序及其用法的细致图画。最关键的是,让所有人都在前期发表意见,使得测试人员、分析人员和开发人员尽可能多地交流。”
        应用生命周期管理(ALM)的目标非常明确。它包括保证负责不同阶段团队间的充分交流,防止错误在生命周期中扩散,因为在开发过程后期纠正错误的成本比开始时要高得多。
        Gartner的分析师Theresa Lanowitz表示:“生命周期看上去一目了然,但是近90%的企业并不知道如何有效地管理它。如果生命周期被正确的人员、过程和技术来管理,我们会看到更高质量的软件和更高效率的IT组织。”

质量从头抓起
        在开发人员、测试人员和业务用户之间建立通畅的沟通渠道,对于成功的生命周期管理至关重要。这必须成为规划阶段流程的一部分。据Staples公司质量管理高级经理Kathy Murray说,他们已经将重点放在参与应用程序开发、测试与使用的所有人之间的协作上。
        她说:“我们与业务合作伙伴开会讨论业务要求,QA人员也参加会议,因此他们清楚地了解这些需求。我们在定义阶段花的时间越多,以后的阶段就进行得越顺利。有研究显示,60%~70%的Bug是在定义阶段制造的,我们发现的确如此。”
        QA服务提供商,Tescom软件系统测试公司的业务开发经理Arthur Povlot说,低劣的需求是造成大多数QA问题的根源。他说: “企业很少在需求阶段就把住质量‘大门’。例如,你应当让相关人员,包括业务分析师、营销经理、项目专家等,审计和批准这些需求。”
        编程人员通常喜欢按自己的方式办事。尽管用繁琐的手续约束开发人员可能引起反作用力,但是采用一些过程和程序来实现一致性和质量控制是个好办法。
        Fiscu强烈建议,开发人员在将他们的代码(Bug以及所有其他代码)交给QA人员纠正前,对程序进行特殊的QA测试。他说:“我们的开发小组收到一套测试脚本,就像一个高级清单。开发只有在做好清单后才进行工作。这样,我们可以保证不将高级缺陷从开发阶段带到测试环境中。”
        避免开发过程中造成软件错误的另一个难点是,跟踪记录更改和版本。配置管理和变更管理政策,以及工具有助于执行开发和测试代码的标准过程。例如,American Greetings公司依靠CA公司提供的AllFusion Change管理器,在整个开发过程中跟踪代码的变更,并执行企业的开发标准。
        该公司的软件经理Tom Brown说:“例如,一些人不能决定使用一种不同的编译器,或者跳过测试,因为它全都内置到AllFusion的过程之中。管理生命周期意味着保持源代码的最新状态,以及与我们使用的过程类型和编译器保持一致。”

用测试提升质量
        尽管开发人员应当在开发过程中进行一些早期的测试,但全面的测试过程和部署对于发现和修正Bug至关重要。在开发人员交出代码后,代码应该进行全面的检查,包括评估程序流和功能正确性的功能测试、综合测试、性能测试、安全性测试以及对程序更新与变更的回归测试。
        芝加哥交易所(CBOT)对应用程序进行了多项手工和自动测试,包括开发人员进行的单位测试、利用来自Compuware公司的QACenter进行的性能测试,以及由以后使用该软件的交易员和经纪人进行的用户接受度测试或功能测试。CBOT在测试时还考虑了未来发展和流量增加的问题。
        CBOT的质量保证经理David Burkhart说:“我们采取了主动而不是被动的方式,因此我们针对系统可能遭遇的未来负载进行测试。”由于时间、技术和人员功能上的限制,甚至最敏感、最关键任务的系统都不可能测试达到100%的质量保证。Povlot建议,为所有的应用程序最关键的需求创建测试案例。他说,总之你应当测试所有需求中的90%。
        自动化的工具可以加快测试规划和执行速度,对回归测试尤其如此。Murray说:“我们已经将测试期人工小时减少了50%,这让我们可以将测试的覆盖面增加300%。”Murray将这种改进归功于Staples公司使用Segue Software公司提供的SilkTest和Hopkinton的StarTest。
        Berkshire公司利用Empirix公司的e-Test套件管理测试过程和加快回归测试速度。Fiscu说,现在自动化不仅解放了资源,还保证了一致性。

形成封闭环路
        部署后,必须监测和维护应用程序。不久后,对软件的升级将开始一轮新的应用生命周期,因此在生产过程中采集到的信息必须反馈给下一个生命周期的需求规划。
        这正是Midland Dow化学公司所采取的战略。Dow的IT人员利用美科利(Mercury)公司提供的LoadRunner,在新应用程序运行各种测试脚本。部署之后,其中的很多脚本被再次运行,这一次使用Mercury的一个监测包,即Topaz或SiteScope来比较结果。如果发现应用存在问题,Dow公司的运营人员通过执行事件审查过程来确定原因。
        CBOT也使用Compuware监测软件来捕获问题。Burkhart说:“我们在它进入生产阶段后就封闭这个环路。进入生产阶段后,如果发生什么问题,我们将开会讨论它,并将意见反馈给QA。”
        大量的厂商拥有用于软件生命周期的一个或多个阶段的产品。一些厂商开始装配套件,来构建完整的生命周期管理系统。IBM的Rational就提供了端到端的产品线,从收集需求的RequisitePro、建模工具、测试工具到对部署后的监测与维护产品IBM Tivoli。
        同样,美科利、Compuware、CA和Segue Software都声称或计划扩展自己的产品范围,以满足应用程序生命周期的每个重要阶段的需要。
        虽然集成的平台可能是最理想的,但是目前的现实是,企业必须选择来自不同厂商的不同产品,来自动执行生命周期的不同部分。一些公司提供与补充产品的接口,但很多公司并不这样做,或者至少不提供与客户可能拥有的每一种产品的接口。
        然而,生命周期管理更是一个流程问题。因此,专家们表示,不管是不是集成的系统,ALM的目标是尽量减少错误和疏忽,提高产品的质量。或者,像CBOT的Burkhart所说的那样,这是个从过去的错误中学习、不要在应用程序的每一次新的生命周期中重犯这些错误的问题。他说:“我的基本目标之一是永远不犯重复的错误。每个人都会犯错误,但是我们要努力通过高质量的过程来防止重复地犯错。”

ALM实现五步走
1.  坚实的开始:开发过程的开始即定义要求,这是非常重要的起步。要确保相关业务人员和开发人员的不断交流,直到所有人都清楚这个应用程序应该干什么。
2 . 策略与过程:虽然程序员们常常藐视规则,但你必须明确地规定开发部门中一致的过程和策略,并坚决地执行它们。
3.  每个步骤中的QA:在程序开发的每个关键步骤中执行质量保证测试,而不是只在应用程序准备交付给QA人员时才执行。
4.  跟踪变更:保留应用程序代码的各种变化和不同版本的详细记录。这将使缺陷纠正变得容易得多。
5.  从容不迫:过度紧迫的日程表是软件Bug最好的孵化器。

相关链接:软件开发方法论概览
        IBM Rational RUP(Rational Unified Process):它是一个常用的软件开发方法论,也是包括测试最佳惯例和技术工具的框架。RUP确定了应用开发的4个阶段:开始、细化、构建和转换。企业统一过程(Enterprise Unified Process)是RUP的一种扩展,它是由Ronin International公司的Scott Ambler开发的,该方法增加了2个阶段:即生产和退出。
        CMMI(能力成熟度模型集成):由软件工程协会(SEI)制定的标准。它是SEI最初的CMM(能力成熟度模型)的升级。作为顶级IT质量组织的一种特征,CMMI推广循环反馈和过程改进的概念。CMMI定义了软件过程成熟度的5个水平,从以非正式的方法和不可预测的结果为特征的水平1(初始级)到机构实现可测量、持续的过程改进时的水平5(优化级)。
        XP(Extreme Programming,极限编程):另一个著名的软件开发规范,它同样强调迭代式开发、持续的测试和协作开发。


推荐书籍: