好软件少不了它们──注意软件的调试工具

IT商界

  近年来,对计算机技术的最大抱怨集中在商用软件的质量问题上。由于现在的软件变得越来越复杂,软件中的Bug对人们的影响也越来越大,因此消费者不满情绪也在增加。为了解决这个问题,几个主要的大公司,如IBM、微软、Sun,都设立了不同的软件调试项目,它们有不同的侧重点,但是有相同的目标:用更好的工具来改进软件质量。它们也正努力减少开发成本,削减冗长的调试过程。

  每个项目都使测试过程自动进行,软件错误发现得越早,修正它们的成本就越低。一般来说,修正Bug在开发的时候需要10美元,在质量保证(QA)时需要100美元,在Beta测试中需要1000美元,而在使用后则需要10000美元或者更多。

  IBM:Eclipse

  IBM是Eclipse的领导厂商之一,Eclipse是一个非盈利性质的组织,有40家厂商。它们建立了一个集成开发环境(IDE),C++、Java和基于Java的NetBeans开发平台都可以使用。Eclipse主要包括采用Java的公司,如Intel、Oracle和SAP。这个项目的主要目标是,使用开发源码设计过程来减少Bug。可以在http://www.eclipse.org上下载该工具。

  Eclipse的主要特点是:支持多种独立软件开发商的工具;支持对任意内容(如HTML、Java、C、JSP、EJB、XML和GIF)的操作工具;支持GUI和非GUI的应用开发环境;可以在各种操作系统中使用,如Windows和Linux。Eclipse可以用来设计网站,嵌入式Java程序,C++程序等。

  除了使用开发源码的方法,Eclipse主要致力于完善代码的Hyades,这是一种集成的测试、跟踪和监控环境。这个测试基于对象管理组的统一建模语言测试表,包括测试外壳,测试跟踪,测试目标和验证模块。Eclipse在开发过程中运行这些模块。

  与微软和Sun的新工具不同,Hyades用于软件开发的Beta和QA阶段,目的是捕获高级的运行错误,而不仅仅是代码错误。

  微软:PREfix、PREfast、SLAM

  作为世界上最大的软件公司,微软的软件质量受到了相当多的批判。微软开发了三种调试工具用来解决这些问题。这些工具设计得比较全面,因此,运行速度比较慢。但这不是一个大问题,因为开发者使用这些工具时,最主要的目的是能够发现问题,而不是运行速度有多快。微软的程序员可以设计插件程序,利用工具来寻找他们编写的软件中的错误。例如,对编写设备驱动程序的程序员来说,驱动程序是实时运行的,可以定时发现错误。

  PREfix

  在1999年,为了帮助控制Windows 2000中的Bug,微软收购了设计PREfix调试工具的Intrinsa公司。尽管该工具发现了许多Bug,但它运行速度较慢,而且需要大量的处理器。因此微软开发了一个改进版本。

  PREfix的主要特点是:可以检查各种模式的代码,检查语法和语义错误;它是一个编译工具,可以模拟C和C++程序的运行,因此能够在程序实际运行之前发现运行时的问题。由于该工具是模拟而不是运行一个程序,故它可以在开发的早期使用,而不用等到整个程序编写完之后再使用。PREfix主要是微软的软件开发者用来检查C和C++程序中的错误。

  PREfast

  微软在开发周期的后期,Beta测试之前使用PREfast,其特点是:发现传统的代码错误,如用大写字母命名一个函数;检查语法,语义错误。当多个程序员不遵守相同的传统时,由于缺乏一致性,使他们很难维持和继续开发一个应用程序。

  微软现在使用PREfast来检查,该工具不允许程序员在改正现有的错误之前,增加错误代码到现有的代码中。PREfix和PREfast都比较有效,它们发现了Microsoft Sever 2003中约17%的错误。

  PREfix和PREfast都可以在微软的主页上下载,PREfast主要在微软的驱动程序开发包(DDK)中,用于驱动程序的开发和微软内部项目中(如Windows 2000和Microsoft Sever 2003)。

  SLAM

  软件、语言、分析和模型检查项目(http://research.microsoft.com/slam)。SLAM模拟一个系统,并运行一部分软件,保证给定的一部分程序逻辑工作在每个潜在的执行路径上。SLAM模拟一个程序可能运行的所有方法。检查常有的Bug,如缓冲区溢出,这不可能在多数测试或者使用时发现。

  Sun:JACKPOT

  Sun的开放源码项目JACKPOT(http://research.sun.com/project/jackpot),使用JACKPOT源码衡量标准来消除Bugs。JACKPOT的主要特点是可以增加编程工具的效率,使用很易,可以有效地降低代码的复杂度。Sun正在开发JSCM,作为可检查代码和识别结构有无问题的工具。JSCM是一个使用NetBean的beta模块,但是Sun准备将它扩展到NetBean环境之外的Java程序中。

  该工具包括静态代码检查器,使用词汇扫描(一种分析检查编程元素之间关系的程序)分析和语法、数据流分析。但是JSCM的代码检查器与其他的不同,它通过与一套标准比较来判断代码在实际使用中是否可以接受来查找错误。代码检查器可以标示错误,故程序员可以立刻发现并修改它们。用户可以设置代码检查器,让它检查不同级的错误。这让用户在调试中只看见某些错误,使得开发者更愿意使用该工具,因为可以减少他们查看错误的时间。

  写在最后

  IBM、微软和Sun的项目是能够改进软件质量的重要方法。然而,它们只能发现更多明显代码的错误,如语法错误,与传统不一致的编程。它们不能解决内在错误和难于发现的问题,如逻辑错误和未捕获的异常。要发现这些异常,需要完全理解程序,这在有成千上万行代码的项目中几乎是不可能的。新的软件开发模型有助于消除最严重的错误。现在,各个大公司都在努力发布更好的代码,它们更关注软件质量,这对每个人来说都是一件好事。好的调试工具有助于消除Bugs设计出更好的软件。