面向开发人员和测试人员的IBM Rational PurifyPlus
上一篇 / 下一篇 2008-04-07 13:24:06 / 个人分类:IBM Rational
%je S#R(|6f~{"]~0 开发人员和测试人员能够在组织中扮演不同的角色,但都是为了最大化整个项目质量的共同目标。不管它意味着要增加客户想要的特征和性能,还是要确保这些特性能够很好的运转,您的项目小组都要维持一个高水平的质量来取得成功的机会。51Testing软件测试网t!m:i%Lw:^8V)~
51Testing软件测试网!_q\G{4x0`ln2[IBM® Rational® PurifyPlus™ 能够帮助开发人员和测试人员达到他们项目质量的共同目标。有些人把 PurifyPlus 看作一个测试工具,有些人则将它看作是一个开发工具。开发人员和测试人员都可以从 PurifyPlus 获得利益,因为他们都是在软件项目中为高水平的质量而奋斗。
7yD&TK R,P \051Testing软件测试网;?)Mtj#x.^+J在这篇文章中,我展现了一个 PurifyPlus 的概述、它如何操作,以及为什么它对开发人员和测试人员有如此大的价值,通过许多重要的产品活动不仅仅提高了产品质量,还增加了个人和小组的效率和有效性。
%`%v0Z~*O@051Testing软件测试网5d6]I Sp{$f低质量的成本51Testing软件测试网o%K!~b}(l
51Testing软件测试网+Z|9z2rSf l6r9}0l为了您项目的成功,尽早找到并修复故障是非常必要的。如果能够尽早找到并修复缺陷,这些缺陷的成本将少得多,要么通过开发人员要么通过早期得测试得方法来操作。故障如果通过了测试并到达了客户,成本将比找到并修复要高得多,而且对您得声誉和最终的业务也有相当大的影响。
IB s:hjn;R0UD1A6YE9p;kW"iG0 在开发和测试阶段使用 PurifyPlus,您可以尽早将质量引入项目,并且可以避免不完全测试的高成本,处理性能问题,以及/或者稍后找到并修复内存使用错误。51Testing软件测试网(YE&D _VJ)R
51Testing软件测试网 ^&Y'Xxf:m9KPurifyPlus 组件
"^Fod/^HU*{TO$V051Testing软件测试网,q+_,w3ZiY@ TRational PurifyPlus 产品有三个组件:内存错误验证的 Purify,性能数据采集的 Quantify,以及代码覆盖分析的 PureCoverage。我将依次讨论每个成分的工作方式。
~(a6y"c_)V:c!K9? E$q w0vU L4O4D&]+l}-]+^0 Purify 组件51Testing软件测试网"r0}-Wq&su3L
51Testing软件测试网#Y!? _4C@&E9Z在 C/C++ 程序中去除分解内存使用。当它发现事件比被分配时使用更多的内存,或者在它初始化之前或者释放之后使用内存,就会发布一个错误报告。Purify 还可以报告内存泄漏――比如,当一个程序在丢失内存跟踪之前不能释放一个或者更多的内存板块时。尤其是在 Java™ 和 Microsoft .NET 程序中,Purify 能够帮助您识别使用内存并且没有将它释放的程序区域,这是另一种类型的内存泄漏。
3N:WE,Q'M8AEmJ$@_051Testing软件测试网Gb?+X0tO_ Ct对于 C 和 C++ 程序 (而不是 Java 或者 .NET), Purify 通过在这个程序执行中的每一个内存访问周围插入额外的指令来工作。这叫做仪表化。当您运行这个仪表化程序时,它将正常运作,进行与平时一样的操作。但是,Purify 在里面,可以检查问题。如果这个程序从还没有被初始化的内存中读取,或者读取或者改写已经被释放或者仍然存在于分配区域之外的内存,您将看到一个 Purify 错误报告。
?gsZL]0Tju&o"^{){yR0 有些类型的内存访问错误 (比如使用一个 NULL 指示器) 将会导致一个程序完全崩溃。这是一个很容易就可以辨认出的一个错误――您可以用一个正规调试器来找到它。Purify 可以让您看到更多潜伏的内存错误类型,它们可能出现在程序开起来似乎运转正常的情况下。这个特殊的功能在程序中可以产生正确的答案,您的测试可以通过,但是仍然可能存在内存错误。
%Ho4kWU~00g)| ^DI0 例如,一个逻辑性的瑕疵可能在只有99条被分配时已经产生100条的错误。这种错误可能不会导致您的程序崩溃或者您的测试失败,但是仍然存在内存崩溃的危险。某天当潜在的内存错误由于一个不正确的操作超出了内存的范围,那么将导致系统崩溃,这将导致客户的不满意。在项目的早期,Purify 就能够很容易的发现这种类型的错误。51Testing软件测试网1^ O0y&S z6IVL[F?
51Testing软件测试网Tp;}}b0]3O对于 Java 和 .NET 程序,当您的项目仍然在使用本应该已经释放的内存时, Purify 能够帮助您识别出来。这种类型的内存泄漏将会导致您的程序越来越大,运行越来越慢,最终耗尽内存。51Testing软件测试网*Fr-C^M K \lG4s.d8y
mCbz~mka0 Quantify 组件51Testing软件测试网2_:ID3y+Am
51Testing软件测试网!xa)J]n,I)qQuantify 是 PurifyPlus 中进行分析的组件。它适用于 C/C++, Java,以及 .NET 程序。Quantify 度量并分析在程序中所花费的时间,从而识别“热点”和无效的代码。独特的 "River of Time" 显示可以直接让您找到您的程序中最浪费时间的区域。
.z u7M{)t{ I VS3C:q0x*LdY7}0g0 PureCoverage 组件51Testing软件测试网;?`,Hnf _JD:e"Y
51Testing软件测试网_ EQ9A5Wa"gQ?m6EPureCoverage 进行代码覆盖的分析。就像 Quantify,您可以利用它应用在您的 C/C++, Java, 以及 .NET 程序中。利用 PureCoverage,您可以确保测试您的整个程序。毕竟,您没有进行测试的代码的质量是未知的。因为您的测试并不报告它的错误或者健康状态。没有测试到的错误将会“逃离”进入释放,找到并修复它们的成本将十分昂贵。在发布版本之前识别测试漏洞,填充并找到这些错误,成本会低得多。51Testing软件测试网`"DkU,m8q6sS/dne
51Testing软件测试网 od.CZT7R4c此外,很重要得一点是, Purify 只在运行测试的过程中对部分的程序进行错误的检验。如果您在测试覆盖范围中有漏洞,那么您在 Purify 错误检验中仍然会有漏洞。这是使用 PureCoverage 另一个很好的理由。51Testing软件测试网d@5nU"{c1j;V)]
YN iq"T0 开发人员和测试人如何使用 PurifyPlus51Testing软件测试网Q+Qj,vQ*a0]
51Testing软件测试网/j}'ew2QM L,QV开发人员和测试人员使用工具的方法是不同的。一个开发人员更想要交互的,图解的并带有“挖掘”性能的结果,然后 PurifyPlus 将它交付。而测试人员更喜欢用报告中的日志文档和总结报告,利用它们捕捉结果。PurifyPlus 也可以产生这样的结果。在这个部分中我将分别描述开发人员和测试人员利用 PurifyPlus 组件优化质量的方法,还将讨论您将从中获得的好处。
2D\o8ix;O0#MLiU.]G:E@5n0 开发人员使用 Purify51Testing软件测试网.OEV8u0k#A/R%q
51Testing软件测试网2v SHkg9i开发人员可以用两种方法来使用 Purify。首先,当您遇到一个程序错误或者看起来是与不适当使用内存相关的缺陷时,您可以把它当作一个程序调整工具来使用。当内存被毁坏、不适当地使用,或者泄漏时,Purify 能够帮您识别所有不正当行为。这样看来, Purify 像一个医生:当您生病需要诊断治疗时可以求助于它。51Testing软件测试网5m}w,O'n
51Testing软件测试网h#M7r Vm_"k4ax但是开发人员还有另外一种使用 Purify 的方法:像作家利用拼写检查器一样,找到并去除您没有意识到的错误。有规律地使用 Purify,您可以在程序崩溃或者其它明显疑问的行为发生之前,找到内存的错误使用并修复它。(如果您在检验之前找到并修复了这个错误,它还会有影响吗?)
T:T:XI N0/JG/}#N&N;w(~0 有些程序设计部门使用 Purify 的方法是,将它作为源代码中的自动步骤来控制过程。在开发人员的检入代码被允许进行测试之前,必须用 Purify 来进行测试。如果存在 Purify 错误报告,这个变更是不能继续进入到这个构架的。这样可以使构架保持健康,并不至于开发人员陷入困境中。毕竟,您并不希望成为引入一个变更而导致所有测试崩溃的人。这样看来,Purify 就像维他命或者锻炼:您可以每天使用来保持您代码的健康,这样一来这些问题就可以掌控之中。
gac^9`]/_q ^&X051Testing软件测试网NJm)e2W9@+o[8[g q开发人员使用 Quantify51Testing软件测试网\#Z7P qL\0G3N h
'z\7W*o9y9U7g,D"G0 测试人员或者测试工具可以从较高的层面上告诉您系统性能并不充分,但是找到并修复这个潜在问题的任务将落到开发人员身上。这就是 Quantify 组件参与进来的位置。Quantify 重点突出了您代码中的 "热点",比如运算法则需要改良的位置,如果链接列表应该是一个哈希表,或者什么地方应该使用缓存,以避免不必要的重新计算。51Testing软件测试网'q.JDc.DC#WVe
pp n`9W0 Quantify 可以用来比较您程序的两种趋向,这样您可以清楚地看到您做出代码变更时所表现的不同性能。这样您可以利用真实的代码而不是猜测来对您的性能进行最优化操作。对于 C 和 C++ 程序,Quantify 利用不变的定时数字,这样性能数据就不会受到外界因素的影响,比在测试机上加载。这意味着您可以更可靠地比较这两种趋势,度量与只使用度量“运行时间”工具相比较时地良好性能差别。
2?Eo mG0!?vJ^"V'n9Ab0 除了性能分析之外,另一种使用 Quantify 的方法是获取对程序逻辑和操作更好的理解。Quantify 的 "River of Time" 展现了一个图示,显示了程序的功能是如何调用对方的。您可以利用它来跟踪程序逻辑,并可以查看子系统之间的相互关系。有时最有价值的见解来自诸如"我并不希望这个子系统来调用那个子系统。" 之类的惊喜。Quantify 的调用图示向您显示了将会发生什么――如果它确实您所期望的不匹配,那么您就学习更多的相关知识。51Testing软件测试网#Jv3C(F(P GH}
51Testing软件测试网/o%h l'G)h&}*v5UQg开发人员使用 PureCoverage
K!H Wo/a3B9lv051Testing软件测试网*pe){ C.M ngO开发人员通常负责创建单元测试,有时负责功能测试。这些测试的目的之一是在项目中特定区域中运用所有的。您可以手工检查源代码并编写您认为可以覆盖整个项目的测试案例,但是这并不是可靠的或者有效的开发测试的方法。您需要一个像 PureCoverage 一样的代码覆盖工具来告诉您:您确实在这个项目的特定区域运行所有的循环和条件。记住:未测试的代码很可能就是有疑问的代码!51Testing软件测试网'IZ7Kn6K2[
51Testing软件测试网D.@LZ2cR;?]一旦您创建了完全运行目标代码的单元测试,那不意味着您已经完成了编写测试。因为一旦下面的代码变更,您的测试就不可避免地会落后。它们不会运行后来引进的新特征或者不同的代码路径。您可以通过利用 PureCoverage 来有规律地分析这个测试覆盖并在特定子系统的覆盖水平寻找漏洞。早一点发现比晚点发现要好得多:如果您在一个发布版本周期的晚期遇到了不充分的覆盖,您将比其他人更晚编写测试。
*n![E#~mSPGR051Testing软件测试网y@_(c#["a ^当编写测试时,PureCoverage 还有另一个好处:它将告诉您何时应该停止。如果过度的测试一个功能区域或者子系统是没有好处的。如果您根据观察来编写测试,而不是利用像 PureCoverage 一样的度量工具,您将在测试创建上过分投资,并且不能得到任何额外的质量回报。PureCoverage 可以告诉您什么时候是最为合适的,帮助您节省时间和资金。51Testing软件测试网\I.E9WH
51Testing软件测试网VM&F~,J-~h7o'~PureCoverage 对开发人员最后一个利益是,它与 Purify 的使用相结合,像一个猎手一样可以保持这个项目不受内存错误使用的影响。记住 Purify 只执行您在测试过程中实际执行的代码中的内存错误的检验。如果您的测试没有运行完所有的代码,那么您仍然不能在那些区域感受到 Purify 给您带来的好处。51Testing软件测试网/PA"]#P+X"D
51Testing软件测试网7P:P\)i;K5K2v测试人员使用 PureCoverage
1w(AOHk7k*vigm051Testing软件测试网6D2~8^k hrN一个测试套件只是与它所包含的测试质量有同样的性能。那看起来很明显,但是仅仅是负担着重复的操作。如果它不能真正运行这个项目,就没有必要花费时间和资金来运行这个测试套件,即使能够通过它所有的测试。如果来自这个测试套件的结论不能真实地告诉您这个项目的质量,那么您只是在浪费时间和资源。