(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf_第1页
(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf_第2页
(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf_第3页
(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf_第4页
(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机应用技术专业论文)基于逆向工程的测试脚本转换框架的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要:随着自动化测试技术的不断发展, 测试软件。但是不同的自动化测试软件, 很多公司都为自动化测试开发了专业的 所能够识别并运行的自动化测试脚本都 是基于完全不同的语言。也就是说,如果用户已经使用了一种自动化测试工具软 件,那么此用户所有的自动化测试脚本都是基于这个软件而开发的,当用户想转 而使用其他的测试软件时,就意味着必须要重写所有的测试脚本,这个工作是相 当巨大而又繁琐的。 本文提出的测试脚本转换框架就是基于这样需求开发的,尽量减少测试脚本重 写的工作量,最大限度的实现脚本重用,基本实现自动化转换。基于软件工程中 逆向工程的思想,设计、实现这一框架。首先以w i n r u n n e rt s l 脚本作为基础案 例进行分析,在a n t l r 环境下进行编程,得到词法分析器、语法分析器和语法树。 对t s l 进行词法分析和语法分析后,把脚本解析为与测试相关的基本动作集。这 样就得到了不同软件测试脚本之间有共性的基本动作集。再使用r d f 三元组作为 标准格式,把这样的基本动作集定义为中间语言。并通过设计知识库组件,不断 扩充用户的自定义函数、动作,进而实现多种测试脚本的自动化转换。通过模板 替换,把中问语言的基本动作,映射到p a c a s 模块x m l 文件的相应位置。再通 过转换测试用例的解析器、翻译器和底层平台的具体支持框架,实现从中间语言 到目标语言的自动化翻译。这样就建立起了一个从已有脚本到中间语言,再从中 间语言到目标语言的测试脚本自动化转换框架模型。 模型的实现和仿真是通过以w i n r u n n e rt s l 为基础的测试案例到r a t i o n a l f u n c t i o n a lt e s t e r 测试案例来进行的,该框架可以自动化实现8 5 9 5 的翻译工作, 另外由于个别原因( 如目标软件不提供原软件某个特定功能) 不能实现自动化转 换的部分,可由测试人员辅助实现翻译工作。 关键词:逆向工程;编译;自动化测试;脚本翻译;6 岍u t ;r d f 分类号:t p 3 1 1 j e 塞交道太堂亟堂僮i 佥塞 一 旦s ! 壁! a b s t r a c t a b s t r a c t :a u t o m a t i o ns c r i p t i n gi st h o u g h t “a c r o s s t h eb o u n d a r i e s ”u s e r s e x p e r i e n c i n gd i f f e r e n ta u t o m a t e dt e s t i n gt o o l sf e e li th a r dt ot r a n s l a t et h e i rs c r i p t sf r o m o n et o o lt oa n o t h e r s of a rw eh a v eh e a r dt h ev o i c e sf o rm i g r a t i n gt h ea u t o m a t e d m i g r a t i o nf r o mu s e r sb o t hf r o mi n t e r n a la n de x t e r n a l a u t o m a t e ds c r i p t sm i g r a t i o n b e n e f i t sag r e a td e a l i tm i n i m i z e st h ee f f o r t sf o rr e w r i t i n ga l lt h es c r i p t st h u sa c h i e v i n g t h ea s s e t sr e u s e i ns h o r tt e mi th e l p su s e r sh a n d l el e g a c ya s s e t si nag r a c e f u lw a y i n l o n gt e r m ,i tb r i n g sa l o n ge x t r ab e n e f i t so t h e rt h a nm i g r a t i n gs c r i p t sb ya c t i n ga sa m e d i a t o rt oc o v e rt e s ta s s e t so fo t h e rt e s t i n gt o o l sa n di n t e g r a t et h e mi n t ot h ea p p o i n t e d p r o d u c t s i nt h i sp a p e r , t h ec o n v e m i o no ft h et e s ts c r i p ti sb a s e do nt h en e e d so ft h e f r a m e w o r kd e v e l o p e dt om i n i m i z et h ew o r k l o a do fr e - w r i t i n gt h et e s ts c r i p t ,t h es c r i p t t oa c h i e v em a x i m u mr e u s e ,a u t o m a t i o no ft h eb a s i cc o n v e r s i o n b a s e do ns o f t w a r e e n g i n e e r i n gi nt h ei d e ao fr e v e r s ee n g i n e e d n g ,w ed e s i g na n dr e a l i z et h ef r a m e w o r k u p o nd i s s e c t i n gt h et s ls c r i p t ,w es t r e t c ho u tt h eo b j e c tm a p p i n g ,e x t e r n a l i z et h ed a t a , a n dt h e nm a pt h eb a s i ct e s tr e l a t e da c t i o n st oo u ri n t e r m e d i a t ec o d e a n du s e rc o u l d d e f i n ei t e m si nk n o w l e d g eb a s ea n dg r a m m a rf i l e st oa l t e rt h eb e h a v i o ro ft h e “c o m p i l i n g ”p r o c e s s t h ei n t e r m e d i a t ec o d ei sc o m p a t i b l ew i t ht h ep a c a sd e s c r i p t i o n l a n g u a g e t h ea c t i o n sc o u l db ed e f i n e db ya c t i o nd e f i n el i s t i np a c a s a f t e rt h a tw e c a nt r a n s l a t ei n t e r m e d i a t ec o d et oj a v aw h i c hi st h es c r i p tl a n g u a g eo fr a t i o n a l f u n c t i o n a lt e s t e r t h ec o n v e r s i o nf r a m e w o r ko ft e s ts c r i p t sc a nt r a n s l a t e8 5 一9 5 c o n t e n to fat e s t s c r i p tt o t h el a n g u a g eo fa n o t h e rp l a t f o r m t h er e m a i n i n gp a r to ft h es c r i p tn e e df o r a r t i f i c i a lp a r t i c i p a t i o n k e y w o r d s :r e v e r s ee n g i n e e r i n g ;c o m p i l e r ;a u t o m a t e dt e s t i n g ;s c r i p tt r a n s l a t i o n ; a n t l r ;r d f ( 】a s s n o :t p 3 1 1 学位论文版权使用授权书 本学位论文作者完全了解北京交通大学有关保留、使用学位论文的规定。特 授权北京交通大学可以将学位论文的全部或部分内容编入有关数据库进行检索, 提供阅览服务,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。 同意学校向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:三二留 导师签名: 丝善 签字同期:劲l d 7 年占月占日 签字日期:伽罗年占月,罗日 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的研 究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表或 撰写过的研究成果,也不包含为获得北京交通大学或其他教育机构的学位或证书 而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作 了明确的说明并表示了谢意。 学位论文作者签名:互j 韶签字同期:勿研年易月tg 同 5 7 致谢 两年的硕士研究生学习期间,在学习和生活中我遇到了很多热心的老师、同 学和朋友,有了他们的关心、帮助、支持和鼓励,我才得以完成了硕士研究生阶 段学业。我仅在此表达我由衷的感谢。 首先,特别感谢我的导师赵宏老师,感谢赵老师在两年的研究生学习和生活 过程中给我的关怀和指导。首先,赵老师为我营造了良好的学习和实验环境。赵 老师渊博的专业知识,深厚的学术功底和独到的见解给我以莫大的帮助。赵老师 严谨的治学方针、孜孜不倦的钻研和勤奋进取的精神令我终生难忘。本论文的每 一步的前进都和赵老师的指导密切相关。 感谢我实习单位的同事们,在我毕业设计的整个过程中,你们给了我很多很 好的建议和启发,感谓 你们给予我无私的帮助。 感谢我的同学们,在我攻读硕士学位期间,你们都给予了我很多帮助,与你 们的讨论开阔了我的思路;是你们给了我生活的乐趣,使我的生活更加丰富和充 实,让我在写论文中获得了更宽广的视野。 最后,深深感谢我的父母和亲人,感谢他们多年来无私的养育和关怀! 在这里我感谢所有关心和帮助过我的人,谢谢你们! 1 绪论 1 1 研究背景 随着自动化测试技术的不断发展,越来越多的公司都为自动化测试开发了相 应的专业测试软件,如i b m 公司开发的产品r f t ( r a t i o n a lf u n c t i o n a lt e s t e r ) 、 r r ( r a t i o n a lr o b o t ) ,前m e r c u r vi n t e r a c t i v e 开发的产品w i n r u n n e r 、q t p ( q u i c kt e s t p r o f e s s i o n a l ) ,以及b o r l a n d 公司的产品s i l k t e s t 等。优秀的自动化测试软件给测试 工程师们带来了很大的便利,不仅减少了重复测试,使测试工作的效率大大提高, 也因为其更好的覆盖性,使测试工作的质量有了很大程度的提高。 但这同时也带来了一个很大的问题, 非常困难的。造成这一问题的原因在于, 即不同的自动化测试软件之间的迁移是 不同的自动化测试工具软件,所能够识 别并运行的自动化测试脚本都是基于完全不同的语言。如r a t i o n a lf u n c t i o n a lt e s t e r 的测试脚本是基于j a v a 的,而w i n r u n n e r 的测试脚本t s l ( t e s ts c r i p tl a n g u a g e ) 则更偏向于c 。也就是说,如果用户已经使用了一种自动化测试工具软件,那么此 用户所有的自动化测试脚本都是基于这个软件而开发的,而当用户想转而使用其 他的测试软件的时候,就意味着必须要重写所有的测试脚本,这个工作是相当巨 大而又繁琐的。 惠普于2 0 0 8 年2 月宣布不再对前m e r c u r yi n t e r a c t i v e 公司的w i n r u n n e r 功能 性测试的自动化测试工具提供更新和支持服务。这一决定意味着之前使用 w i n r u n n e r 作为自动化测试工具的公司不得不转而使用其他公司的产品,而这一转 移就带来了上述的迁移问题。 本文提出的自动化测试脚本转换框架就是基于这样需求开发的,尽量减少测 试脚本重写的工作量,最大限度的实现脚本重用,基本实现自动化转换。从小处 着眼,框架以更好的方式对遗留资源做以更新处理;从长远来讲,也为用户提供 了把资源迁移到某公司的产品平台上的服务。 1 2 国内外软件逆向工程研究现状 随着计算机技术的不断发展、用户需求的不断变化、行业业务的不断更新, 越来越多的软件系统不再能够胜任其原有职责。因此,整个行业趋势开始转向到 软件的更新和维护。现在比以往任何时候都更需要软件工程师可以对遗留的系统 资源有效地开展工作。因此,开始更多的把逆向工程的概念和技术引入到软件工 程领域。 从世界上第一台计算机产生以来,冯诺伊曼的程序存储计算机体系结构一直 占据主导地位,软件开发几乎就成了编写代码和程序的代名词。最初的代码编写 难度很大,为了使编程变得简单,从5 0 年代中期开始计算机科学家一直致力于高 级程序设计语言的研究,从而不仅产生了许多高级、灵活且应用广泛的语言,同 时还带动了编译理论与技术的飞速发展【1 1 。 早在1 9 6 0 年,针对逆编译的研究就己开始。由于第三代计算机的产生,使得 当时运行在第二代计算机上的软件面临着即将报废的危险。为了挽救这些价值不 菲的软件( 当时正大量运行在各种即将报废的第二代计算机上) ,同时也为加速开发 第三代计算机上的软件,美国的一些公司开始开展研究计划,研制了不少针对特 定软件的专门用途的逆编译工具用来进行软件移植,以及其他的一些研究例女1 :i - 程序转换、交叉汇编、翻译器等。编译技术出现后,人们同时也在做逆编译理论 的研究。在整个6 0 年代,逆编译方面的研究主要是开发专门用途的逆编译器作为 软件移植的工具。在那个年代,知识产权尚未得到如今的重视,而且针一对当时 的高级语言和目标代码的逆编译的效果也较理想,因此吸引了众多人力加入。很 可惜的是,最近二十年来,逆编译领域的研究人员大多己转行。究其原因,可能 一是随着程序设计语言的发展,由于复杂类型的引入等因素,编译系统修改和掩 盖的信息越来越多,使得逆编译研究越来越困难,研究难度远远大于相应的编译 过程;二是关于知识产权的讨论日趋激烈,导致许多逆编译工作只能秘密进行, 因此学术界公开的文献和成果不多。但是,在航天、军工和尖端事业这些领域中, 逆编译研究从未终止过。许多研究项目由于各种原因秘而不宣,所以只能通过公 开而且具有影响的研究来管窥一斑,例如:i b m 为n a s a 的航天飞机研制的逆编 译器【翻。 随着编译器的研究日益深入,作为矛盾的另一方面,逆编译的研究也逐渐有 所进展。1 9 7 0 年b a r b e 开发了p i l e r 系统,可以用于机器码和编译器级语言之间 自动的软件移植。这个系统的设计目标不是针对具体语言的,而是设计了一个相 当通用的逆编译器,它采用三地址码的抽象中间语言表示程序。直到现在,仍有 不少逆编译系统的研究者和开发者沿用他所提出的这种体系结构【引。 在8 0 年代,随着改革开放,国内计算机技术飞速提高,关于逆编译方面的研 究如火如荼的开展起来。首先,合肥工业大学微机所展开了用手工方法逆编译 u n i x 操作系统的研究,1 9 8 4 年在国家自然科学基金资助下,研究d u a l6 8 0 0 0 机器上的c 语言逆编译系统,成功开发了6 8 0 0 0 c 逆编译系统,获国家机电工业部 科技进步二等奖。1 9 8 8 年起开展“在i b mp c 系列机上研制c 语言逆编译系统 2 被列为国家七五攻关子课题。成功开发了8 0 8 6 c 逆编译系统,并发表题为r e s e a r c h o nd e c o m p i l i n gt e c h n o l o g y 的论文。1 9 9 2 年起,利用自筹资金,在8 0 8 6 c 逆编译 系统研究的基础上开展了商品化的c 语言逆编译系统的研究工作,1 9 9 5 年底完成 商品化系统d e c l e r 并投入使用。近年来国内在逆编译方面,关于逆编译器的研 究进展不大,虽然武汉华中科大在反汇编系统上实现了静态库函数识别功能,能 够给汇编代码增加一些库函数的信息,但由于其使用的方法仍旧基于c 语言逆编 译器的技术,因此只能适用于c 语言的静态库函数识别。在其他软件逆向工程方 面相对来说有更多的研究投入,例如程序的高级语义理解,代码混淆,数字签名 等【4 j o 虽然逆编译技术研究开始也算较早,但这方面公开发表的文献相对其他研究 领域来说实在是不多,而且许多早期的研究并未持续下来,至今很少见到真正实 用的产品推出。o g o r m a n 认为这可能与以下原因有关:一个原因是早期的研究者 发现所提出的技术对逆编译的实现并非十分有效;二是因为逆编译的应用涉及知 识产权问题;第三个原因是一些研究虽然正在进行,但由于各种原因不能公开。 从现有的有关逆编译的研究文献看,近年来关于逆编译的研究多数集中在逆编译 过程的两端:底层的可执行二进制代码分析,以及高层的程序语言和抽象信息分 析。前者包括直接针对可执行二进制代码的分析、硬件和软件的分析结合等等; 后者包括程序切片技术、分析对比各种语言和各种逆编译策略等等,也有把二者 结合起来的研究,例如代码的安全性验证、基于模式的指令分析等等。而在高级 语言的逆编译器研究方面,不同的语言所受的关注相差很大。例如,针对类j a v a 语言的逆编译资料相当多,而且逆编译的对象主要为j a v a a p p l e t a c t i v e x 控件和部 分服务器端的脚本代码。原因可能是由于在a p p l e t 中包含有大量符号信息的原因, 编译过程中丢失信息不多,因此逆编译过程可以进行的十分顺利。传统的c 语言 逆编译研究成果也有一些,多数是在前人研究的基础上加以改进和发展,例如结 合商业反汇编程序与静态库函数识别,或是把原有的逆编译技术移植到新平台上, 例如对d c c 逆编译器的移植。而针对最广泛实用的高级面向对象语言c + + 语言的 逆编译研究资料则十分罕见,究其原因,c + + 语言十分追求运行效率而牺牲了一部 分灵活性,因此在编译过程中抛弃了太多类型和符号信息,生成的二进制代码中 可利用的信息很少,使得类型以及其他信息的恢复相对j a v a 语言困难的岁5 1 。 本文中提出所要研究和实现的框架是非常具有可行性的,b o r l a n d 公司在2 0 0 8 年2 月就研究出了类似的解决方案,并作为产品出售。用户可以通过使用s i l k o n r a m ps e r v i c e s 这一产品来实现从w i n r u n n e r 平台到s i l k t e s t 平台的迁移。此外 惠普也提供了名为w i n q u i c k 的产品,可以实现从w i n r u n n e r 到q t p ( q u i c kt e s t p r o f e s s i o n a l ) 的迁移。但无论是b o r l a n d 公司还是h p 公司都并未公开其实现原理和 3 技术细节,并且只提供原软件脚本到其公司指定产品的特定转换,不满足用户从 原软件到任意软件转换的需要。所以本文研究和开发这样的测试脚本自动化转换 框架是有其实用价值的。 总之,逆向编译属于软件逆向工程领域,逆向工程的目标是从可运行的程序 系统出发,生成对应的源程序,系统结构以及相关的设计原理和算法思想的文档 等。它具有重大的现实意义和经济价值,可以将大量的遗留系统转化为易演化系 统,避免重复劳动,提高软件生产的效率和质量。相信在不久的将来,逆向编译 将为软件的发展做出更大的贡酬酬。 1 3 本文主要研究内容 作者阅读了大量的文献资料,并且学习了逆向工程的相关内容,深入研究了 如何设计并实现不同测试脚本之间的自动化转换框架。主要的研究内容包括以下 几个方面: 1 、学习逆向工程思想 逆向工程作为软件工程领域的一个重要课题,具有重大的现实意义和经济价 值。通过逆向工程可以将大量的遗留系统转化为易演化系统,避免重复劳动,提 高软件生产的效率和质量。本文开发的框架就是逆向工程在现实中的一个应用。 2 、分析自动化测试软件w i n r u n n e r , r f t 及其脚本 w i n r u n n e r 的测试脚本t s l ( t e s ts c r i p tl a n g u a g e ) 是一种类似于c 语言的脚 本语言,而r f r 脚本是基于j a v a 的。通过剖析脚本,提取出对象映射,具体化数 据,把测试相关的基本动作映射到中间代码。分析代码本身涉及到多个方面,包 括各种类型的声明,各种数据类型的映射,对象映射变换等。 3 、学习编译器开发环境a n t l r 及其文法 a n t l r ( a n o t h e rt o o lf o rl a n g u a g er e c o g n i t i o n ) 是根据一种可以嵌入如j a v a , c + + 或c 撑等辅助代码段的文法,来构筑出相对该文法的识别器、编译器或翻译器 的一种语言工具框架。使用时先在a n t l r 环境中,为特定语言编写相应的文法, 然后生成相应语言的编译器。 4 、设计并实现了从原脚本到动作集的a t m ( a u t o m a t e dt e s tm o d e l i n g ) 模块 这部分模块根据w i n r u n n e r 的语法定义和从知识库中获得的信息支持,生成 一个前端动态分析器。在创建前端分析器后,把用户的测试脚本信息写入,生成 4 a s t 和其他像符号表等中间结构。再把中间的数据结构提供给后端分析器,来具 体化数据,具体化对象映射和生成代码。 5 、建立知识库、对于术语进行明确的定义 定义事实、基本事实、标记等,并对知识库数据采用的存储模式r d f ( r e s o u r c e d e s c r i p t i o nf r a m e w o r k ) 进行研究。知识库结构由两层事实组成。底层包含基本的事 实,较高层包含了由底层建立的更高级别的事实。事实通过是连接事实还是行为 事实来归类的。连接事实反映元组和元组之间、事实和事实之间、符号和事实之 间的关系。行为事实反映对象的内在属性和行为。 6 、设计并实现了从动作集到测试脚本的p a c a s 模块。 p a c a s ( t h ep l u g g a b l e a n dc o d e f r e ea u t o m a t i o n s y s t e m ) 是为了把从 a t m ( a u t o m a t e dt e s tm o d e l i n g ) 提取出的测试动作集,重新转换为某特定软件的测 试脚本而开发的。它的主要组成部分主要包括为描述测试逻辑的特定域的语言、 为了对测试用例表述的基于x m l 的文档结构、为转换测试用例的解析器和翻译器、 底层平台的具体支持框架。 1 4 章节安排 本文结构组织如下: 第1 章介绍课题的研究背景,介绍了当前逆向工程和自动化测试的主要现状, 并且提出了当前自动化测试面临的一个实际问题,并概括介绍了本文的研究思路。 第2 章介绍逆向工程思想的一些重要概念及w i n r u n n e r 的测试脚本语言t s l 此外,第2 章还简单介绍了自动化测试工具的作用、如何通过自动化测试脚本使 用自动化测试工具。 第3 章研究了t s l 语言编译器的开发环境a n t l r 、a n t l r 环境下编程语言 的特点及技术研究。研究了中间语言数据存储模式采用的r d f 模型。 第4 章是论文的核心。分析了自动化测试脚本转换框架需求后,针对这个需 求提出自己的构思,在逆向工程逆编译的基础上设计并实现了一个自动化转换模 型。该模型能够基本实现测试脚本的自动化翻译,并且通过中间语言和知识库的 设计,使框架有扩充提高的空间。 第5 章基于逆向工程的测试脚本转换框架的实现,及结果分析。 第6 章总结了论文的工作,并指出今后需要改进和探索的地方。 5 2 逆向工程及自动化测试知识介绍 2 1 逆向工程概述 逆向工程是软件工程领域的一个重要课题,它的目标是从可运行的程序系统 出发,生成对应的源程序,系统结构以及相关的设计原理和算法思想的文档等。 它具有重大的现实意义和经济价值,可以将大量的遗留系统转化为易演化系统, 避免重复劳动,提高软件生产的效率和质量。从现有的有关逆向工程的研究文献 看,近年来关于逆向工程的研究多数集中在逆向编译过程的两端:底层的可执行 二进制代码分析,以及高层的程序语言和抽象信息分析。而在高级语言的逆向编 译器研究方面,不同的语言所受的关注相差很大。 通过逆向工程技术,可以对已有代码进行结构分析,并通过u m l 方式建模、 表示出来。文献中以u m l 中时序图为例,系统的阐述了如何从源代码到字节码, 字节码再如何执行,最后生成动态模型( 时序图) 的过程。其中主要包括数据收 集、元模型建立、可视化、模型后处理、输出几个主要工作内容。通过使用逆向 工程,还能将原有系统中有用的接口、数据进行分析、提取,直接在新系统中实 现重用1 1 0 】。程序结构和解释从理论上表述了如何提取程序、数据、元语言,而 a n t l r 可以提供一个环境来帮助实现这个过程。 在对已有系统进行逆向工程分析时,有几个方面的问题需要特别注意。如在 对语言进行逆编译的过程中,涉及到的语义抽象、谓词消除等问题。逆编译技术 可以将二进制可执行程序转换为等价的高级语言形式代码,它是软件逆向工程研 究的一个重要方向。对机器指令进行语义抽象以产生中间代码表示是逆编译程序 的一个关键环节。文献介绍了反编译过程中通过语义表述如何由汇编代码生成更 高级的中间表示的实现技术,将语义描述技术与体系结构特性结合,有效解决了 语义抽象问题。而体系结构支持判断执行,提高指令级并行性,但是编译器为了 充分利用该特性而做的优化将程序代码进行深度重构,对逆向工程来说,很难从 优化后的可执行代码中恢复原程序逻辑。文献提出了消除谓词的反优化技术,从 而提高了可执行代码逆向工程的质量1 1 1 j 。 2 2w i n r u n n e r 测试脚本语言t s l m e r c u r yi n t e r a c t i v e 公司的w i n r u n n e r 是一种企业级的自动化测试工具, w i n r u n n e r 所执行的t s l 是一种强大的、类似于c 语言的测试脚本语言。t s l 是 6 一种高级语言,将传统的编程语言强大的功能性、灵活性与w i n r u n n e r 使用的特 定函数相结合。使用户可以修改已记录的资料或程序复杂的测试套件。 t s l 的函数类型主要有四类,每一类函数对应相应的需求,如表2 - 1 所示。 表2 - 1t s l 函数类型及其需求 f u n c t i o nt y p e r e q u i r e m e n t a n a l o gp e r f o r mm o u s e a n dk e y b o a r di n p u t c o n t e x ts e n s i t i v e p e r f o r mo p e r a t i o n so ng u io b j e c t s s t a n d a r d p e r f o r mb a s i cp r o g r a m m i n gl a n g u a g eo p e r a t i o n s c u s t o m i z a t i o n c o n f i g u r et h et e s t i n gt o o la c c o r d i n gt or e q u i r e m e n t s t s l 编程语言的基本要素分为: 1 、变量和常量 变量和常量可以是字符串或数字。声明是可选的,如果变量没有被声明,它的 类型是在编译时根据其内容确定的。 变量名可以包含英文字母( a - z 和a - z ) ,数字,和下划线u 。第一个字符必须 是字母或下划线。t s l 是区分大小写的,y 和y 是两个不同的字符。另外,内置 函数和关键字( 例如i f 、w h i l e 、s w i t c h ) 不能作为变量名。 2 、操作符和表达式 t s l 支持六种类型的操作符:算术运算符、连接运算符、关系运算符、逻辑 运算符、条件运算符和赋值操作符。运算符用于通过连接基本要素来创建表达式。 在t s l 中,表达式可以包含变量、常量函数调用和其他表达式。 3 、声明语句 任何以分号结尾的表达式都是一个声明。在控制流结构中,一个单独的声明可 以被一组声明所代替。成组的声明被包含在大括号内,大括号内每一句独立的声 明也都以分号结尾,大括号本身除外。 4 、控制流 t s l 的控制流声明包括i f e l s e 和s w i t c h 这种条件控制;w h i l e ,f o r , d o 循环控制; b r e a k ,c o n t i n u e 修改循环控制。 5 、t s l 支持关联数组 t s l 数组的独特之处在于:数组的声明和初始化是可选的;每一个元素都有一 7 个用户定义的字符串下标。不同于数组的固定长度的数字下标,t s l 数组包括一 个未定义的若干要素。每个要素包括一个用户定义的字符串下标。 6 、输入和输出 t s l 提供一些内置函数,允许在屏幕上读、写文件。对于u n i x 产品,s p r i n t f 函数返回给变量一个格式化字符串。对于w i n r u n n e r 及其他p c 产品,使用f i l e _ o p e n 函数打开文件进行读写。f i l e _ _ p r i n t f 函数写文件,f i l e _ g e t l i n e 读文件。f i l e c l o s e 函 数能关闭通过f i l eo p e n 打开的文件。 有三个函数形成了输出的测试环境。r e p o r t _ m s g 函数打印用户定义的字符串 表达式到测试运行报告上。p a u s e 函数停止测试运行,并在屏幕上的消息框显示字 符串表达式。e m a i l _ s e n d _ m s g 函数发送电子邮件的内容给指定的一个或多个收件 人。 7 、内置函数 许多t s l 函数对应用的对象执行操作。当使用这些函数时,一个函数参数标 识函数将要执行的对象。如果对象在图形用户界面,可以通过它的逻辑名称标示 对象。也可以通过指定描述对象的属性和值来标示对象。 8 、用户定义的函数 除了提供了内置函数,t s l 允许用户在测试脚本中设计和执行自定义函数。 9 、外部函数声明 外部函数声明是用来声明不是t s l 部分,但是属于外部c 语言库的函数。外 部声明必须在函数被调用前出现。 2 3 自动化测试软件研究 2 3 1 实施自动化测试的意义 1 、相似的界面和功能 对于功能已经完整和成熟的软件,每当发布一个新的版本后,大部分功能和界 面都和上个版本相似或完全相同,这部分功能特别适合使用自动化测试,从而 可以让测试达到测试每个特征的目的。 2 、高效率的测试 8 有的软件版本发布周期比较短,开发周期可能只有短短的几个月,而在测试期 间每1 天或者每2 天都要发布一个版本供测试人员测试,一个系统的功能点有几 千个上万个,人工测试非常的耗时和繁琐,这样必然会使测试效率低下。 3 、具有一致性和可重复性 由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性, 这对测试人员来说是很难做到的。由于自动化测试的一致性,很容易发现被测软 件的任何改变。 4 、更合理的利用资源 在理想情况下,自动化测试能按计划完全自动化的运行,在开发人员和测试人 员不可能2 4 小时工作的情况下,自动化测试可以胜任这个任务,使测试可以在周 末和晚上执行。这样充分的利用了公司的资源,也避免了开发工作和测试工作之 间的等待。 5 、解决开发与测试之间的矛盾 通常在开发的末期,进入集成测试的阶段,由于每当发布一个版本的初期,测 试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间。事实上 在迭代周期很短的开发模式中,存在更多的矛盾,自动化测试可以解决其中的主 要矛盾。 6 、将繁琐的任务转化为自动化测试 大量重复的测试是非常繁琐的,并且需要消耗大量的人力才能够完成。自动化 测试能够很好的解决这个问题,不需要繁琐的劳动和大量的人力。 7 、增加软件信任度 只有经过大量测试案例测试过的版本才是可靠的,使用自动测试能够保证在短 时间内完成大量的测试案例。 2 3 2 测试脚本和自动化测试工具的关系 自动化测试工具和测试脚本的关系主要有两个方面: 1 、不少自动化测试工具提供测试过程的全程录制,即可以捕捉所有测试动作, 将其表现为测试脚本。 2 、测试脚本本身都是规范的脚本语言,测试人员可以直接编写测试脚本,并 9 通过测试工具所提供的a p i 直接和测试工具关联,这样测试工具可以直接调用这 些脚本,实现自动化测试的过程。例如,r a t i o n a lf u n c t i o n a lt e s t e r 的脚本语言就是 j a v a ,测试人员可以直接编写基于j a v a 的测试脚本。 2 4 本章小结 本章主要介绍了逆向工程思想的一些重要概念,并研究了w i n r u n n e r 自动化测 试平台的测试脚本语言t s l 。此外,还简单介绍了自动化测试工具的作用、如何 通过自动化测试脚本使用自动化测试工具。 1 0 韭瘟窑盟太堂鲤芏垃:| 幺毫萋蕴燕型露让担羞拄苤班宜 3 系统模型设计相关技术研究 31 编译器开发环境a n t l r 及其文法研究 3 1 1a n t l r 简介 a n t l r ( a n o l h c rt o o lf o rl a n g u a g er e c o g n i l i o n ) 是根据一种可以嵌入如j a v a , c + + 或雠等辅助代码段的文法,来构筑出相对该文法的识耕器、编译器或翻译罂 的一种语言工具框架。可以通过在a n t l r 环境中编写针对某种语言的文法,来生 成编译器。a n t l r 定义中提到的语言识别器、编译器和翻译器统称为语法分析器。 事实上,a i 眦只是生成了相应语言编译器的源代码,使用时还需要对其进行编 译。 gs “:喘薹i 囊毳;! 裂尊肇褂。w “ i ! , i 竺! 帆叫 口_ d 日。一口l e “_ 自 目 自1 圈可眄毒。圈南i 囤 图3 - 1 】眦的开发环境 圈3 - 1 是a 1 m 的实际编程环境,a l 眦的文件格式为g ,其中文本框内为 编写文法的空间。图中框图所示部分为针对c 语言的文法的头文件。 些立窑堂厶翌巫1 主位溘奎垂监世型选i l 担苤熊盛业宜 图3 - 2 a n t l r 文法写法 图3 - 2 中右边文本框定义了d c c l a r a t i o n _ s p e c i f i c r s ,f u c t i o n _ d e f i n i t j o n , d e c l a r a t i o n 的文法,左边的文本框对应已定义的几个元素。 ! ”:矗 :嚣= 茹 益“ :慧:k 。, 篓: f 虹丑 班寻固叵艇1 彳 r1固 e 士 1 二二 二 j 竺竺芒! ! 兰 号茸 等 l纠 i ,。,j ,。_ _ 田 圈二j 叵巨i j 弓诃圈:i 匿? m _ 目3 - 3 a n t l r 编译过程和语法树 图3 - 3 通过生成的语法树,表示了语法分析的逻辑流程。但是这个语法树是存 在于内存的,并不能直接使用,如果想要调用这些编译的结果,还需要在文法中 一节 口 口 日 一 口叶 嵌入j a v a 代码,把结果指定输出到相应位置。 3 1 2 创盯l r 的特点 a n t l r 做语法解析时,不仅仅是承认语言,更重要的是实现语言的交互和词 法分析、报告分析时产生错误、构建抽象语法树并调用用户操作。可以利用这个 分析工具来完成词法和语法分析的工作,并帮助生成中间级的元模型。除了有强 大的分析策略,a n t l r 还有许多功能,使得它相比其他分析工具有更好的特性。 例如a n t l r 整合了规范的词法和语法分析。一个单独的词汇规则是不必要的,因 为词汇正则表达式可放置在双引号和在a n t l r 语法中和正常语句一样应用。接受 语法结构的扩展表( e b n f ) 符号并提供方便的自动抽象语法树结构。生成以c ,c + + , j a v a 的递归词法解析器,以便和a n t l r 输出有一个明确的对应的语法规范。因此, 这对非解析专家设计和调试a n t l r 语法相对容易的。具有自动和手动设施的错误 恢复和报告。这个自动机制是简单而有效的,分为许多分析情况,称为解析器例 外处理。简化了开发的错误处理质量要求,使每个语法规则的参数和返回值便于 通过属性解析。由于a n t l r 转换到每个规则的语言功能的递归下降分析器,规则 参数只是一个函数参数,规则可以有多个返回值。此外,a n t l r 还有许多其他功 能。a n t l r 本身具有高度可移植性,能输出可以调试现有源代码级的调试器,并 能容易的集成到编程的应用。 3 1 3a n t l r 技术研究 使用a n t l r 生成编译器需要在a n t l r 环境下,使用特定的文法进行编程。 1 、编写词法分析器 词法分析对构成源程序的字符串进行扫描和分解,对源程序一个一个字符地读 取,从字符中识别出一个个的单词( a r c r l r 称之为t o k e n ) 。并对单词进行分类, 然后组织成统一的格式,形成记号序列记号流的过程。单词是高级语言中有实在 意义的最小语法单位,它由字符构成,单词一般可分为标识符、关键字、整常数、 浮点常数、字符、字符串、运算符、界限符等。词法分析一般将单词最后组织成 这样的格式:( 单词,类型内码) 。如c 、l 、a 、s 、s 五个字符构成了关键字c l a s s , 2 、3 构成了一个整型数2 3 。词法分析过程中会滤掉源程序中的空格、换行符和注 释等不属于源程序的字符,还可以将记号归类,哪些记号属于标识符,哪些记号 属于关键字、整数、浮点数等。记号流是语法分析的基础。 2 、编写语法分析器 语法分析是根据词法分析输出的记号流,分析源程序的语法结构,并添加代表 语法结构的抽象单词( 如:表达式、类、方法等) ,按照语法结构生成语法树的过 程。前面讲的词法分析后形成的记号序列是描述程序的直接标识符序列,是线性 的。它没有反映出源程序的结构。而语法分析后生成的语法树是可以表示源程序 结构的数据结构,语法树的叶子节点就是记号。 用a h t l r 开发一个语法分析器大致分三步,第一步:写出要分析内容的文法。 第二步:用a h t l r 生成相对该文法的语法分析器的代码。第三步:编译运行语法 分析器。 g r a m m a re : o p t i o n s ( o u t p u t = a s t ; p r o g r a m :s t a t e m e n t + : s t a t e m e n t :( e x p r e s s i o ni v a r = e x p r 。e s s i o n ) 。;。 e x p r e s s i o n :m u i t e x p rl i + 。 1 1m u l t e x p r ) 。) ls t r i n g ; m u l t e x p r :a t o ml a t o m ) ; a t o m :i n ti ( e x p r e s s i o n ) ; v a r :i a z i a z 。l + ; l n t :o 一9 + ; s t r i n g :”l f a z l a z l ”) + ) 。; w s :l 。i 、t 。l ,、n l x r ) + s k i p l ) ; ; 图3 4 一个简单的文法示例 如图3 4 启始规则p r o g r a m 表示整个e 程序,要求生成语法树( a s t ) ,s t a t e m e n t 表示语言中的声明项,有表达式和赋值两种声明e x p r e s s i o n 和v a r = e x p r e s s i o n 表达式由一个或多个表达式和整形组成,也可以是字符串。前面小写的元素定义 是语法元素定义,后面大写字母的元素为词法元素定义。 3 1 4a n t l r 的信息流程 图3 5 介绍了a n t l r 的整个信息流程,通过文法的定义,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论