计算机科学与探索 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 (、[、{、)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,为 无效测试用例中所包含的字符组合会因为测试用例 (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个可 能取值,这样一共有 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 (、[、{、、)、]、}、space、NULL #、“、\\、space、NULL 1843
1844 Journal of Frontiers of Computer Science and Technology计算机科学与探索 2019,13(11) 无效而无法被覆盖到,这种行为在组合测试中称为 通过的测试用例中,它一定不是FC1。这样,那些出 masking effect!。造成部分测试用例无效的原因是 现在失败测试用例中,但没出现在通过测试用例集 由于包含了部分字符及其组合,可以生成额外的测 中的CI就是可疑Cl。用Fail_T包含的全部CI减 试用例来解决这个问题。 去Pass_T中包含的全部CI,则会删除一定不可能是 发现一个测试用例t=(,,…,)是无效的,使用 FCI的CI,但剩下的CI不一定就是FCI,Susp_C_Set Simplified-One-Factor-One-Time1的方法对测试用例 表示这些可疑的C1集合。 进行变异,构造k个额外的测试用例,(,2,…,》 算法的第二步是从可疑C集合中得到最小出错 (,*,…,…,〈巴,心2,…,),其中*表示一个随机的并 组合(minimal FCI)。本文和Raunak等的方法有所 且和原测试用例不相同的值。这样因为原测试用例 不同。Raunak的方法假设P,P,∈Susp_C_Set,且P. 无效而无法被覆盖到的组合可以重新被覆盖到。 包含P。P和P都能引起错误,但P不是最小出错 比如,对于一个目标网站,有测试用例“'{script> 组合(minimal FCI),需要将P,删除。因此Raunak将 #”,在执行该测试用例时,因为“,”的出现该字符串 Susp_CI_Set包含其他Cl的CI删除,得到的就是最终 满足此网站的安全规则,服务器拒绝执行该请求,则 结果。这种方法的有效性不高,因为会存在部分C1 该测试用例无效。此时,无法确定其他字符及组合 虽然只出现在了失败测试用例中,但并不能导致服 是否会引起服务器内部错误,实际上,“{script'”是会 务器错误,不能将其当作FCI,因此也就不能将包含 引起服务器错误的。此时,可以使用一阶变异的方 此CI的其他C1直接删除。 法额外生成7个测试用例,“{script>#”'script>#" 为提高定位的有效性,本文从算法的第3行到第 “'>#”a,{script>#"u'{script>#”a’{script# 11行,确认Susp_Cl_Set中可疑的C1是否为FCI。因 “'script>”。执行这7个测试用例,其中“{script># 为希望找出最小出错组合,所以从大小为1的C1开 这个字符串会引起服务器内部错误。这样,就不会因 始确认,如果这个C1构成的测试用例执行结果为失 为该测试用例无效而使错误组合“{script”无法被发现。 败,它就是FCI,将其加入到Minimal_FCI,如算法 3.3错误组合定位 的第7行所示。因为包含此CI的其他CI也是FCI, 对于存在错误的Web应用,通过组合测试错误 但不是最小出错组合,在算法的第8行,将Susp_C 定位的方法来找到是哪些特殊字符的组合引起的服 St中包含此FCI的其他CI删除。确认完大小为k 务器错误响应。使用组合测试生成字符串进行测试 的FCl后,返回Minimal_FCl。此时,Minimal_FCI就 时不需要全部参数,只使用部分参数,也能构造一个 是错误定位到的最终结果。 测试用例,可以将这个特点应用到错误定位中。 算法1组合测试错误定位 Raunak等m使用了Colbourn和McClary提出的 输入:失败测试用例集Fal_T,通过测试用例集 种非自适应的组合测试错误定位方法。在该方法 Pass_T。 的基础上,提出一种新的错误定位方法。该方法的 输出:FCI集合。 算法过程如算法1所示。 1.Minimal_FCl=☑ 算法的第一步是得到一组可疑的C!集合。算法 2.Susp_Cl_Set=Fail_T包含的所有C-Pass_T包含的 的输入是一组测试用例的执行结果,Fal_T表示失 所有CI 败测试用例集,Pa.ss_T表示通过测试用例集,输出是 3.for each s,(1,2,....do FCI集合(出错组合)。算法的第一行将Minimal_FCI 4. Tmp_Susp_Cl_Set=Susp_CI_Set中大小等于s的Cl 设置为空集,它将用来保存找到的FC1。算法的第2 for each Cl Tmp_Susp_CI_Set do 行,是找出可疑C1集合。如果一个C1出现在失败测 6 IfCI的执行结果为失败then 试用例中,它可能是一个FC1,如果一个C1出现在 7 Minimal_FCI=Minimal_FCIUC (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) 无效而无法被覆盖到,这种行为在组合测试中称为 masking effect[15] 。造成部分测试用例无效的原因是 由于包含了部分字符及其组合,可以生成额外的测 试用例来解决这个问题。 发现一个测试用例 t = v1,v2,…,vk 是无效的,使用 Simplified-One-Factor-One-Time[16] 的方法对测试用例 进行变异,构造 k 个额外的测试用例,*,v2,…,vk , v1,*,…,vk ,⋯, v1,v2,…,* ,其中*表示一个随机的并 且和原测试用例不相同的值。这样因为原测试用例 无效而无法被覆盖到的组合可以重新被覆盖到。 比如,对于一个目标网站,有测试用例“’{script|^> #”,在执行该测试用例时,因为“’”的出现该字符串 满足此网站的安全规则,服务器拒绝执行该请求,则 该测试用例无效。此时,无法确定其他字符及组合 是否会引起服务器内部错误,实际上,“{script”是会 引起服务器错误的。此时,可以使用一阶变异的方 法额外生成7个测试用例,“{script|^>#”“’script|^>#” “’{|^ >#”“’{script^ >#”“’{script| >#”“’{script|^#” “’{script|^>”。执行这7个测试用例,其中“{script|^>#” 这个字符串会引起服务器内部错误。这样,就不会因 为该测试用例无效而使错误组合“{script”无法被发现。 3.3 错误组合定位 对于存在错误的 Web 应用,通过组合测试错误 定位的方法来找到是哪些特殊字符的组合引起的服 务器错误响应。使用组合测试生成字符串进行测试 时不需要全部参数,只使用部分参数,也能构造一个 测试用例,可以将这个特点应用到错误定位中。 Raunak等[7] 使用了Colbourn和McClary[9] 提出的 一种非自适应的组合测试错误定位方法。在该方法 的基础上,提出一种新的错误定位方法。该方法的 算法过程如算法1所示。 算法的第一步是得到一组可疑的 CI 集合。算法 的输入是一组测试用例的执行结果,Fail_T 表示失 败测试用例集,Pass_T 表示通过测试用例集,输出是 FCI 集合(出错组合)。算法的第一行将 Minimal_FCI 设置为空集,它将用来保存找到的 FCI 。算法的第2 行,是找出可疑 CI 集合。如果一个 CI 出现在失败测 试用例中,它可能是一个 FCI ,如果一个 CI 出现在 通过的测试用例中,它一定不是 FCI 。这样,那些出 现在失败测试用例中,但没出现在通过测试用例集 中的 CI 就是可疑 CI 。用 Fail_T 包含的全部 CI 减 去 Pass_T 中包含的全部 CI ,则会删除一定不可能是 FCI 的 CI ,但剩下的 CI 不一定就是 FCI ,Susp_CI_Set 表示这些可疑的 CI 集合。 算法的第二步是从可疑 CI 集合中得到最小出错 组合(minimal FCI)。本文和Raunak等[7] 的方法有所 不同。Raunak 的方法假设 Pi ,Pj ∈ Susp_CI_Set,且 Pi 包含 Pj 。 Pi 和 Pj 都能引起错误,但 Pi 不是最小出错 组合(minimal FCI),需要将 Pi 删除。因此Raunak将 Susp_CI_Set 包含其他 CI 的 CI 删除,得到的就是最终 结果。这种方法的有效性不高,因为会存在部分 CI 虽然只出现在了失败测试用例中,但并不能导致服 务器错误,不能将其当作 FCI ,因此也就不能将包含 此 CI 的其他 CI 直接删除。 为提高定位的有效性,本文从算法的第3行到第 11行,确认 Susp_CI_Set 中可疑的 CI 是否为 FCI 。因 为希望找出最小出错组合,所以从大小为1的 CI 开 始确认,如果这个 CI 构成的测试用例执行结果为失 败,它就是 FCI ,将其加入到 Minimal_FCI ,如算法 的第7行所示。因为包含此 CI 的其他 CI 也是 FCI , 但不是最小出错组合,在算法的第8行,将 Susp_CI_ Set 中包含此 FCI 的其他 CI 删除。确认完大小为 k 的 FCI 后,返回 Minimal_FCI 。此时,Minimal_FCI 就 是错误定位到的最终结果。 算法1 组合测试错误定位 输入:失败测试用例集 Fail_T,通过测试用例集 Pass_T。 输出:FCI集合。 1. Minimal_FCI = ∅ 2. Susp_CI_Set = Fail_T 包含的所有CI-Pass_T包含的 所有CI 3. for each si ∈{1,2,…,k} do 4. Tmp_Susp_CI_Set=Susp_CI_Set中大小等于si的CI 5. for each CIj ∈ Tmp_Susp_CI_Set do 6. If CIj的执行结果为失败then 7. Minimal_FCI = Minimal_FCI ⋃ {CIj} 1844
吕成成等:Wcb应用程序搜索功能的组合测试 1845 8. 删除Susp_C1_Set中包含Cl的其他CI Table 2 Results of Website testing 9 end if 表2网站测试结果 10. end for 11. 行业 属性 网站总数 存在错误的 存在错误的 end for 网站总数 网站占比% 12. return Minimal FCI 研究生院 12 6 50.0 大学 25.8 学校 中 4实验结果与分析 中学 20.0 合计 48 15 31.3 在python3.5.4环境下实现了一个原型工具,可 省政府 13 1 7.7 以实现本文提到的全部方法。使用该工具测试实际 政府机构 市政府 27 4 14.8 中的Web应用程序。 合计 40 5 12.5 360发表的《2017中国网站安全形势分析报告》 事业单位 8 3 37.5 (htp:/lt.360.cn/1101061855.php2dtid-1101062368&did= 合计 96 23 24.0 490995546)显示,教育培训、政府机构和事业单位这3 容易检测出错误。 个行业的网站是检测出网站漏洞最多的行业。搜索 对搜索功能存在错误的22个网站进行错误定位 功能的测试和网站的安全关系密切,而且政府、学校 (剩下的一个网站,虽然检测到了错误,但因为它对p 等网站是面向大众的,具有特定权威、严肃等属性, 的限制严格而无法错误定位),来确定是哪些字符组 这些网站出现故障将极大影响公共安全和其公信 合引起的服务器错误。共发现112种不同的FCI,对 力。从安徽、北京、陕西等地的学校,政府机构和事 应着112种不同的会引起网站服务器错误的字符组 业单位网站中收集了96个提供搜索功能的网站,其 合。这112种FCI的大小的分布图如图4,可见大小为 中有:48个学校类网站,包括12个研究生院网站,3个 2的FCI共有65种,占比最大,93.75%的FCI值小于3。 大学网站和5个中学网站:40个政府机构网站,包括13 80 个省政府网站和27个市政府网站:8个事业单位类网 70 60 站。在这96个网站中,有76个使用get方法发送http 50 请求,有20个网站使用post方法发送http请求。 40 0 20 20 4.1实验结果 20 10 使用组合测试的方法测试了这96个网站,实验 4 5 结果发现,96个网站中共有23个网站的搜索功能存 FCI大小 在问题,实验结果如表2所示。其中在8个事业单位 Fig.4 FCI size distribution 类的网站中,有3个网站存在错误,占比最高为 图4FCI大小分布图 37.5%;48个学校类的网站中存在错误的网站有15 根据这些会引起服务器错误的字符组合的频数 个,占为31.25%,有50%的研究生院网站存在错误, 进行了统计,统计结果如表3所示。频数最多字符组 相比于大学和中学网站,研究生院的网站更容易检 合共出现了11次,是“%”“%?”“%”“%~”,并且56% 测到错误;40个政府机构网站中存在错误网站有5 的服务器错误都是由“%”“<”“,”“”和其他字符的组 个,占比最小,为12.5%,市政府网站比省政府网站更 合引起的。根据部分网站的应用程序错误信息,分 容易检测出错误。 析这些字符组合引起服务器错误的可能原因如下: 在这96个网站中,使用gt方法的76个网站中, “%”:“%”通常会用来做URL编码,Wb程序将 有14个网站存在错误,占比为18.4%。使用post方法 用户提交的输入直接通过get或post方法提交到服务 的20个网站中,有9个网站存在错误,占比为45.0%。 器,服务器程序会先对输入做URL解码,此时包含 在本次实验中,使用post方法发送http请求的网站更 “%”并且不符合URL编码规则的输入就会引起程序 (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
吕成成 等:Web应用程序搜索功能的组合测试 8. 删除Susp_CI_Set中包含CIj的其他CI 9. end if 10. end for 11. end for 12. return Minimal_FCI 4 实验结果与分析 在 python 3.5.4 环境下实现了一个原型工具,可 以实现本文提到的全部方法。使用该工具测试实际 中的Web应用程序。 360 发表的《2017 中国网站安全形势分析报告》 (http://zt.360.cn/1101061855.php?dtid=1101062368&did= 490995546)显示,教育培训、政府机构和事业单位这3 个行业的网站是检测出网站漏洞最多的行业。搜索 功能的测试和网站的安全关系密切,而且政府、学校 等网站是面向大众的,具有特定权威、严肃等属性, 这些网站出现故障将极大影响公共安全和其公信 力。从安徽、北京、陕西等地的学校,政府机构和事 业单位网站中收集了96个提供搜索功能的网站,其 中有:48个学校类网站,包括12个研究生院网站,3个 大学网站和5个中学网站;40个政府机构网站,包括13 个省政府网站和27个市政府网站;8个事业单位类网 站。在这96个网站中,有76个使用get方法发送http 请求,有20个网站使用post方法发送http请求。 4.1 实验结果 使用组合测试的方法测试了这96个网站,实验 结果发现,96个网站中共有23个网站的搜索功能存 在问题,实验结果如表2所示。其中在8个事业单位 类的网站中,有 3 个网站存在错误,占比最高为 37.5%;48 个学校类的网站中存在错误的网站有 15 个,占为 31.25%,有 50%的研究生院网站存在错误, 相比于大学和中学网站,研究生院的网站更容易检 测到错误;40 个政府机构网站中存在错误网站有 5 个,占比最小,为12.5%,市政府网站比省政府网站更 容易检测出错误。 在这96个网站中,使用get方法的76个网站中, 有14个网站存在错误,占比为18.4%。使用post方法 的20个网站中,有9个网站存在错误,占比为45.0%。 在本次实验中,使用post方法发送http请求的网站更 容易检测出错误。 对搜索功能存在错误的 22个网站进行错误定位 (剩下的一个网站,虽然检测到了错误,但因为它对ip 的限制严格而无法错误定位),来确定是哪些字符组 合引起的服务器错误。共发现112种不同的FCI,对 应着112种不同的会引起网站服务器错误的字符组 合。这112种FCI的大小的分布图如图4,可见大小为 2的FCI共有65种,占比最大,93.75%的FCI值小于3。 根据这些会引起服务器错误的字符组合的频数 进行了统计,统计结果如表3所示。频数最多字符组 合共出现了11次,是“%!”“%?”“%/”“%~”,并且56% 的服务器错误都是由“%”“<”“’”“\”和其他字符的组 合引起的。根据部分网站的应用程序错误信息,分 析这些字符组合引起服务器错误的可能原因如下: “%”:“%”通常会用来做URL编码,Web程序将 用户提交的输入直接通过get或post方法提交到服务 器,服务器程序会先对输入做 URL 解码,此时包含 “%”并且不符合URL编码规则的输入就会引起程序 Table 2 Results of Website testing 表2 网站测试结果 行业 学校 政府机构 事业单位 合计 属性 研究生院 大学 中学 合计 省政府 市政府 合计 网站总数 12 31 5 48 13 27 40 8 96 存在错误的 网站总数 6 8 1 15 1 4 5 3 23 存在错误的 网站占比/% 50.0 25.8 20.0 31.3 7.7 14.8 12.5 37.5 24.0 Fig.4 FCI size distribution 图4 FCI大小分布图 1845
1846 Journal of Frontiers of Computer Science and Technology计算机科学与探索 2019,13(11) Table 3 Result of fault location 表3错误定位结果 频数 字符组合 9,10,11 %l %1 %2 % %sp 6,7,8 % 21 11 1& =} 0 >{ p sp A 人 >" r >% , 22\ 3 sp! 2 "sp } ? { sp- 2/ ?- 21 7 = " spsp" <aBcD\ )(sp/ /-sp) </-sp <41/sp <scriptsp )/sp) (spl 崩溃,造成服务器错误响应。 合,定位结果如表5所示。 “<”:“<”是一个常见的html标签,和XSS注入关 Table 4 Results of test case execution 系密切。在asp.net程序中,如果检测到用户提交的 表4测试用例执行结果 输入中含有“<”等危险输入,就会停止运行,从而造 覆盖 测试用例 失败测试用例 失败测试用例 成服务器的错误响应。 强度 数量 数量 占比% “”:SQL查询中,待比较的字符串应该填充在 2 81 6 7.4 两个单引号之间,如果用户提交的输入中含有“’”, 3 725 57 7.9 5459 412 7.5 且服务端程序直接将用户输人拼接成$QL语句进行 查询,就会导致SQL查询的异常,从而造成服务器的 Table 5 Results of fault location of recruitment Website 错误响应。一般来说,如果含有“’”的字符组合可以 表5招聘网站的错误定位结果 引起服务器的错误响应,则该网站有很大的可能存 覆盖强度 定位结果 在SQL注入的漏洞-。 2 1%%sp%%%%NULL %%sp “1”:在正则表达式中以及$QL语句中表示转义 3 %%?%%%sp %NULL 4 %!%?%r%W%sp%NULL 字符,表示下一个字符为特殊字符。服务端程序在 处理含有“”的输入(比如java程序中的replaceAll() 可以发现,覆盖强度2、3、4生成的测试用例中失 方法)或者进行SQL查询时,没有考虑到”的特殊含 败测试用例的比例基本相似.覆盖强度3、4的错误定 义,可能会引起服务器的错误响应。 位结果是相同的,这些错误组合主要是由%和其他字 4.2错误网站案例 符的组合引起的。可能的一个原因是包含特殊字符 同时,也将本文的测试方法应用到部分商业网 组合(比如“%1”“%?”)的输入会因为不符合URL解码 站的测试中。在一个招聘网站的测试中检测到了问 函数的输入而引起了“Internal Server Error'”的响应。 题,下面详细介绍本文的测试过程。分别执行覆盖 4.3测试用例变异方法评估 强度为2、3、4的测试用例,执行结果如表4所示。使 在实际情况中,部分Web应用程序在测试时存 用错误定位的方法来找到引起系统错误的字符组 在masking effect情况。此时,采用Simplified-One- (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) 崩溃,造成服务器错误响应。 “" "sp =" {22 ?._ & &= spsp" %! ^} "% '{ $! ^sp\\ &^ {script /-sp) %sp { ?, spsp? $aBcD| ]\\ " !& {/ sp! .^ "11 =sp" sp& }(sp|} Table 4 Results of test case execution 表4 测试用例执行结果 覆盖 强度 2 3 4 测试用例 数量 81 725 5 459 失败测试用例 数量 6 57 412 失败测试用例 占比/% 7.4 7.9 7.5 Table 5 Results of fault location of recruitment Website 表5 招聘网站的错误定位结果 覆盖强度 2 3 4 定位结果 }% %! %! ‘% %? %? sp% %~ %~ %! %/ %/ %? %sp %sp %NULL %NULL %NULL %/ %sp %~ 1846
吕成成等:Wcb应用程序搜索功能的组合测试 1847 Factor--One-Time的测试用例变异的方法生成额外的 式加入到模型后生成的测试用例的执行结果为全部 测试用例来解决这个问题。在96个测试网站中,检 通过,7个Web应用在将Method B定位得到的FCI 测到有26个网站存在这样的情况,其中有3个网站 以约束的形式加入到模型后生成的测试用例的执行 存在错误。无效测试用例的存在使得某些错误组合 结果为全部通过。将覆盖强度增加到4时,其余两个 无法被覆盖到。比较3个存在无效测试用例且搜索 Web应用的执行结果也全部为正确。这说明两种定 功能存在错误的网站的错误定位结果,发现有两个 位方法可以全面地找到被测系统中的错误组合。 网站在执行完变异测试用例后定位到的错误组合数 “查准率”是指定位得到的字符组合中确定会引 比不执行变异测试用例定位到的错误组合数多1。 起服务器错误的字符组合所占的比例。每次从定位 由此可见,使用测试用例变异的方法可以使错误定 结果中取出一个FCI,在输人模型中加入约束,使得重 位得到的结果更全面。 新生成测试用例全都包含此FCI而不包含任何其他的 4.4错误定位方法评估 FCL。例如,有SUT(3,(2,2,2》,它的3个参数为p,0,、 Raunak等使用Colbourn和McClary9提出的组 P20,1小、P0,,定位得到的FCI为(0,1,-〉人(0,-,1 合测试错误定位方法,将这种方法记作Method A。 〈-,0,0〉。对于FCI(0,1,-),可以生成约束如下: 本文的方法记作Method B。主要考虑两方面:(1)错 [Constraint] 误定位方法是否可以找到所有的错误组合;(2)错误 (p,=0&&p2=1) 定位方法找到的结果是否准确。从“查全率”和“查 (p,=0&&P3=) 准率”两方面来分析两种组合测试错误定位方法在 I(p2=0&&P3=0) Web应用程序搜索功能测试上的有效性。在l5个存 则加入此约束后生成的测试用例全都包含FCI 在错误的学校类网站中,有6个网站存在P限制和无 (0,L,-),而不包含其他任何FCI。对于FCI(0,-,1〉, 效测试用例,以剩下的9个学校类网站为测试对象。 可以生成约束如下: “查全率”是指错误定位方法能不能找到所有的 [Constraint] 错误组合。可以将定位到的FCI转换为约束加入到 (p,=0&&p3=D 输入模型中,重新生成测试用例,使得生成的测试用 I(p,=0&&p2=1) 例不包含任何定位到的FCI。例如,有SUT3,(2,2,2儿 I(p2=0&&P3=0) 它的3个参数为p,0,小、P,0,、P0,1,定位得到的 则加入此约束后生成的测试用例全都包含FCI FCI为(0,1,-〉(0,-,1)(-,0,0)。此时可以生成约束 (0,-,1),而不包含其他任何FCI。 (约束定义方式使用ACTS工具的定义标准)如下: 对于选中的FCI,使用这种方法重新生成的所有 [Constraint] 测试用例都将包含此FCI且不包含任何定位到的其 (p,=0&&P2=) 他FCI。如果所有的测试用例执行结果都引起服务 I(p,=0&&3=1) 器的错误响应,就认为此FCI为有效的FCI,否则是无 (p,=0&&p,=0) 效的。将定位得到的所有FCI中有效的FCI所占的 则加入此约束生成的所有测试用例都不包含CI 比例记作“查准率”。 (0,1,-〉和(0,-,1)。使用错误率E来表示失败测试 两种错误定位方法的“查准率”执行结果如表7 用例数量占全部测试用例的比例。其中: 所示。使用Method A定位得到的错误组合的数量 错误率=失败测试用例数量×100% 比较多,但平均只有7.4%的错误组合是有效的。使 全部测试用例数量 用Method B定位得到的错误组合中,平均有77.2% 两种错误定位方法的“查全率”执行结果如表6 的错误组合是有效的,而且有5个网站的定位结果是 所示。可以看到,在9个被测Web应用中,有8个 100%有效的。这说明相比于Method A,Method B Web应用在将Method A定位得到的FCI以约束的形 能够更为准确地找到被测网站中的错误组合。 (C)1994-2019 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net
吕成成 等:Web应用程序搜索功能的组合测试 Factor-One-Time的测试用例变异的方法生成额外的 测试用例来解决这个问题。在96个测试网站中,检 测到有 26 个网站存在这样的情况,其中有 3 个网站 存在错误。无效测试用例的存在使得某些错误组合 无法被覆盖到。比较3个存在无效测试用例且搜索 功能存在错误的网站的错误定位结果,发现有两个 网站在执行完变异测试用例后定位到的错误组合数 比不执行变异测试用例定位到的错误组合数多 1。 由此可见,使用测试用例变异的方法可以使错误定 位得到的结果更全面。 4.4 错误定位方法评估 Raunak等[7] 使用Colbourn和McClary[9] 提出的组 合测试错误定位方法,将这种方法记作 Method_A。 本文的方法记作Method_B。主要考虑两方面:(1)错 误定位方法是否可以找到所有的错误组合;(2)错误 定位方法找到的结果是否准确。从“查全率”和“查 准率”两方面来分析两种组合测试错误定位方法在 Web应用程序搜索功能测试上的有效性。在15个存 在错误的学校类网站中,有6个网站存在IP限制和无 效测试用例,以剩下的9个学校类网站为测试对象。 “查全率”是指错误定位方法能不能找到所有的 错误组合。可以将定位到的FCI转换为约束加入到 输入模型中,重新生成测试用例,使得生成的测试用 例不包含任何定位到的FCI。例如,有SUT (3, 2,2,2 ), 它的3个参数为 p1{0,1}、p2{0,1}、p3{0,1},定位得到的 FCI为 0,1, - 、0, - ,1 、- ,0,0 。此时可以生成约束 (约束定义方式使用ACTS[10] 工具的定义标准)如下: [Constraint] !(p1 = 0 && p2 = 1) !(p1 = 0 && p3 = 1) !(p2 = 0 && p3 = 0) 则加入此约束生成的所有测试用例都不包含 FCI 0,1, - 和 0, - ,1 。使用错误率 E 来表示失败测试 用例数量占全部测试用例的比例。其中: 错误率 = 失败测试用例数量 全部测试用例数量 × 100% 两种错误定位方法的“查全率”执行结果如表 6 所示。可以看到,在 9 个被测 Web 应用中,有 8 个 Web应用在将Method_A定位得到的FCI以约束的形 式加入到模型后生成的测试用例的执行结果为全部 通过,7 个 Web 应用在将 Method_B 定位得到的 FCI 以约束的形式加入到模型后生成的测试用例的执行 结果为全部通过。将覆盖强度增加到4时,其余两个 Web应用的执行结果也全部为正确。这说明两种定 位方法可以全面地找到被测系统中的错误组合。 “查准率”是指定位得到的字符组合中确定会引 起服务器错误的字符组合所占的比例。每次从定位 结果中取出一个FCI,在输入模型中加入约束,使得重 新生成测试用例全都包含此FCI而不包含任何其他的 FCI。例如,有SUT (3, 2,2,2 ) ,它的3个参数为 p1{0,1}、 p2{0,1}、p3{0,1},定位得到的 FCI 为 0, 1, - 、 0, - ,1 、 - ,0,0 。对于FCI 0,1, - ,可以生成约束如下: [Constraint] (p1 = 0 && p2 = 1) !(p1 = 0 && p3 = 1) !(p2 = 0 && p3 = 0) 则加入此约束后生成的测试用例全都包含 FCI 0,1, - ,而不包含其他任何FCI。对于FCI 0, - ,1 , 可以生成约束如下: [Constraint] (p1 = 0 && p3 = 1) !(p1 = 0 && p2 = 1) !(p2 = 0 && p3 = 0) 则加入此约束后生成的测试用例全都包含 FCI 0, - ,1 ,而不包含其他任何FCI。 对于选中的FCI,使用这种方法重新生成的所有 测试用例都将包含此FCI且不包含任何定位到的其 他 FCI。如果所有的测试用例执行结果都引起服务 器的错误响应,就认为此FCI为有效的FCI,否则是无 效的。将定位得到的所有 FCI 中有效的 FCI 所占的 比例记作“查准率”。 两种错误定位方法的“查准率”执行结果如表 7 所示。使用 Method_A 定位得到的错误组合的数量 比较多,但平均只有7.4%的错误组合是有效的。使 用 Method_B 定位得到的错误组合中,平均有 77.2% 的错误组合是有效的,而且有5个网站的定位结果是 100%有效的。这说明相比于 Method_A,Method_B 能够更为准确地找到被测网站中的错误组合。 1847
1848 Journal of Frontiers of Computer Science and Technology计算机科学与探索 2019,13(11) Table6“recall'”of fault location method 表6错误定位方法“查全率” 未加入FCI约束结果 加入FCI约束Method A 加入FCI约束Method B Web 覆盖强度t 测试用例数量 错误率% 测试用例数量 错误率/% 测试用例数量 错误率% uir 2 81 4.9 87 0 82 0 cupl 2 81 6.2 87 0 84 0 csu 81 6.2 87 0 84 0 gscass 2 81 6.2 87 0 84 wenda 2 81 7.4 84 0 80 0 ahau 2 81 8.6 86 0 80 0 nwsuaf 2 81 11.1 86 0 77 1.3 2 81 8.6 87 2.3 80 0 uibe 3 725 9.1 727 1.0 5459 8.8 5332 0 2 81 8.6 87 2.3 80 bnu 3 725 9.1 727 1.0 5459 8.8 5332 0 Table 7 "precision"of fault location method 5 相关工作 表7错误定位方法“查准率” 对于许多复杂的软件系统,通常有不同的组件、选 Method A Method A Method B Method B 项或参数相互作用。对于这样的系统,组合测试是一种 Web FCI数量 “查准率”% FCI数量 “查准率”% 非常有效的黑盒测试技术,它可以应用于不同的测试 58 6.9 4 100.0 级别,如单元测试、集成测试和系统测试。最近,有不 cupl 72 6.9 5 100.0 少研究者将这种测试方法应用到Wb测试和安全测试。 csu 72 6.9 5 100.0 72 使用组合测试来检测Wb应用程序的搜索功能 gscass 6.9 100.0 是否存在错误,而Bozic和Simos等217则将组合测 wenda 61 6.6 J 20.0 ahau 95 7.4 58.3 试以及组合测试错误定位的方法应用到X$S攻击检 nwsuaf 126 5.6 15 46.7 测上。Bozic使用不同组合强度生成的字符串测试用 uibe 95 7.4 > 100.0 例对3个Wb程序进行测试,结果显示组合测试的方 bnu 126 5.6 10 70.0 法十分有效。在接下来的研究中,他们将约束条件 平均 86.3 7.4 7.6 77.2 加入到组合测试模型中,能显著提高测试用例的质 同时注意到,有一些网站,它们执行相同覆盖强 量。Simos等m在Bozic的基础上,继续研究组合测 度生成的测试用例的结果相同,比如csu和cupl,uibe 试在XSS攻击上的应用。他们使用组合测试错误定 和buct,虽然它们的前端显示页面不同,但后端处理 位的方法来识别XSS诱导组合,XSS诱导组合是输 程序很可能是相同的。 入参数值的组合,任何包含此诱导组合的测试用例 实验结果表明,本文的方法实现的工具可以有 一定会在运行时成功触发XSS漏洞。XSS诱导组合 效地测试Web应用程序的搜索功能,本文的错误定 的识别有助于更好地理解X$$漏洞的根本原因,帮 位方法可以准确地找到出错字符组合。但测试的方 助安全人员设计有效的过滤函数来避免这些漏洞。 法仍有不足,有些网站可能并不会让错误信息在前 Raunak等将组合测试的方法应用到Web应用 端浏览器上显示,因此无法判断本文的测试用例是 程序的搜索功能测试上。在国家漏洞库(National 否会引起服务器内部错误。开发者可以通过读取系 Vulnerability Database,NVD)网站开发实现新功能 统日志来解决此问题。 后,开发人员发现某些特殊字符会导致“服务器错误” (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) 同时注意到,有一些网站,它们执行相同覆盖强 度生成的测试用例的结果相同,比如csu和cupl,uibe 和buct,虽然它们的前端显示页面不同,但后端处理 程序很可能是相同的。 实验结果表明,本文的方法实现的工具可以有 效地测试 Web 应用程序的搜索功能,本文的错误定 位方法可以准确地找到出错字符组合。但测试的方 法仍有不足,有些网站可能并不会让错误信息在前 端浏览器上显示,因此无法判断本文的测试用例是 否会引起服务器内部错误。开发者可以通过读取系 统日志来解决此问题。 5 相关工作 对于许多复杂的软件系统,通常有不同的组件、选 项或参数相互作用。对于这样的系统,组合测试是一种 非常有效的黑盒测试技术,它可以应用于不同的测试 级别,如单元测试、集成测试和系统测试。最近,有不 少研究者将这种测试方法应用到Web测试和安全测试。 使用组合测试来检测Web应用程序的搜索功能 是否存在错误,而Bozic和Simos等[12-13,17] 则将组合测 试以及组合测试错误定位的方法应用到XSS攻击检 测上。Bozic使用不同组合强度生成的字符串测试用 例对3个Web程序进行测试,结果显示组合测试的方 法十分有效。在接下来的研究中,他们将约束条件 加入到组合测试模型中,能显著提高测试用例的质 量。Simos 等[17] 在 Bozic 的基础上,继续研究组合测 试在XSS攻击上的应用。他们使用组合测试错误定 位的方法来识别 XSS 诱导组合,XSS 诱导组合是输 入参数值的组合,任何包含此诱导组合的测试用例 一定会在运行时成功触发XSS漏洞。 XSS诱导组合 的识别有助于更好地理解 XSS 漏洞的根本原因,帮 助安全人员设计有效的过滤函数来避免这些漏洞。 Raunak等[7] 将组合测试的方法应用到Web应用 程序的搜索功能测试上。在国家漏洞库(National Vulnerability Database,NVD)网站开发实现新功能 后,开发人员发现某些特殊字符会导致“服务器错误” Table 6 “recall”of fault location method 表6 错误定位方法“查全率” Web uir cupl csu gscass wenda ahau nwsuaf uibe bnu 覆盖强度 t 2 2 2 2 2 2 2 2 3 4 2 3 4 未加入FCI约束结果 测试用例数量 81 81 81 81 81 81 81 81 725 5 459 81 725 5 459 错误率/% 4.9 6.2 6.2 6.2 7.4 8.6 11.1 8.6 9.1 8.8 8.6 9.1 8.8 加入FCI约束Method_A 测试用例数量 87 87 87 87 84 86 86 87 727 5 332 87 727 5 332 错误率/% 0 0 0 0 0 0 0 2.3 1.0 0 2.3 1.0 0 加入FCI约束Method_B 测试用例数量 82 84 84 84 80 80 77 80 80 错误率/% 0 0 0 0 0 0 1.3 0 0 Table 7 “precision”of fault location method 表7 错误定位方法“查准率” Web uir cupl csu gscass wenda ahau nwsuaf uibe bnu 平均 Method_A FCI数量 58 72 72 72 61 95 126 95 126 86.3 Method_A “查准率”/% 6.9 6.9 6.9 6.9 6.6 7.4 5.6 7.4 5.6 7.4 Method_B FCI数量 4 5 5 5 5 12 15 7 10 7.6 Method_B “查准率”/% 100.0 100.0 100.0 100.0 20.0 58.3 46.7 100.0 70.0 77.2 1848