• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

将 Purify 整合到软件开发和测试过程中

发布: 2009-4-21 14:19 | 作者: 网络转载 | 来源: 测试时代采编 | 查看: 338次 | 进入软件测试论坛讨论

领测软件测试网


表格 1. 可以与 Purify 选项一起使用的转换符号
字符转换到 %v 可执行程序名称,小写字母 V (您所运行的可测量的执行文件的名称) %V 这个程序的完整路径名称,大写字母 V(/被_所代替) %p 进程 ID(pid 或者 PID)

表格 2. 可以使用在 Exit-命令的转换符号 (-run-at-exit)
字符转换为 %z 字符串值true或者false,表示是否有任何错误或者渗漏的得链被打印(当 Purify 找到一些您感兴趣的事务,可以利用它使您的退出脚本有条件地执行) %x 项目的退出状态(0如果这个程序没有调用退出命令) %e 打印的明显的访问错误(显示的) %E 打印出的所有错误的总数 %l 内存泄露字节的总数(小写字母 L) %L 存储潜在渗漏的字节总数(大写字母 L)

利用这个程序退出状态

您已经学习了如何在可测试程序运行的末尾运行您的脚本。Purify 还给了您们一些穿过它退出状态的一些信息。默认情况下,Purify 是不会修改您程序的正常退出状态的。然而,如果 Purify 发现任何访问错误或者内存泄露,您可以利用一个具体的退出状态来选择使您的程序退出。这是一个减小测试单元中失败运行的便利的方法。利用 -exit-status=yes 选项能够使 Purify 插入表明运行时错误的标志。如果有一些大写字母的 Purify 错误,这个状态代码可以通过操作下面值的 bit-wise OR 来处理,根据展现的存储错误的类型:

0x40:存储访问错误 0x20:内存泄露 0x10:潜在内存泄露

另一方面,您可以在您的代码中将这些命令替代为退出(状态),以及替换带有purify_exit(status) 功能的 main() 中的为 返回陈述。(请看这篇文章中关于 Application Programming Interface 功能的参考资料。)如果您只关注这个存储访问错误,您要么可以通过使用 -leaks-at-exit=no选项在退出时关闭渗漏缺陷,要么可以抑制内存泄露和潜在渗漏消息。您还可以忽略退出状态的适当的字节。然而,Purify 报告中的程序概要消息总是在任何其它 Purify 结果状态进入它之前显示您最初的退出状态 。

列表 1是一个例子,它利用这个 -exit-status 选项并使用这个退出状态来决定是否有错误在这个程序中被发现。


列表 1. 退出状态选项的例子
$ cat prog.c #include <stdio.h> int main() { int i,j; i = j+1; /* UMR: Reading un-initialized variable j */ return 0; } $ purify -exit-status=yes cc -g prog.c -o prog.pure $ prog.pure $ echo $? 64

这个退出值不是 0(零),如 main 函数中所返回的。它是64,在十六进制中它是 0x40。这是因为 Purify 在这个程序中检测到一个 Uninitialized Memory Read (UMR) 存储访问错误。这个选项可以简单地合并到一个脚本中,这个脚本根据发现的错误核查运行的可执行文件和采取适当行为之后的退出状态,比如利用这个测试程序填充一个缺陷报告,或者在这个 Purify 日志中 记录结果。

如果您想要您的可测试应用软件在检测到第一个错误之上退出,您可以利用 -exit-on-error选项。当您使用这个选项的时候,这个程序退出的时候 Purify 遇到一个错误(通过使用 suppress 和 kill 指令进行隐藏的错误是不计算的)。

邮寄 Purify 结果以及协助分析

Purify 拥有一个-mail-to-user 选项,您可以用来自动报告每日或者每周的 Purify 结果。当您使用这个选项的时候,Purify 将通过电子邮件发送错误报告到测试人员开发人员的具体地址中,当他们收到这个邮件时会验证这个结果。例如,假设您用这种方法净化您的程序:

$ purify -mail-to-user=yourid cc -g prog.c -o prog.pure

当您运行这个 prog.pure 可执行文件之后,Purify 报告将自动发送到 yourid 邮件地址。

有时候,分析这个错误的时候,查看功能名称和其它详细情况是十分有用的,比如完成这个文件存储的路径或者 PC 值。您可以使 Purify 通过使用这些选项来展示这样的信息:

-show-pc 向您显示了完全的 PC 值 -show-pc-offset 向您显示了从这个功能的开始的 pc 移位 -show-directory 显示了括功能存在的地址列表 (需要有调试的程序构建)

例子

在这部分中,您将看到一个使用了您在这篇文章中学到的绝大多数选项的例子。列表 2显示了GNUMakefile,包括修改的构建和测试系统 (请看下载,从而获取这篇文章所使用的源代码)。如果这个应用软件的名称为 memerrors,那么构建 Purify 的应用软件所附加的新目标的名称就为 memerrors.pure。类似的,利用 Purify 的应用软件可以添加的新目标。

Purify 运行时选项在运行这个测试前就设置好了。对于 -log-file 选项,只能创建一个日志文件名称,利用转换符号和日期命令 (这个文件名称包括程序名称,过程 ID,日期,以及时间)。这个 -run-at-exit 选项用来表明,这个程序退出之后,这个 addsummary.sh脚本就应该运行,凭借转换符号伴随着具体的变量(也就是说,这个日志文件名称,无论是否有错误调令链被打印,退出状态,存储错误发现的数量,内存泄露的规模,以及潜在存储泄漏)。由于这个 -exit-status=yes 选项没有被使用。Purify 将不能覆盖这个退出状态和保持这个程序最初退出时的状态。


列表 2. 附有修改过的构建和测试系统的 GNUMakefile
# Name of Logfile using Purify conversion symbols and date command DATEANDTIME := `date +%Y_%b_%d_%H_%M_%S` LOGFILENAME := %v_pid%p_$(DATEANDTIME).plog # Script to run when Purify'ed program exits PURIFYEXITSCRIPT:= \"addsummary.sh $(DATEANDTIME) $(LOGFILENAME) %z %x %e %l %L\" # Purify Options PURIFYOPTIONS := -log-file=$(LOGFILENAME) -run-at-exit=$(PURIFYEXITSCRIPT) # Targets and Rules all: runtest runpurifytest # Clean clean: $(RM) memerrors memerrors.pure # Build Application memerrors: memerrors.c $(CC) -o $@ $? # Build Purify'ed application memerrors.pure: memerrors.c purify $(CC) -g -o $@ $? # Run Test Suite runtest: memerrors ./memerrors # Run Test Suite with Purify'ed application runpurifytest: memerrors.pure echo Starting test at $(DATEANDTIME) ..... env PURIFYOPTIONS="$(PURIFYOPTIONS)" ./memerrors.pure # End of GNUMakefile

这个显示在列表 3中的 addsummary.sh 脚本创建了一个 HTML 报告。它维护了一个到目前为止对每个 Purify 运行都有一个 HTML 表格行的文件列表,反之则是按照时间顺序的。当这个脚本在现存的 Purify 之上执行时,它创建了一个包含最近每次运行的 HTML 表格行的新文件列表,附加先前行的文件,并用新文件列表取代了旧的列表。然后它通过包装这个文件列表的 HTML 头部和页脚从而产生了一个 HTML 文件。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

32/3<123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网