十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

面向开发人员和测试人员的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 |9z2rSfl6r9}0l

  为了您项目的成功,尽早找到并修复故障是非常必要的。如果能够尽早找到并修复缺陷,这些缺陷的成本将少得多,要么通过开发人员要么通过早期得测试得方法来操作。故障如果通过了测试并到达了客户,成本将比找到并修复要高得多,而且对您得声誉和最终的业务也有相当大的影响。

IB s:hj n;R0

UD1A6YE9p;kW"iG0  在开发和测试阶段使用 PurifyPlus,您可以尽早将质量引入项目,并且可以避免不完全测试的高成本,处理性能问题,以及/或者稍后找到并修复内存使用错误。51Testing软件测试网(YE&D _VJ)R

51Testing软件测试网 ^&Y'Xxf:m9K

  PurifyPlus 组件

"^Fod/^ HU*{TO$V051Testing软件测试网,q+_,w3ZiY@ T

  Rational PurifyPlus 产品有三个组件:内存错误验证的 Purify,性能数据采集的 Quantify,以及代码覆盖分析的 PureCoverage。我将依次讨论每个成分的工作方式。

~(a6y"c_)V:c!K9? E$q w0

vU L4O4D&]+l}-]+^0  Purify 组件51Testing软件测试网"r0}-Wq&su3L

51Testing软件测试网#Y!?_4C@&E9Z

  在 C/C++ 程序中去除分解内存使用。当它发现事件比被分配时使用更多的内存,或者在它初始化之前或者释放之后使用内存,就会发布一个错误报告。Purify 还可以报告内存泄漏――比如,当一个程序在丢失内存跟踪之前不能释放一个或者更多的内存板块时。尤其是在 Java™ 和 Microsoft .NET 程序中,Purify 能够帮助您识别使用内存并且没有将它释放的程序区域,这是另一种类型的内存泄漏。

3N:WE,Q'M8AEm J$@_051Testing软件测试网Gb?+X0tO_ Ct

  对于 C 和 C++ 程序 (而不是 Java 或者 .NET), Purify 通过在这个程序执行中的每一个内存访问周围插入额外的指令来工作。这叫做仪表化。当您运行这个仪表化程序时,它将正常运作,进行与平时一样的操作。但是,Purify 在里面,可以检查问题。如果这个程序从还没有被初始化的内存中读取,或者读取或者改写已经被释放或者仍然存在于分配区域之外的内存,您将看到一个 Purify 错误报告。

?gsZL]0

Tju&o"^{){y R0  有些类型的内存访问错误 (比如使用一个 NULL 指示器) 将会导致一个程序完全崩溃。这是一个很容易就可以辨认出的一个错误――您可以用一个正规调试器来找到它。Purify 可以让您看到更多潜伏的内存错误类型,它们可能出现在程序开起来似乎运转正常的情况下。这个特殊的功能在程序中可以产生正确的答案,您的测试可以通过,但是仍然可能存在内存错误。

%Ho4kWU~0

0g)| ^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+A m

51Testing软件测试网!xa)J]n,I)q

  Quantify 是 PurifyPlus 中进行分析的组件。它适用于 C/C++, Java,以及 .NET 程序。Quantify 度量并分析在程序中所花费的时间,从而识别“热点”和无效的代码。独特的 "River of Time" 显示可以直接让您找到您的程序中最浪费时间的区域。

.z u7M{)t{ I VS3C:q0

x*LdY7}0g0  PureCoverage 组件51Testing软件测试网;?`,H nf _JD:e"Y

51Testing软件测试网_ EQ9A5Wa"gQ?m6E

  PureCoverage 进行代码覆盖的分析。就像 Quantify,您可以利用它应用在您的 C/C++, Java, 以及 .NET 程序中。利用 PureCoverage,您可以确保测试您的整个程序。毕竟,您没有进行测试的代码的质量是未知的。因为您的测试并不报告它的错误或者健康状态。没有测试到的错误将会“逃离”进入释放,找到并修复它们的成本将十分昂贵。在发布版本之前识别测试漏洞,填充并找到这些错误,成本会低得多。51Testing软件测试网`"DkU,m8q6sS/dn e

51Testing软件测试网 od.CZ T7R4c

  此外,很重要得一点是, Purify 只在运行测试的过程中对部分的程序进行错误的检验。如果您在测试覆盖范围中有漏洞,那么您在 Purify 错误检验中仍然会有漏洞。这是使用 PureCoverage 另一个很好的理由。51Testing软件测试网d@5nU"{c1j;V)]

YN i q"T0  开发人员和测试人如何使用 PurifyPlus51Testing软件测试网Q+Q j,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#M7rVm_"k4ax

  但是开发人员还有另外一种使用 Purify 的方法:像作家利用拼写检查器一样,找到并去除您没有意识到的错误。有规律地使用 Purify,您可以在程序崩溃或者其它明显疑问的行为发生之前,找到内存的错误使用并修复它。(如果您在检验之前找到并修复了这个错误,它还会有影响吗?)

T:T:XI N0

/JG/}#N&N;w(~0  有些程序设计部门使用 Purify 的方法是,将它作为源代码中的自动步骤来控制过程。在开发人员的检入代码被允许进行测试之前,必须用 Purify 来进行测试。如果存在 Purify 错误报告,这个变更是不能继续进入到这个构架的。这样可以使构架保持健康,并不至于开发人员陷入困境中。毕竟,您并不希望成为引入一个变更而导致所有测试崩溃的人。这样看来,Purify 就像维他命或者锻炼:您可以每天使用来保持您代码的健康,这样一来这些问题就可以掌控之中。

gac^9`]/_q ^&X051Testing软件测试网NJ m)e2W9@+o[8[g q

  开发人员使用 Quantify51Testing软件测试网 \#Z7PqL\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!HWo/a3B9lv051Testing软件测试网*pe){ C.M n gO

  开发人员通常负责创建单元测试,有时负责功能测试。这些测试的目的之一是在项目中特定区域中运用所有的。您可以手工检查源代码并编写您认为可以覆盖整个项目的测试案例,但是这并不是可靠的或者有效的开发测试的方法。您需要一个像 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 h rN

  一个测试套件只是与它所包含的测试质量有同样的性能。那看起来很明显,但是仅仅是负担着重复的操作。如果它不能真正运行这个项目,就没有必要花费时间和资金来运行这个测试套件,即使能够通过它所有的测试。如果来自这个测试套件的结论不能真实地告诉您这个项目的质量,那么您只是在浪费时间和资源。

?c"sS*C4A }cB)x0

(e"u_S(I9T3?*I~+B/L Vb0  一种度量测试质量的方法是,了解它们所运行的这个项目的区域以及(更为重要的是)它们所错过的区域。只有了解了您的测试所覆盖的范围和漏洞,您才能够判断出测试结论的价值。没有工具,测试中的漏洞是很难识别的――一个测试的失败或者崩溃是很显然的,然而测试中的漏洞确是隐蔽的。如果您不度量您测试的覆盖范围,您会继续运行您的测试并看到它们都通过测试,但是从来不会知道您的覆盖水平(因此这个测试运行的价值)正在恶化。51Testing软件测试网 X"yd-JtQ d B4Fi

U{P)@Xl0  PureCoverage 可以度量您的测试覆盖范围,并可以显示漏洞。它可以产生单线水平的报告;但是对于测试人员来说,在文档或者子目录水平通常是最容易捕捉、总结,并趋向覆盖数据的。这样可以识别在项目整个运行时间中覆盖较少范围的区域,可以显示测试的什么位置需要按行展开有代码变更和增添新特征的区域。51Testing软件测试网-J2G~^X*K{

~_cf:n0  测试人员使用 Purify

s!m*~*G Uy~$M;Z+lk051Testing软件测试网Q&FDToV(J,`C&`8?

  从测试人员或者测试经理的角度来看, Purify 是他们梦想的工具,因为它可以让您从您完成的工作中获得更多的价值。毕竟,您已经拥有运行这个项目的测试,因为它让您可以从您正在从事的工作中获得更多的价值。毕竟,您已经拥有了运行这个项目的测试,验证了它的正确性,报告了它的质量。利用 Purify 运行那些测试,您可以使它们执行双份的任务。也就是说,当您的测试忙于执行通常所执行的同样的工作时,您还可以利用 Purify 来监控这个程序的执行来检测和报告内存的使用错误。

|s\(VGFR051Testing软件测试网'T*s}F#O.J5W\I0em

  正如上面所提到的,许多内存使用错误都是潜伏的:程序似乎在正常地运行,即使它所面临着内存崩溃或者错误行为的危险。十分普遍地情况是,测试环境并没有最终的产品环境复杂,因此即使测试都通过了,程序也能够包含一个在发布版本后即将引起严重破坏的内存崩溃性的错误。Purify 可以通过同时检查内存访问错误来对您的现存正确性测试增加价值。

o"w1GTI*\2m0

YludI^0  这里是另一种使 Purify 成为梦想工具的方法:它可以报告出错误,以完全或者简单的方式。有些工具生成出数据后,您需要花很多时间评审或者解释或者用图示表示出来,以查看结果。但是 Purify 并不是那样的。Purify 可以识别您所测试程序中的真实错误,并向您指出正确的。Purify 有两种类型:它们被用黄色的“警告”图标标出,那些红色的是“错误的”表示。“错误”类型很明显反映了这个程序逻辑中的缺陷: Purify 报告了一个程序的错误,那也正是您所想要的。51Testing软件测试网I6x"y$^\#w4@3K!o/Q"s

C`)VZ%U[6ch&a V0  因为 Purify 对内存使用错误的分析是如此的彻底和完全,因此,即便在测试运行中 Purify 没有报告任何错误,它仍然也是很有价值的。当 Purify 不报告任何错误时,意味着这个程序(如测试的那样)并没有那些错误。这是一个好消息,即这是一个关于被测试项目高质量的正面陈述。

Ue[$zxY$h o.\,U0

A | JQNJ/O0  理所当然的是,这仅仅运用于 Purify 所发现的内存错误的类型,以及您的测试运用这个程序的方法。在这个程序中仍然可能存在内存错误,可能随着不同的代码路径发生,或者使用没有被测试的数据模型。51Testing软件测试网9i n-J7Mf!Y*Ha

(j,W?&\U-W:F0  这就是为什么在测试中识别漏洞时,使用 PureCoverage 与使用 Purify 同样重要。如果整个测试套件运用这个程序时不能真正完成它的引导,那么一个通过 Purify 的等级也并没有很大意义。就像一个交通警察, Purify 可以仅仅报告在有人监控时所发生的错误行为。PureCoverage 可以让您识别测试中的漏洞,因此您可以填充这个漏洞并使用 Purify 来诊断问题。

2]bc1}+L;L0

0X2P%Ko*gT,J0  测试人员使用 Quantify51Testing软件测试网iX['bgA

51Testing软件测试网/Nbp2f@%? zUN

  测试不仅仅是与正确性有关的。项目质量的另一个因素是执行。即使这个软件通常运作地很好并且给了您正确的答案,如果它慢得让人难于忍耐您也不可能拥有高质量的产品。并不明显得是,性能可以从一个构架到另一个构架或者从一个发布版本到另一个发布版本发生变更,比如您开始时可以有很好的性能,但是也可能在中途的某个位置遗失了好的性能。51Testing软件测试网I%ti0GyT/O.a:{

dmj0I(i'A3G8O(Y0  Quantify 让您能够度量项目的性能特征。您可以利用这个数据在整个过程中跟踪结果,辨认出从一个构架到另一个构架或者从发布版本到发布版本的性能。例如,想想您已经拥有一个服务器上测试,并且这个测试将带有标准数据包和事务序列。您可以利用 Quantify 来度量这个测试的性能,并且您可以在项目进展时对性能进行跟踪。证实新特征和代码变更并没有对整个性能产生严重影响是十分重要的。利用 Quantify 的 "图像偏差 1 " 特性,您可以利用函数调用关系图和 River of Time 来比较先前和当前的趋势,并重点突出新热点和时间陷阱。

&Tzk'] o051Testing软件测试网QKX8f#^'k"dL\0n

  如果一个测试套件含对 Quantify 度量特征的了解,它甚至能够缩小焦点来消除不重要的因素。例如,如果这个服务器要花费很长时间来启动,那么对于许多服务器应用软件来说就不重要:重要的启动之后事务性能的运行速率。一个 Quantify 知晓的测试可以使带有标准数据和事务的服务器“预热”(来填充这个缓存),然后使 Quantify 在完成所有事务之后开始数据交换。通过聚集连续事务的时间数据,这个数据可以消除一次的启动成本,对这个系统的核心性能是否以及怎样从一个构架到另一个构建或者一个发布版本到另一个发布版本进行变更有一个清晰的概念。51Testing软件测试网7a~N:mqR%S

51Testing软件测试网ek$v]tULc \w3O

  结论

D)Y*k&p0["\ffE051Testing软件测试网2y R|] Nt2]

  事实是:开发人员和测试人员的想法不同。他们使用工具的方式也不同。他们的共同点是对质量的关注。这两种角色都能够从使用 Rational PurifyPlus 的使用过程中获得利益,因为它既是开发人员也是测试人员的工具――它是一个质量工具。51Testing软件测试网\w+Z%OM


TAG: Rational IBM PurifyPlus

引用 删除 小不点_945   /   2012-04-24 11:31:24
顶一个子
引用 删除 小不点_945   /   2012-04-24 11:31:20
5
 

评分:0

我来说两句

Open Toolbar