计算机科学与探索 1673-9418/2019/13(11>1839-13 Journal of Frontiers of Computer Science and Technology doi:10.37785.issn.1673-9418.1812004 Web应用程序搜索功能的组合测试 吕成成,张龙2,邓茜2,曾凡平+,严俊2,张健2 1.中国科学技术大学计算机科学与技术系,合肥230026 2.中国科学院软件研究所计算机科学国家重点实验室,北京100190 3.安徽省计算与通讯软件重点实验室,合肥230026 +通讯作者E-mail:billzeng@ustc.edu.cn 摘要:为了方便用户查询感兴趣的资源,许多Wb应用程序会提供搜索功能。如果搜索功能存在故障,将会 导致Wb应用程序的功能异常,甚至会引发安全问题,因而需要对其进行充分的测试。可以使用组合测试的 方法生成测试用例测试Wb应用程序的搜索功能,其中每一个测试用例是由特殊字符组成的字符串。对于引 起系统错误的测试用例,使用组合测试错误定位的方法找到系统错误是由哪些字符组合引起的。使用该方法 对学校、政府和事业单位的96个网站进行了测试,发现其中23个网站在搜索某些特殊字符组合时,会引起服 务器错误响应。错误定位结果表明,56%的服务器错误响应是由“%”“<”“,”“”和其他字符的组合引起的。 关键词:Wb测试;组合测试;错误定位 文献标志码:A中图分类号:TP311 吕成成,张龙,邓茜,等.Web应用程序搜索功能的组合测试[J.计算机科学与探索,2019,1311):1839-1851 LV CC,ZHANG L,DENG X,et al.Combinatorial testing of search function in Web application[J].Journal of Fron- tiers of Computer Science and Technology,2019,13(11):1839-1851. Combinatorial Testing of Search Function in Web Application" LV Chengcheng',ZHANG Long',DENG Xi,ZENG Fanping',YAN Jun2,ZHANG Jian? 1.Department of Computer Science and Technology,University of Science and Technology of China,Hefei 230026,China 2.State Key Laboratory of Computer Science,Institute of Software,Chinese Academy of Sciences,Beijing 100190,China 3.Key Lab of Computing and Communication Software of Anhui Province,Hefei 230026,China Abstract:In order to facilitate users to find resources of interest,many Web applications may provide search function.If there is a failure in the search function,the Web application will run abnormally and even security problems will be caused.So the search function needs to be fully tested.This paper uses the method of combinatorial *The Frontier Science Key Project of Chinese Academy of Sciences under Grant No.QYZDJ-SSW-JSCO36(中国科学院前沿科学重 点项目),the National Natural Science Foundation of China under Grant No..6l772487(国家自然科学基金),the National Key Research and Development Program of China under Grant No.2018YFB08O34O0(国家重点研发计划). Received 2018-12-03,Accepted 2019-03-11. CNKI网络出版:2019-04-02,http:/kns.cnki.net/KCMS/detail/11.5602.TP20190329.180s.011.html (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
* The Frontier Science Key Project of Chinese Academy of Sciences under Grant No. QYZDJ-SSW-JSC036 (中国科学院前沿科学重 点项目); the National Natural Science Foundation of China under Grant No. 61772487 (国家自然科学基金); the National Key Research and Development Program of China under Grant No. 2018YFB0803400 (国家重点研发计划). Received 2018-12-03, Accepted 2019-03-11. CNKI网络出版: 2019-04-02, http://kns.cnki.net/KCMS/detail/11.5602.TP.20190329.1805.011.html Web应用程序搜索功能的组合测试* 吕成成1 ,张 龙2 ,邓 茜2 ,曾凡平1,3+ ,严 俊2 ,张 健2 1. 中国科学技术大学 计算机科学与技术系,合肥 230026 2. 中国科学院 软件研究所 计算机科学国家重点实验室,北京 100190 3. 安徽省计算与通讯软件重点实验室,合肥 230026 + 通讯作者 E-mail: billzeng@ustc.edu.cn 摘 要:为了方便用户查询感兴趣的资源,许多Web应用程序会提供搜索功能。如果搜索功能存在故障,将会 导致Web应用程序的功能异常,甚至会引发安全问题,因而需要对其进行充分的测试。可以使用组合测试的 方法生成测试用例测试Web应用程序的搜索功能,其中每一个测试用例是由特殊字符组成的字符串。对于引 起系统错误的测试用例,使用组合测试错误定位的方法找到系统错误是由哪些字符组合引起的。使用该方法 对学校、政府和事业单位的96个网站进行了测试,发现其中23个网站在搜索某些特殊字符组合时,会引起服 务器错误响应。错误定位结果表明,56%的服务器错误响应是由“%”“<”“’”“\”和其他字符的组合引起的。 关键词:Web测试;组合测试;错误定位 文献标志码:A 中图分类号:TP311 吕成成, 张龙, 邓茜, 等. Web应用程序搜索功能的组合测试[J]. 计算机科学与探索, 2019, 13(11): 1839-1851. LV C C, ZHANG L, DENG X, et al. Combinatorial testing of search function in Web application[J]. Journal of Frontiers of Computer Science and Technology, 2019, 13(11): 1839-1851. Combinatorial Testing of Search Function in Web Application LV Chengcheng1 , ZHANG Long2 , DENG Xi2 , ZENG Fanping1,3+ , YAN Jun2 ,ZHANG Jian2 1. Department of Computer Science and Technology, University of Science and Technology of China, Hefei 230026, China 2. State Key Laboratory of Computer Science, Institute of Software, Chinese Academy of Sciences, Beijing 100190, China 3. Key Lab of Computing and Communication Software of Anhui Province, Hefei 230026, China Abstract: In order to facilitate users to find resources of interest, many Web applications may provide search function. If there is a failure in the search function, the Web application will run abnormally and even security problems will be caused. So the search function needs to be fully tested. This paper uses the method of combinatorial 1673-9418/2019/13(11)-1839-13 doi: 10.3778/j.issn.1673-9418.1812004 计算机科学与探索 Journal of Frontiers of Computer Science and Technology
1840 Journal of Frontiers of Computer Science and Technology计算机科学与探索 2019,13(11) testing to generate test cases to test the search function of Web application,where each test case is a string of special characters.For test cases that can cause server errors,this paper uses the method of fault location based on combinatorial testing to find the combinations of characters that can cause server errors.This paper tests 96 websites,including schools,governments and institutions,and it is found that 23 of these sites will meet a server error when searching for some special combinations of characters.The experimental result of fault location indicates that56%of server errors are caused by the combinations of“%”“<"“,”“”and other characters. Key words:Web testing;combinatorial testing;fault location 1引言 感信息,如服务器物理路径、堆栈调用信息、数据库 随着互联网的快速发展,Web应用程序迅速进入 信息等。 普通用户的视野和。为了方便用户查询感兴趣的资 此类故障的存在不但会影响用户体验,而且极 源,许多Web应用程序会提供搜索功能。浏览器将 有可能成为安全问题。比如,攻击者在寻找SQL 用户输入的关键词提交给服务器,然后服务器处理 (structured query language)注入点时,通常会输入某 该请求并将查询结果返回给用户。如果开发者在实 些特殊字符,如果服务器返回错误,很可能可以进行 现该功能的时候,对用户输入的合法性没有进行充 SQL注入,因为这表明Wb应用程序中对用户提交 分的验证,可能会带来安全隐患。如果用户输入的 的数据未进行合理的验证或过滤。同时,错误页 数据中含有某些特殊字符,使得服务器程序无法正 面暴露的敏感信息会为攻击者提供极大的便利。 常执行,就会产生错误响应,并将异常代码抛到前端 因此,对搜索功能的充分测试是非常有必要的。 浏览器中或者直接在前端显示服务器错误等信息。 对于Web应用程序的搜索功能,覆盖全空间测 例如,图1(a)是某市疾控中心的主页,当搜索关 试用例的完全测试几乎是不可能完成的任务,因为 键词“占比%1”时,服务器不会返回正常的搜索结果, 搜索空间巨大,无法在有限时间内完全覆盖。而只 而是返回一个只包含错误信息的页面,如图1(b)所 考虑搜索那些常见内容的测试场景是很难满足测试 示,显示服务器遇到内部错误,服务端的java程序遇 要求的,因为在实际操作中,用户很可能不小心输错 到了“java.lang.NullPointerException”的异常,无法完 内容,也有很多恶意用户会尝试搜索一些危险且不 成此请求。Web应用程序中存在很多这样的错误,图 常用的字符。因此,测试用例要充分考虑各种常用 2是4种不同的出错页面,都是因为搜索某些特殊字 和不常用字符及它们的组合。可以将组合测试的方 符导致的。这些应用程序错误会导致服务器无法返 法应用到Web程序搜索功能上。 回正常的搜索结果,同时有些错误页面也会暴露敏 在系统测试中,检查系统参数的所有取值组合 HTTP Status500-Resfld:stedpjavaNulPontrxpi ② 疾病预防控制中心 44 Q”通发业0 (a)Normal page (b)Fault page (a)正常页面 (b)异常页面 Fig.I Search function display 图1搜索功能展示 (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
Journal of Frontiers of Computer Science and Technology 计算机科学与探索 2019, 13(11) 1 引言 随着互联网的快速发展,Web应用程序迅速进入 普通用户的视野[1] 。为了方便用户查询感兴趣的资 源,许多 Web 应用程序会提供搜索功能。浏览器将 用户输入的关键词提交给服务器,然后服务器处理 该请求并将查询结果返回给用户。如果开发者在实 现该功能的时候,对用户输入的合法性没有进行充 分的验证,可能会带来安全隐患。如果用户输入的 数据中含有某些特殊字符,使得服务器程序无法正 常执行,就会产生错误响应,并将异常代码抛到前端 浏览器中或者直接在前端显示服务器错误等信息。 例如,图1(a)是某市疾控中心的主页,当搜索关 键词“占比%1”时,服务器不会返回正常的搜索结果, 而是返回一个只包含错误信息的页面,如图1(b)所 示,显示服务器遇到内部错误,服务端的java程序遇 到了“java.lang.NullPointerException”的异常,无法完 成此请求。Web应用程序中存在很多这样的错误,图 2是4种不同的出错页面,都是因为搜索某些特殊字 符导致的。这些应用程序错误会导致服务器无法返 回正常的搜索结果,同时有些错误页面也会暴露敏 感信息,如服务器物理路径、堆栈调用信息、数据库 信息等。 此类故障的存在不但会影响用户体验,而且极 有可能成为安全问题。比如,攻击者在寻找 SQL (structured query language)注入点时,通常会输入某 些特殊字符,如果服务器返回错误,很可能可以进行 SQL 注入,因为这表明 Web 应用程序中对用户提交 的数据未进行合理的验证或过滤[2-3] 。同时,错误页 面暴露的敏感信息会为攻击者提供极大的便利[4] 。 因此,对搜索功能的充分测试是非常有必要的。 对于 Web 应用程序的搜索功能,覆盖全空间测 试用例的完全测试几乎是不可能完成的任务,因为 搜索空间巨大,无法在有限时间内完全覆盖。而只 考虑搜索那些常见内容的测试场景是很难满足测试 要求的,因为在实际操作中,用户很可能不小心输错 内容,也有很多恶意用户会尝试搜索一些危险且不 常用的字符。因此,测试用例要充分考虑各种常用 和不常用字符及它们的组合。可以将组合测试的方 法应用到Web程序搜索功能上。 在系统测试中,检查系统参数的所有取值组合 testing to generate test cases to test the search function of Web application, where each test case is a string of special characters. For test cases that can cause server errors, this paper uses the method of fault location based on combinatorial testing to find the combinations of characters that can cause server errors. This paper tests 96 websites, including schools, governments and institutions, and it is found that 23 of these sites will meet a server error when searching for some special combinations of characters. The experimental result of fault location indicates that 56% of server errors are caused by the combinations of“%”“<”“’”“\”and other characters. Key words: Web testing; combinatorial testing; fault location Fig.1 Search function display 图1 搜索功能展示 1840
吕成成等:Wcb应用程序搜索功能的组合测试 1841 Svnpp HTTP Status 500- ec时r题efe动tias5pyb城gGat63gg家随 (a)Common fault pagel (b)Common fault page2 (a)常见异常页面1 (6)常见异常页面2 ETor500对不起,举狼内蜡关或者树熔状志本急定! 速学电a5 虫回 (c)Common fault page3 (d)Common fault page4 (C)常见异常页面3 (d)常见异常页面4 Fig.2 Web page error message 图2网页错误信息 来进行充分的测试需要花费很高的代价,因为随着 的充分测试是非常有意义的。 参数数量的增加,测试用例的数量呈指数增长。组 总的来说,这篇文章主要有以下三点贡献: 合测试是一种有效的黑盒测试方法,其充分考虑到 (1)在Raunak等人m的基础上,实现了一个使用 系统中各参数之间的交互作用,进而生成高质量的 组合测试方法测试Web应用程序的搜索功能原型工 测试用例。很多应用程序错误是由少数几个参数的相 具,并提出一种组合测试错误定位方法,可以有效地 互作用导致的问,例如Kuhn和Reilly分析了Mozilla 找到会引起服务器错误响应的字符组合。 浏览器的错误报告记录,发现超过70%的错误是由某 (2)测试了96个学校、政府和事业单位类网站, 两个参数的相互作用触发的,超过90%的错误是由3 发现其中23个网站的搜索功能存在问题,当用户搜 个以内的参数互相作用触发的。组合测试(CT)的 索某些特殊字符组合时,会引起服务器的错误响应。 方法就是选择部分测试用例,可以覆盖任意1(1是一 (3)对存在问题的网站的错误定位结果进行分 个正整数,且心2)个参数可能取值的全部组合。 析,发现56%的服务器错误响应是由“%”“<”“”” 如果执行完测试用例后,有部分测试用例会引 和其他字符的组合引起的。 起服务器错误响应,可以使用组合测试错误定位的 本文的组织结构如下:第2章介绍组合测试的背 方法来找到这些字符组合。传统的错误定位是想找 景知识;第3章介绍本文提出的方法;第4章介绍实 到错误的根本原因以及错误在源码中的位置,而本 验结果和评估:第5章介绍相关的研究工作:第6章 文这里的定位是想找到程序输入中哪些参数及其取 是本文的总结与展望。 值组合会引起系统错误,本文提到的错误定位和错 误组合定位都指后者。本文在已有的研究基础上, 2 背景介绍 结合搜索功能测试的特点,提出一种组合测试错误 关于组合测试和错误定位,相关定义如下: 定位方法,可以有效地找到会引起错误组合。 定义I(SUT(software under testing)模型)一个 对搜索功能的充分测试可以暴露出服务端程序 SUTk,)模型有k个参数PP2,…P。s是一个长度 在处理特殊字符组合时潜在的问题。而错误定位可 为k的向量,可表示为(s52,…,s),其中s表示参数p 以帮助开发者修复这些故障,提升网站的形象,提高 可能取值的个数,p,的定义域为D={d,da,…,d)。 用户体验,避免恶意用户的攻击。因此,对搜索功能 定义2(测试用例)一个测试用例t是一个长度 (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
吕成成 等:Web应用程序搜索功能的组合测试 来进行充分的测试需要花费很高的代价,因为随着 参数数量的增加,测试用例的数量呈指数增长。组 合测试[5] 是一种有效的黑盒测试方法,其充分考虑到 系统中各参数之间的交互作用,进而生成高质量的 测试用例。很多应用程序错误是由少数几个参数的相 互作用导致的[5] ,例如Kuhn和Reilly[6] 分析了Mozilla 浏览器的错误报告记录,发现超过70%的错误是由某 两个参数的相互作用触发的,超过90%的错误是由3 个以内的参数互相作用触发的。组合测试(CT)[5] 的 方法就是选择部分测试用例,可以覆盖任意(t t是一 个正整数,且t≥2)个参数可能取值的全部组合。 如果执行完测试用例后,有部分测试用例会引 起服务器错误响应,可以使用组合测试错误定位的 方法来找到这些字符组合。传统的错误定位是想找 到错误的根本原因以及错误在源码中的位置,而本 文这里的定位是想找到程序输入中哪些参数及其取 值组合会引起系统错误,本文提到的错误定位和错 误组合定位都指后者。本文在已有的研究基础上, 结合搜索功能测试的特点,提出一种组合测试错误 定位方法,可以有效地找到会引起错误组合。 对搜索功能的充分测试可以暴露出服务端程序 在处理特殊字符组合时潜在的问题。而错误定位可 以帮助开发者修复这些故障,提升网站的形象,提高 用户体验,避免恶意用户的攻击。因此,对搜索功能 的充分测试是非常有意义的。 总的来说,这篇文章主要有以下三点贡献: (1)在Raunak等人[7] 的基础上,实现了一个使用 组合测试方法测试Web应用程序的搜索功能原型工 具,并提出一种组合测试错误定位方法,可以有效地 找到会引起服务器错误响应的字符组合。 (2)测试了96个学校、政府和事业单位类网站, 发现其中23个网站的搜索功能存在问题,当用户搜 索某些特殊字符组合时,会引起服务器的错误响应。 (3)对存在问题的网站的错误定位结果进行分 析,发现56%的服务器错误响应是由“%”“<”“’”“\” 和其他字符的组合引起的。 本文的组织结构如下:第2章介绍组合测试的背 景知识;第 3 章介绍本文提出的方法;第 4 章介绍实 验结果和评估;第 5 章介绍相关的研究工作;第 6 章 是本文的总结与展望。 2 背景介绍 关于组合测试和错误定位,相关定义[8] 如下: 定义 1(SUT(software under testing)模型) 一个 SUT(k,s) 模型有 k 个参数 p1,p2,…,pk 。 s 是一个长度 为 k 的向量,可表示为 s1,s2,…,sk ,其中 sj 表示参数 pi 可能取值的个数,pi 的定义域为 Di = {di1,di2,…,disj } 。 定义2(测试用例) 一个测试用例 t 是一个长度 Fig.2 Web page error message 图2 网页错误信息 1841
1842 Journal of Frontiers of Computer Science and Technolog计算机科学与探索 2019,13(11) 为k的向量,可表示为(巴,2,…,心〉,其中∈D,2∈ 失败的,则修改的参数与系统错误无关:否则,修改 D,…,∈D,表示为SUT中每个参数赋予一个确定 的参数与系统错误有关。 的值,卫,=UP2=…P=U。 定义3(测试用例集)一个测试用例集T是一组 3研究方法 测试用例集合,2,…,t}。 图3是整体方法的流程图。主要分成测试用例 定义4(combinatorial interaction,CI)一个交互 生成、测试用例执行和错误组合定位三部分。下面 组合CI是一个长度为k的向量,其中t个参数赋予特 详细介绍各部分内容。 定的值,剩下的k-t个参数未确定(未确定的值用-表 示)。这里t表示CI的大小。例如,长度为k的向量 测试用例 测试用例 错误组合 生成 执行 定位 (,-,…,-〉可表示一个大小为1的CI,其中eD 测试 执行 构造输入 用例 它表示参数P,=U,剩下的k-1个参数未确定。 模型 停止等待 结果 定义5(CI包含关系)一个CIP,被另一CIP 生成覆盖 定位错误 更换IP 数组 组合 包含(contain),当且仅当P,的所有赋值的参数在P, 中也被赋值,并且这些参数在P,和P,中被赋予了相 转换为测 测试用例 试用例 变异 同的值。一个CIP被测试用例T包含,当且仅当P 中的所有赋值的参数具有与T中相同的值。 定义6(faulty combinatorial interaction,FCI) 覆盖强度t Url,cookies, 个错误交互组合FCI是一种特殊的CI,所有包含它的 测试用例都会失败。 Fig.3 Workflow of method in this paper 如果P,是FCI,其他任何包含P的CI也是FCI。 图3方法流程图 比如P,是一个FCI,且P,包含P,所有包含P,的测 3.1 测试用例生成 试用例也都将包含P,,因此这些测试用例都会失败, 本文使用组合测试的方法来生成测试用例。组 即P,也是FCI。组合测试的错误定位是想找到那些 合测试是一种有效的测试方法,可以应用于网站搜 最小FCI(minimal FCI),最小FCI不包含任何比它小 索功能的测试。可以根据组合覆盖率生成测试用 的FCI。 例,测试强度为t(t为正整数,且t≥2)的组合测试 组合测试的错误定位主要可以分为两种,非自 可以保证任何参数值的t组合至少被一个测试用例 适应方法和自适应方法。非自适应的方法是指所有 覆盖。组合测试用例的构造方法,多数是基于覆盖 的测试用例可以并行执行,不依赖于先前测试用例 数组的。组合测试设计过程可简要描述如下: 的执行结果。Colbourn和McClary提出了一种错误 (1)建立输入模型(input model),模型包括有哪 定位方法,他们通过构造Locating Array的方法来找 些参数以及每个参数的可能取值。 到系统中的最小出错组合。Zhang等提出了一种基 (2)根据输入模型,生成覆盖数组。 于约束求解和优化技术的方法,无需生成额外的测 (3)将生成的覆盖数组转化为测试用例,覆盖数 试用例就可以找到最小出错组合。自适应的方法是 组的每一行表示一个测试用例。 指部分测试用例的选择是基于先前测试用例的执行 步骤(1)的输入模型将在下面详细介绍。步骤 结果。Zeller和Hildebrandt提出了一种典型的自适 (2)使用组合测试用例生成工具ACTS四(advanced 应方法。这种方法的主要思想是通过修改输入参数 combinatorial testing system)来生成覆盖数组。ACTS 来找到最小出错组合。对于失败的测试用例,修改 NIST(National Institute of Standards and Technology) 其中部分参数的值;如果修改后的测试用例仍然是 和UTA(University of Texas at Arlington)联合开发, (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
Journal of Frontiers of Computer Science and Technology 计算机科学与探索 2019, 13(11) 为 k 的向量,可表示为 v1,v2,…,vk ,其中 v1 ∈ D1,v2 ∈ D2,…,vk ∈ Dk,表示为 SUT 中每个参数赋予一个确定 的值,p1 = v1,p2 = v2,…,pk = vk 。 定义3(测试用例集) 一个测试用例集 T 是一组 测试用例集合 {t1,t2,…,tm} 。 定义 4(combinatorial interaction,CI) 一个交互 组合CI是一个长度为 k 的向量,其中 t 个参数赋予特 定的值,剩下的 k - t 个参数未确定(未确定的值用-表 示)。这里 t 表示CI的大小。例如,长度为 k 的向量 v1,- ,…, - 可表示一个大小为 1 的 CI,其中 v1 ∈ D1, 它表示参数 p1 = v1, 剩下的 k - 1个参数未确定。 定义 5(CI 包含关系) 一个 CI P1 被另一 CI P2 包含(contain),当且仅当 P1 的所有赋值的参数在 P2 中也被赋值,并且这些参数在 P1 和 P2 中被赋予了相 同的值。一个CI P 被测试用例 T 包含,当且仅当 P 中的所有赋值的参数具有与 T 中相同的值。 定义 6(faulty combinatorial interaction,FCI) 一 个错误交互组合FCI是一种特殊的CI,所有包含它的 测试用例都会失败。 如果 Pi 是FCI,其他任何包含 Pi 的CI也是FCI。 比如 P1 是一个FCI,且 P2 包含 P1 ,所有包含 P2 的测 试用例也都将包含 P1 ,因此这些测试用例都会失败, 即 P2 也是FCI。组合测试的错误定位是想找到那些 最小FCI(minimal FCI),最小FCI不包含任何比它小 的FCI。 组合测试的错误定位主要可以分为两种,非自 适应方法和自适应方法。非自适应的方法是指所有 的测试用例可以并行执行,不依赖于先前测试用例 的执行结果。Colbourn和McClary[9] 提出了一种错误 定位方法,他们通过构造Locating Array的方法来找 到系统中的最小出错组合。Zhang等[8] 提出了一种基 于约束求解和优化技术的方法,无需生成额外的测 试用例就可以找到最小出错组合。自适应的方法是 指部分测试用例的选择是基于先前测试用例的执行 结果。Zeller和Hildebrandt[10] 提出了一种典型的自适 应方法。这种方法的主要思想是通过修改输入参数 来找到最小出错组合。对于失败的测试用例,修改 其中部分参数的值;如果修改后的测试用例仍然是 失败的,则修改的参数与系统错误无关; 否则,修改 的参数与系统错误有关。 3 研究方法 图3是整体方法的流程图。主要分成测试用例 生成、测试用例执行和错误组合定位三部分。下面 详细介绍各部分内容。 3.1 测试用例生成 本文使用组合测试的方法来生成测试用例。组 合测试是一种有效的测试方法,可以应用于网站搜 索功能的测试。可以根据组合覆盖率生成测试用 例,测试强度为 t(t 为正整数,且 t ≥ 2)的组合测试 可以保证任何参数值的 t 组合至少被一个测试用例 覆盖。组合测试用例的构造方法,多数是基于覆盖 数组的。组合测试设计过程可简要描述如下: (1)建立输入模型(input model),模型包括有哪 些参数以及每个参数的可能取值。 (2)根据输入模型,生成覆盖数组。 (3)将生成的覆盖数组转化为测试用例,覆盖数 组的每一行表示一个测试用例。 步骤(1)的输入模型将在下面详细介绍。步骤 (2)使用组合测试用例生成工具 ACTS[11(] advanced combinatorial testing system)来生成覆盖数组。ACTS 由NIST(National Institute of Standards and Technology) 和 UTA(University of Texas at Arlington)联合开发, Fig.3 Workflow of method in this paper 图3 方法流程图 1842
吕成成等:Wcb应用程序搜索功能的组合测试 1843 实验表明,与类似工具相比,在覆盖度t相同的情况 从每个参数的取值范围中选择一个值组成一个用于 下,ACTS生成的测试集较小,并且比其他类似工具更 搜索的字符串,每个参数分别有7、9、9、8、6、6、5个可 快,比如AETG(http://aetgweb.argreenhouse.com/)。 能取值,这样一共有816480种不同的字符串,而使 步骤(3)将覆盖数组转化为测试用例并执行,覆盖数 用ACTS构造的覆盖强度为2的测试集只需要81个 组中每一行是一个测试用例,每一个测试用例是一 测试用例。 个由特殊字符组成的字符串。最后,通过组合测试 Table 1 Input model 错误定位的方法来找到是哪些特殊字符的组合引 表1输入模型 起的服务器错误响应。各部分方法的详细介绍如下。 参数 可能取值 从用户提交输入到得到返回页面服务端程序对 1 )}.“、‘>.space.NULL 用户输入可能的处理操作有: 2 (、[、{、<、s、%、l1、space、NULL (1)数据的编码和解码操作,如果用户的输入不 3 script.aBcD、22、I、?、~/、space、NULL 满足特定的参数格式,可能会引起错误(如URL 4 |&、/NULL (uniform resoure locator)解码,可以考虑%与其他字 A+.=、◆space、NULL 6 >)J、}.space.NULL 符的组合)。 #、“l.space.NULL (2)过滤转义操作:考虑到XSS(cascading style sheets)、SQL注入等安全问题,很多网站会对用户输 在这个输入模型中,space代表空格,NULL表示 入进行过滤和转义,因此需要在输入模型中加入部 不取一个空字符。其中,数字和字母组合有aBcD、 分XSS、SQL元素。 script、11等;特殊字符有(【、{、}、<>、”、’、 (3)查询操作:服务端程序可能会将用户的输入 $、%、?、~/、、&、,、、+、=、*、#,包括运算符 拼接成数据库查询语句,当存在某些特殊字符时,可 号、标点符号等。 能会改变查询语句的语义从而引起错误。 3.2测试用例执行 可以构造输入模型如表1所示,共有7个参数。 通过组合测试工具生成测试用例,每一个测试 参数的选择和取值并不是唯一的,开发者可以根据 用例是一个由特殊字符组成的字符串。对于每一个 实际的需求来构造模型。这里借鉴Bozic等2构造 测试用例,通过构造URL来模拟查询字符串,如果返 XSS攻击向量的方法,取7个参数,各参数分别表示为: 回正常的页面,则认为此测试用例的执行结果为通 参数1模拟输入标签的结束符号。比如SQL查 过,如果服务端直接将异常代码抛到前端浏览器,或 询中,待比较的字符串应该填充在两个单引号之间, 者在前端浏览器显示服务器错误,就认为此测试用 参数1选择单引号可以模拟SQL语句中单引号作用 例的执行结果为失败。 区间的结束,使后面的字符组合可以当作代码被执行。 在实际测试中,可能遇到以下两种情况。(1)P 参数2表示打开一个作用区间,比如“”等,可 限制,即如果检测到同一P在短时间内发送大量请 以与后面的关闭标记“}”组成一个作用区间。 求,则限制该P的访问:(2)存在部分无效测试用例, 参数3、4.5表示在参数2和参数6构成的作用 可能的原因之一是Wb应用程序内部的防御机制。 区间中特殊字符组合,比如英文字母“aBcD”、数字 如果用户的输入满足防御机制内置的安全规则,则 “22”、标点符号“?”、运算符号“+”、其他特殊字符“&”等。 重置链接或拒绝执行此请求。 参数6关闭由参数2打开的作用区间,比如“}”, 对于第一种情况,采用停止等待或者更换P的 可以与前面的打开标记“{”组成一个作用区间。 方法,同时这也要求本文的测试用例规模不能太大。 参数7表示在输入末尾有特殊作用的关键词, 第二种情况中,部分测试用例可以得到执行结 比如在SQL语句中有注释作用的“#”。 果,而部分测试用例无法得到执行结果,是无效的。 该模型可表示为一个SUT7,<7,9.9,8.6,6.5>为 无效测试用例中所包含的字符组合会因为测试用例 (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
吕成成 等:Web应用程序搜索功能的组合测试 实验表明,与类似工具相比,在覆盖度 t 相同的情况 下,ACTS生成的测试集较小,并且比其他类似工具更 快 ,比 如 AETG(http://aetgweb.argreenhouse.com/)。 步骤(3)将覆盖数组转化为测试用例并执行,覆盖数 组中每一行是一个测试用例,每一个测试用例是一 个由特殊字符组成的字符串。最后,通过组合测试 错误定位的方法来找到是哪些特殊字符的组合引 起的服务器错误响应。各部分方法的详细介绍如下。 从用户提交输入到得到返回页面服务端程序对 用户输入可能的处理操作有: (1)数据的编码和解码操作,如果用户的输入不 满足特定的参数格式,可能会引起错误(如 URL (uniform resoure locator)解码,可以考虑%与其他字 符的组合)。 (2)过滤转义操作:考虑到 XSS(cascading style sheets)、SQL注入等安全问题,很多网站会对用户输 入进行过滤和转义,因此需要在输入模型中加入部 分XSS、SQL元素。 (3)查询操作:服务端程序可能会将用户的输入 拼接成数据库查询语句,当存在某些特殊字符时,可 能会改变查询语句的语义从而引起错误。 可以构造输入模型如表 1 所示,共有 7 个参数。 参数的选择和取值并不是唯一的,开发者可以根据 实际的需求来构造模型。这里借鉴Bozic等[12-13] 构造 XSS攻击向量的方法,取7个参数,各参数分别表示为: 参数1 模拟输入标签的结束符号。比如SQL查 询中,待比较的字符串应该填充在两个单引号之间, 参数1选择单引号可以模拟SQL语句中单引号作用 区间的结束,使后面的字符组合可以当作代码被执行。 参数 2 表示打开一个作用区间,比如“{”等,可 以与后面的关闭标记“}”组成一个作用区间。 参数 3、4、5 表示在参数 2 和参数 6 构成的作用 区间中特殊字符组合,比如英文字母“aBcD”、数字 “22”、标点符号“?”、运算符号“+”、其他特殊字符“&”等。 参数6 关闭由参数2打开的作用区间,比如“}”, 可以与前面的打开标记“{”组成一个作用区间。 参数 7 表示在输入末尾有特殊作用的关键词, 比如在SQL语句中有注释作用的“#”。 该模型可表示为一个 SUT (7, < 7,9,9,8,6,6,5 >)。 从每个参数的取值范围中选择一个值组成一个用于 搜索的字符串,每个参数分别有7、9、9、8、6、6、5个可 能取值,这样一共有 816 480 种不同的字符串,而使 用ACTS构造的覆盖强度为2的测试集只需要81个 测试用例。 在这个输入模型中,space代表空格,NULL表示 不取一个空字符。其中,数字和字母组合有 aBcD、 script、11 等;特殊字符有(、)、[、]、{、}、<、>、”、’、 $ 、%、!、?、~、/、|、&、-、\、,、.、^、+、=、*、#,包括运算符 号、标点符号等。 3.2 测试用例执行 通过组合测试工具生成测试用例,每一个测试 用例是一个由特殊字符组成的字符串。对于每一个 测试用例,通过构造URL来模拟查询字符串,如果返 回正常的页面,则认为此测试用例的执行结果为通 过,如果服务端直接将异常代码抛到前端浏览器,或 者在前端浏览器显示服务器错误,就认为此测试用 例的执行结果为失败。 在实际测试中,可能遇到以下两种情况。(1)IP 限制,即如果检测到同一IP在短时间内发送大量请 求,则限制该IP的访问;(2)存在部分无效测试用例, 可能的原因之一是 Web 应用程序内部的防御机制。 如果用户的输入满足防御机制内置的安全规则,则 重置链接或拒绝执行此请求[14] 。 对于第一种情况,采用停止等待或者更换 IP 的 方法,同时这也要求本文的测试用例规模不能太大。 第二种情况中,部分测试用例可以得到执行结 果,而部分测试用例无法得到执行结果,是无效的。 无效测试用例中所包含的字符组合会因为测试用例 Table 1 Input model 表1 输入模型 参数 1 2 3 4 5 6 7 可能取值 )、}、“、‘、>、space、NULL (、[、{、<、$、%、11、space、NULL script、aBcD、22、!、?、~、/、space、NULL |、&、-、/、\、,、.、NULL ^、+、=、*、space、NULL >、)、]、}、space、NULL #、“、\\、space、NULL 1843