英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料
基于jsp的Web应用程序的数据流分析和测试
摘要
应用程序通常依赖于服务器端脚本处理HTTP请求,生成动态内容,并与其他组件进行交互。服务器端脚本通常不检查任何编译器,因此容易出错。在本文中,我们在Java服务器页面(JSP)的上下文中采用传统的数据流测试技术——一个非常受欢迎的用Java技术开发Web应用程序的服务器端脚本。我们指出,JSP隐式对象和动作标记可以介绍几个独特的需要解决的数据流测试伪迹。测试模型考虑各种隐式对象和动作标记来捕获JSP页面的数据流信息。基于测试模型,我们描述一个方法来计算数据异常的JSP页面在过程间和会话间的数据流测试路径。
关键字:Web应用程序测试;数据流测试;软件测试;JSP测试
1 介绍
随着因特网的广泛接受,Web应用程序已经成为受欢迎的进行交易、提供服务和获取信息的方法。因此,需要有一个需求量大的、复杂的和高质量的Web应用程序。然而,Web应用程序通常是在短上市时间的压力下所开发的,往往不遵循传统的软件工程学科。尽管引入了Web技术的测试挑战,还是缺乏严谨和系统的方法,同时质量保证控制提出了一个Web应用程序的质量和可靠性的担忧。
最近,提出了多种方法来处理Web应用程序测试。大部分的方法专注于页面级别的Web应用程序的架构,提供测试人员一个路线图行使网页和它们之间的关系。然而,为了提供足够的代码覆盖率, Web应用程序仍然需要传统的结构性测试。因此,在本文中,我们的目标是进行基于Jsp的Web应用程序的数据流分析和测试,一个非常流行的利用Java技术开发Web应用程序服务器端脚本语言。
JSP页面已被广泛应用于基于Java的Web应用程序来处理HTTP请求,与Java组件,如Java bean进行交互来生成动态页面。重要的是要确保正确编写JSP页面以及他们与其他组件的相互作用被妥善处理。然而,JSP页面与HTML语句混淆脚本以便生成动态页面。这使得JSP页面很难理解和测试。
此外,作为一种脚本语言,JSP页面没有任何编译器检查,因此容易出错。虽然有存在的测试JSP页面的几个测试工具,如HTTPUnit和Cactus [17],JSP页面测试还是被认为是困难的,而且测试用例仍在特定的过程中设计。最重要,JSP页面已经引入了一组类似xml的标记和隐式对象采取行动。当执行JSP页面的内部程序逻辑使用传统数据流测试技术时,这些动作标记和隐式对象可以产生一些疑惑。
在本文中,我们识别和分析了JSP页面介绍的可能的数据流测试伪迹。测试模型提出了各种JSP隐式对象和动作标记引起的抽象的数据流信息。并且提出了一个涉及到隐式对象和动作标记来进行描述和演示的计算数据流测试路径的方法。
本文组织如下:第二节简要回顾现有的Web应用程序测试方法。第三节描述了由JSP隐式对象和动作标记产生的数据流测试伪迹。第四部分提出了一种数据流测试模型来表示这些JSP测试伪迹。第五节描述了一个方法来计算过程内、过程间和会话间的JSP页面数据流信息。最后一部分总结了结论。
2 相关工作
最近,更多的一些Web应用程序测试方法被提出。Yang等人[20]扩展了传统软件测试基础结构来支持Web应用程序测试。一套工具被开发用于帮助分析文档、开发测试用例、执行测试,、试测量监控失败和支持测试测量;Kung等人[8,10]提出抽象非结构化的Web应用程序中的对象和关系方面的测试模型。他们把HTML文件作为对象, 把HTML文档作为对象,并分析其与Web应用程序的其他组件的相互作用可能产生的数据流信息,提出了一种从对象内部,跨对象,客户机间的角度来选择测试路径运动的数据流测试策略。
Ricca和Tonella[16]描述了网页的分析模型,通过抓取页面、表格、框架和Web应用程序的关系。该模型提取Web应用程序的静态和动态页面。从模型中,测试用例可以测试网页之间的数据。Lucca等人[11]提出一个复杂的测试模型来表示一个Web应用程序的各种实体。根据他们的模型,提出了一个策略,先产生初步测试用例用于Web应用程序的单元测试和集成测试。
Wu and Offutt [21] 描述了用于构建使用页面的原子内容的静态和动态页面组合物技术和一些规则。基于用户交互,它们派生测试用例作为原子元素的静态网页的序列和可能的组合物。Offutt等人[12]提供了一个方法通过跳过客户端输入验证来测试Web应用程序。他们绕过输入值,从输入验证,输入参数,和控制流的角度来测试Web应用程序的漏洞,得出的实验结果证明了该方法的有效性。
Andrews等人[1]的模型采用分层有限状态机的Web应用程序的状态依赖行为。基本上,Web应用程序被划分成群集。每个集群表示一个FSM,其中状态代表网页或HTML表单,转换表示用户的投入和行动。然后测试序列从聚合的FSM生成。此外,该方法采用输入约束以减少状态空间溢出。
Benedict等人[2]提出一个自动化测试Web应用程序的工具。基本上,该工具可以生成一个指定的配置文件作为为基础的网站测试输入。根据测试输入,该工具能自动探索网站的静态和动态页面。
除了用于测试Web应用程序功能性的方法, Kallepalli 、Tian [7] 、 Tonella 和 Ricca [18] 利用Web应用程序的执行过程中收集的使用信息和故障日志来支持可靠性分析。同时,Elbaum等人[4]利用在Web应用程序得到的使用数据产生测试用例,这比使用白盒测试技术产生测试用例费用更低。
应当指出,在本文所考虑的数据流测试伪迹不同于[10]。本文的重点是通过在服务器端JSP页面中的隐含对象和动作标记引起的数据流,而[10]主要关注的是通过HTML文档的客户端脚本引入的数据流和由客户端和服务器的页面之间的HTTP协议导致的数据流。
3 JSP页面的数据流测试伪迹
数据流测试主要侧重于变量的定义和其潜在的探索程序的数据异常的用途。使用变量可归类为c-use(计算使用)或p-use(谓词使用),p-use无论变量在计算或输出语句中使用都可以发生,而p-use是在谓词语句中使用变量。一个程序的测试路径选择基于所述定义-使用链变量,其中变量的定义-使用链是自定义的变量使用的路径,可以没有任何干预而重新定义[15]。
为了探索JSP页面的数据异常,我们需要考虑的不仅是JSP页面的变量,还有JSP技术引入的隐式对象和动作标记。隐式对象,如请求和响应对象,允许JSP开发人员访问JSP提供的服务和资源,而无需显式声明的对象。特别地,一些隐式对象可以控制输入/输出和JSP页面的流动。例如,该请求对象可用于访问客户端请求提供的数据。同样请求对象可提供给所有的JSP页面服务一个给定的HTTP请求,这可能会导致JSP页面之间的数据交互。同样,隐含的session对象就像一个容器,可以存储名称-值对。通过session对象,可以通过不同的JSP页面使用或改变名称-值对的值。这使得数据可以通过一个用户会话跨JSP页面访问。因此,可以在JSP页面中引入数据流伪迹。
此外,响应对象的sendRedirect()方法允许HTTP请求重定向到另一个JSP页面。重定向不但可以影响数据在JSP页面中的流动,而且还可以引入两个JSP页面之间或JSP页面和Java servlet之间的数据交互。如图1所示,变量VAR1和var2的数据可通过response.sendRedirect()方法从Page1.jsp传递到page2.jsp,该方法引入了Page1.jsp和page2.jsp之间的数据交互。
除了隐含对象,JSP技术引入了一套标准的类似XML的动作标记,如lt;jsp:useBeangt; 和 lt;jsp:forwardgt;。动作标记的代码处理程序,允许JSP页面与其他JSP页面和Java对象交互关联。这可以引起JSP页面和Java对象之间的数据交互。例如,考虑图2的login.jsp页面。在第五行,login.jsp页面有一个lt;jsp:useBeangt;标记,分配给Java对象TestBean一个标记属性测试。然后在第8行此测试属性作为对象引用给TestBean对象,其中登录名和密码变量从login.jsp页面被传递给test.verify()方法。结果,因此,计算jsp页面的数据流信息时需要考虑lt;jsp:useBeangt;标记,来捕捉数据的jsp页面和Java对象之间的相互作用。
此外,在图2的第12行, lt;jsp:forwardgt;标记允许通过参数my_num将HTTP请求转发到debug.jsp页面。而lt;jsp:forwardgt;标记不仅改变了login.jsp页面流,同时也造成了login.jsp和debug.jsp页面之间的数据交互。注意,不同于传统的函数调用,lt;jsp:forwardgt;标记只是简单地传输从login.jsp页面到debug.jsp页面的执行控制而没有任何回复。这样的单向数据流必须考虑JSP页面的数据流信息可否正确计算。
表1总结了一些由JSP隐含对象和动作标记引起的基本的数据流测试伪迹。应该指出的是,除了lt;jsp:forwardgt;标记,lt;jsp:includegt;标记允许数据参数传递给另一个JSP页面或Java servlet,因此,可以引起JSP页面和servlet间的数据交互 [3]。尽管如此,lt;jsp:includegt;标记只包括从其他JSP页面或servlet到当前JSP页面的输出。控制流类似于传统函数调用,并且返回到当前JSP页面。
图一 通过response.sendRedirect()数据交互的一个例子。
图2 引起JSP动作标记数据交互的一个例子
表2 由JSP隐式对象和动作标记引起的可能的数据流伪迹
4 JSP页面的数据流测试模型
从控制结构的观点来看,虽然一个JSP页面可以包含多个脚本功能,但JSP页面更像是传统的方法,而不是对象类。原因是,一个JSP页面只有一个入口点,并在JSP页面中定义的所有功能只能在JSP页面中进行访问。因此,对于抽象JSP页面的数据流信息,我们认为JSP页面作为传统的程序,在捕捉他们的过程内和过程间的数据流中进行测试伪迹。
然而,不同于传统程序,JSP页面没有明确的调用层次结构,JSP页面的调用序列可以依赖用户会话中的导航路径。特别是,通过访问隐式的会话对象,不同的导航方案可能导致不同的JSP页面间的数据交互。这样的数据交互,可根据用户的导航路径,而不是发生基于JSP页面的控制流程进行。要明确捕获这些数据流伪迹,我们也通过采用模拟会话对象引入的数据流。
4.1 过程内数据流模型
为了表示对JSP页面间数据流信息的采用/使用,可以采用注有定义/注释信息的控制流图(CFG)。有定义—使用信息注释的CFG是一个有向图,其中节点代表JSP脚本,边缘的语句块代表发言块之间的执行流。特别是,CFG注释了变量,隐式对象,和感兴趣的动作标记发生了什么。
需要注意的是,如在第3节中所述,response.sendRedirect(),pageContext.forward(),和lt;jsp:forwardgt;标记可以构成单向数据流。为了捕捉这个伪迹,一个在CFG创建的“端”节点来表示控制流的终止。因此,该过程内测试模型可能不是一个单入单出的CFG。此外,在JSP页面中的HTML语句被认为是没有任何定义或使用的变量输出语句。此外,每个动作标记块,包括一个开始标记、零个或多个标记属性、标记体和一个结束标记,表示为在CFG的单块。
图3显示了图2的login.jsp页面的带有定义/使用注释的CFG。定义和变量,隐式对象和动作标记的用途是在相应节点进行注解。注意,在图2第12行上所有的声明从lt;jsp:forwardgt;标记开始到lt;/jsp:forwardgt;标记结束,被认为是lt;jsp:forwardgt;标记的一个单独的XML块。此块由CFG上节点12来表示。此外,“结束”节点在CFG由lt;jsp:forwardgt;标记创建。 在这节点,控制流无回复地从login.jsp页面转到debug.jsp面,这期间引入了过程间的数据流。
图3 login.jsp页带有定义/使用注释的CFG
4.2过程间数据流模型
为了表示涉及多个功能或者一个JSP页面,用定义注释过程间控制流图(ICFG)的数据流信息/使用信息采用。该ICFG已被用于在传统的计划[6,13]交互功能的过程间的数据流模型。为了捕捉JSP页面和Java组件之间的间数据流,ICFG建设已考虑到隐含对象和动作标记,但除了函数调用。拟建下面列出几种情况,其中间数据流可能发生和ICFG需要相应的JSP页面和Java组件。
bull; “主”脚本或JSP页面的脚本函数调用同一个JSP页面中的另一个脚本函数。
- 在JSP页面中通过lt;jsp:getPropertygt;调用相应的Java组件或lt;jsp:setPropertygt;标记或通过直接引用Java组件的方法。
- JSP页面调用另一个JSP页面或Java servlet通过的lt;jsp:includegt;的标记。
-
JSP页面调用另一个JSP页面或Java servlet通过的lt;jsp:forwardgt;标记的response.sendRedirect()方法,或pageContext.forward()方法
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[153784],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。