一种面向路径的测试数据自动生成工具
- 格式:doc
- 大小:185.00 KB
- 文档页数:8
网上购物系统_文献综述文献综述(开题报告)1. 引言软件测试伴随着计算机软件的产生而发展起来。
在早期的软件开发的过程中,软件就是由程序员写的简单计算机程序代码。
软件测试是软件工程中的一个重要部分,而自动化测试则又是软件测试中一门新兴学科。
它可以有效地提高在软件测试过程的劳动生产率,提高软件质量,降低成本。
在国外,自动化测试理论、自动化测试工具和自动化测试培训都已经十分的成熟并得到了广泛的应用,而在国内则基本上比较滞后。
因此,正确有效地把国外先进的自动化测试技术引入到国内的公司和项目中来是一件十分有意义的事。
参考文献1主要介绍了从软件测试的技术与过程、持续的软件测试、软件测试的充分性准则等方面简要介绍软件测试的基本思想讨论软件测试中的若干问题包括面向路径的测试数据自动生成、测试预言、期望结果的自动生成、回归测试等并且探讨软件测试的发展趋势包括构件测试、软件的易测试性与基于合约的构件易测试性设计和 WebServices 测试等.2. QTP 自动化测试的特点,优势及简介2.1. 自动化测试的定义自动化测试,顾名思义,是一种采用自动化测试工具将测试过程自动化的一种技术。
从它的定义来看,有两个需要注意的地方。
第一,它是以传统的测试测试为基础的,但是它与普通的手动测试有着很大的区别。
自动化测试有其自身的特点,纯粹的将手工测试的流程搬到自动化测试上是不行的。
第二,自动化测试不等于使用自动化测试工具。
正如软件设计比学习编程语言困难一样,自动化测试要比学习测试工具困难。
并且会使用自动化测试工具并不代表你了解自动化测试流程。
3 参考文献2强调了软件测试是软件开发过程中不可缺少的一环是保证软件质量的关键。
文中从提高软件测试的效率入手阐述目前软件测试中存在的问题与不足对提高软件测试效率的方法做出了分析和研究提出了一个完整的软件测试流程。
其优点有: 1)、节约(人力、时间)资源、缩短软件测试周期,使产品可以更快的投放到市场 2)、增强软件的稳定性和可靠性,提高软件测试的准确度和精确度,增加软件信任度,由于自动化测试在测试执行过程中,脱离人为因素,所以可以避免人为失误而造成的“缺陷”。
好用的几个测试软件白盒测试软件1、LogiscopeLogiscope是面向源代码进行工作的,贯穿于软件开发、代码评审、单元测试、集成测试、系统测试、以及软件维护阶段。
LOGISCOPE是法国Telelogic公司推出的专用于软件质量保证和软件测试的产品。
其主要功能是对软件做质量分析和测试以保证软件的质量,并可做认证、反向工程和维护,特别是针对要求高可靠性和高安全性的软件项目和工程。
本产品应用于软件的整个生命周期,它贯穿于软件需求分析阶段和设计阶段->代码开发阶段->软件测试阶段(代码审查、单元/集成测试和系统测试)->软件维护阶段的质量验证要求。
在设计和开发阶段,使用LOGISCOPE可以对软件的体系结构和编码进行确认。
可以在尽可能的早期阶段检测那些关键部分,寻找潜在的错误,并在禁止更改和维护工作之前做更多的工作。
在构造软件的同时,就定义测试策略。
可帮助编制符合企业标准的文档,改进不同开发组之间的交流;在测试阶段用LOGISCOPE,使测试更加有效。
可针对软件结构,度量测试覆盖的完整性,评估测试效率,确保满足要求的测试等级。
特别是,LOGISCOPE 还可以自动生成相应的测试分析报告;在软件的维护阶段,用LOGISCOPE验证已有的软件是否是质量已得到保证的软件,对于状态不确定的软件,LOGISCOPE可以迅速提交软件质量的评估报告,大幅度地减少理解性工作,避免非受控修改引发的错误。
Logiscope包括三个工具:Logiscope RuleChecker:根据工程中定义的编程规则自动检查软件代码错误,可直接定位错误。
包含大量标准规则,用户也可定制创建规则。
自动生成测试报告。
Logiscope Audit:定位错误模块,可评估软件质量及复杂程度。
提供代码的直观描述,自动生成软件文档。
Logiscope TestChecker:测试覆盖分析,显示没有测试的代码路径,基于源码结构分析。
“产出”问答题:试讨论当今信息系统面临哪些挑战?P22要点:(1)政治因素对信息系统的影响。
民主进程的加快,政治体制改革的深入,要求建立一个廉政、高效、有序的政府,人们要求民主进程的加速,要求透明度的进一步提高。
在这种背景下,信息系统的建立和发展不仅为企业所需,也正在成为政府电子政务的组成部分。
(2)经济因素对信息系统的影响。
信息系统的建立与完善需要大量的资金注入,信息系统既可以促进经济的发展,同时,资金的回笼与投入也将成为企业发展信息系统的一个现实的制约因素。
(3)人文因素对信息系统的影响。
信息系统是科技发展和社会进步的结果之一,其核心问题不在于技术本身,而在于人。
现实生活中,人们的生活理念、思想意识、风俗习惯、知识水平、知识结构、工作作风、工作的工艺流程等等诸多方面都对信息系统的应用和发展起到不同程度的影响。
(4)信息系统本身的挑战。
人们要求信息系统硬件结构趋于合理化,性能更好;随着工作对信息处理的要求不断提高,人们对软件的要求会越来越高。
论述TPS、MIS、DSS之间的相互区别与联系。
要点:(1)信息系统是为组织目标服务的,组织每个层面都对应着相应的信息系统,因此,信息系统相应的划分为决策支持系统(DSS)、管理信息系统(MIS)和事物处理系统(TPS)。
(2)TPS可以保证企业数据记录和处理的准确性,可以快速及时地产生企业运营所需要的各种数据报表;TPS常有助于改善企业的服务质量,提高顾客的满意度。
TPS还是企业其他信息系统的基础,例如决策支持系统、高层主管信息系统等都需要从TPS获得基础数据。
(3)MIS与TPS的主要区别在于它可以提供分析并辅助决策,为组织更好的运作、管理和决策提供帮助。
当然,这种对决策的辅助作用是较为有限的,它主要帮助组织解决结构化或程序化的问题。
(4)DSS系统是面向组织中的高层决策者和中层管理人员,支持半结构化或非结构问题,进行决策或辅助管理决策;DSS更强调灵活性、多变性和快速响应;DSS系统开发过程不是固定的,其系统分析和系统设计将根据需要不断地反复进行试述组织内部的五种流及其相互关系。
软件测试中的测试数据如何生成在软件测试领域,测试数据的生成是一个至关重要的环节。
它直接影响着测试的质量、效率和准确性,对于发现软件中的缺陷和验证软件的功能起着关键作用。
那么,如何有效地生成测试数据呢?首先,我们需要明确测试数据的类型。
一般来说,测试数据可以分为正常数据、边界数据和异常数据。
正常数据是指符合软件预期输入规范的常见数据;边界数据则是处于输入范围边界的值,例如最大、最小或特定的临界值;异常数据则是那些不符合正常输入规则、可能导致软件出错的数据。
对于正常数据的生成,我们可以从实际的业务场景中获取灵感。
比如,如果是一个电商网站的购物车功能测试,正常数据可能包括常见的商品数量、价格组合等。
可以通过对用户行为的分析和历史交易数据的研究,来确定这些正常的数据范围和模式。
边界数据的生成需要特别小心。
以一个输入年龄的字段为例,假设允许的年龄范围是 18 到 65 岁,那么边界数据就包括 18 岁、65 岁,以及刚刚超过和低于这个范围的值,比如 17 岁、66 岁。
通过对这些边界值的测试,可以发现软件在处理极限情况时是否存在问题。
异常数据的生成则更具挑战性。
这可能包括输入错误的数据格式(如字符串代替数字)、超出合理范围的极大或极小值、空值或者包含特殊字符的数据。
例如,在一个要求输入电话号码的字段中,输入一个过长的数字串或者包含字母的字符串,来检查软件对这种异常输入的处理能力。
接下来,谈谈测试数据的生成方法。
一种常见的方法是手动生成。
测试人员根据对软件功能的理解和需求规格说明书,手动编写和构造测试数据。
这种方法的优点是针对性强,可以精确地控制数据的内容和特征。
但缺点也很明显,那就是效率低下,对于大规模的数据需求难以满足。
另一种方法是使用工具自动生成测试数据。
市面上有许多专门的测试数据生成工具,它们可以根据设定的规则和模式,快速生成大量的测试数据。
这些工具通常能够生成各种类型的数据,包括随机数据、符合特定分布的数据等。
一种面向路径的测试数据自动生成工具单锦辉北京大学信息科学技术学院软件研究所(100871)随着社会的不断进步和计算机科学技术的飞速发展,计算机及软件在国民经济和社会生活等方面的应用越来越广泛和深入。
作为计算机的灵魂,软件在其中起着举足轻重的作用。
人们在开发软件的过程中难免会引入错误。
软件的失效有可能造成巨大的经济损失,甚至危及人的生命安全。
例如,1996年Ariane 5运载火箭的发射失败等都是由软件故障引起的。
软件测试是保证软件质量和可靠性的重要手段。
软件测试确实能够发现软件中隐藏的许多错误。
例如,在英国约克大学为英国海军开发的SHOLIS 项目中,尽管采用形式化方法描述和证明软件规范,并且采用程序正确性证明方法排除了软件开发前期的许多缺陷,单元测试仍然发现了整个软件开发过程15.75%的错误。
随着人们对软件测试重要性的认识越来越深刻,软件测试阶段在整个软件开发周期中所占的比重日益增大。
现在有些软件开发机构将研制力量的40%以上投入到软件测试之中;对于某些性命攸关的软件,其测试费用甚至高达所有其它软件工程阶段费用总和的3到5倍。
美国微软公司软件测试人员与开发人员的比例为2比1。
现有的软件测试技术通常分为静态测试和动态测试。
静态测试是不执行程序代码而寻找程序代码中可能存在的错误或评估程序代码的过程。
动态测试通过在抽样测试数据上运行程序来检验程序的动态行为和运行结果以发现错误。
动态测试包括三部分核心内容:生成测试用例、运行程序和验证程序的运行结果。
围绕核心的辅助工作有:文档编制、数据管理、操作规程及工具应用等。
动态测试最重要的问题是生成测试用例的策略。
它是动态测试有效、高效的关键。
测试用例包括输入数据和预期结果。
一般说到测试用例生成时,由于预期结果构造的困难性,都侧重或仅生成输入数据,并称之为测试数据。
目前,测试人员一般采用手工方法设计测试数据。
测试数据的自动生成将有效地减轻测试人员的劳动强度,提高测试的效率和质量,节省软件开发的成本。
根据估算,对于一个典型的大型软件项目,若能自动生成测试数据,则能节省整个软件开发费用的4%,相当于数百万美元。
人们一方面开展对软件测试方法的研究,另一方面,将成熟的软件测试方法进行产品化,开发出相应的软件测试工具。
目前,市场上的软件测试工具价格都非常昂贵,动辄几十万元,并且主要集中在软件测试覆盖情况的统计、测试用例的执行和管理等方面。
尚未见任何真正实用的测试数据自动生成工具。
与次同时,市场上对测试数据的自动生成工具有很大的需求。
在我们与国外开发软件测试工具的公司的联系中得知,Raytheon、GM、Cisco、HP等公司都对测试数据的自动生成工具有迫切的需求。
在软件测试中,面向路径的测试数据生成问题可以描述为:给定一个程序P和P中一条路径W,设P的输入空间为D,求x D,使得P以x为输入运行,所经过的路径为W。
软件测试中的控制流测试中诸如语句覆盖、分支覆盖、条件覆盖、判定-条件覆盖、路径覆盖等问题,数据流测试中的定义覆盖、引用覆盖等问题,组装测试中的调用对覆盖、数据流测试等问题,以及面向断言的测试和回归测试中的一些问题都可以归结为该问题。
解决面向路径的测试数据生成的关键在于约束系统的建立和求解。
建立约束系统的困难是分析、化简路径W上的各种语句成分和各种数据类型,建立尽可能简洁的约束系统;求解约束系统的主要困难是处理可能存在的非线性约束。
Matiyasevič和E. J. Weyuker等人的研究表明:不存在通用的有效的算法,对于任意的P和W,能生成使W被经过的程序输入。
但是实际应用的需要迫使人们进行研究,并提出各种方法求解该问题。
目前,国内外面向路径的测试数据生成方法可分为四类:随机法、试探法、静态法和动态法。
随机法实质上是困难的。
试探法主要包括遗传算法和模拟退火法两种。
遗传算法本身很复杂,其理论研究目前相当有限,结果也不太深入,作为遗传算法的理论基石之一的隐性并行性的证明还存在严重缺陷。
模拟退火法的收敛速度很缓慢。
静态法包括符号执行法和区间算术法,它们都需要对W上的语句进行转换,故不能用于黑盒测试。
符号执行方法通常要进行复杂的代数运算,且难于处理依赖于输入变量的循环条件、数组元素下标和函数调用。
区间算术法需要对变量的取值区间进行对分穷举,当变量的取值区间为无穷区间时,该方法也是困难的。
动态法可分为直线式程序法和Bogdan Korel、M. Gallagher等人、Neelam Gupta 等人分别提出的方法等几种。
我们经过多年的研究,在前人的工作基础上,创新地提出一种拥有自主知识产权的为指定程序路径自动生成测试数据的方法。
图1是本方法总体逻辑结构图。
图1本方法总体逻辑结构图本方法由输入接口、词法分析器、语法分析器、约束构造器、约束求解器、路径满足检查器、输出接口模块实现测试数据自动生成。
其总体逻辑结构是:用户指定程序路径W,词法分析器对W进行词法分析后,语法分析器根据词法分析的结果对W进行语法分析,将W转换为约束构造程序和路径满足检查程序,约束构造程序经编译产生约束构造器,路径满足检查程序经编译产生路径满足检查器;约束构造器根据当前程序输入和各输入变量的增量执行W上的语句,不分析W上的语句之间的数据依赖关系,计算W上各谓词函数的线性算术表示,然后建立输入变量的线性约束系统;约束求解器采用线性规划、线性整数规划、线性混合整数规划和最小二乘解法相结合的方法求解线性约束系统;求解后获得新的程序输入即测试数据;最后由路径满足检查器进行检查,若该程序输入能使W被经过则结束,若该程序输入不能使W被经过则根据W上所有谓词函数是否为输入变量的线性函数以及迭代次数上限决定是否继续迭代求解;求解结果由输出接口输出。
采用本方法进行软件测试数据自动生成可以达到如下有益效果:1.改进了已有的测试数据自动生成方法中构造约束系统的方法,使得本方法的构造约束系统的时间效率和空间效率更高。
2.改进了已有的测试数据自动生成方法中求解约束系统的方法,使得本方法生成测试数据的能力更强,通用性更好,对于谓词函数均为输入变量的线性函数或者谓词函数中含有输入变量的非线性函数的一些程序路径能够有效地找到解。
本方法不仅能够用于白盒测试,而且能够用于黑盒测试。
当W上有循环语句而且人们不关心循环体的内部执行情况时,本方法能够直接将该循环作为一个黑盒放在W上,不必将其展开。
当人们不关心W上判断语句是执行“真”分支还是“假”分支时,本方法同样可以直接将该判断语句作为一个黑盒放在W上。
当W上存在函数调用或可执行程序调用时,本方法可以将被调用的函数体或可执行程序视为黑盒,不必在调用处展开,从而进一步提高了效率。
本方法能够直接处理goto语句。
3.当程序路径W上各谓词函数均为输入变量的线性函数且所有输入变量均无整数限制时,迭代一次后,本方法或者能找到所需的测试数据,或者保证该程序路径不可行。
4.可移植性好,不受程序设计语言和操作系统的限制,易于移植到各种程序设计语言和操作系统。
5.适用范围广,能够用于单元测试、集成(组装)测试等阶段以及面向断言的测试数据自动生成和回归测试数据的自动生成。
根据软件工程的思想,我们采用面向对象的方法,使用UML进行设计,在Windows操作系统下用C++语言和Java语言对本方法进行了实现,开发出为C语言和Java语言程序路径自动生成测试数据的原型工具(Path-wise Test Data Generator,简称PTDG)。
图2是PTDG的组成图。
图2 PTDG的组成图它主要由词法分析器、语法分析器、约束构造器、约束求解器、路径满足检查器、数据文件以及用户界面组成。
PTDG的图形界面采用Tcl/Tk实现(见图3)。
用户只需要在PTDG运行开始时从图形界面指定程序路径W、初始输入、输入变量的增量、路径上所有谓词函数是否为输入变量的线性函数以及迭代次数上限等参数,后续的步骤由PTDG自动运行,不需要用户的干预。
如果用户没有指定初始输入、输入变量的增量、路径上所有谓词函数是否为输入变量的线性函数以及迭代次数上限等参数,PTDG将使用缺省的参数值。
PTDG底层的约束求解工具为Lp_solve和Matlab。
在PTDG中,用户输入的程序路径、初始输入和其它参数以及PTDG运行过程中产生的中间结果和最后的求解结果均保存在文件中。
图3 PTDG的图形用户界面图4是PTDG中设置参数的对话框,用户可以指定路径上的谓词函数是否为输入变量的线性函数,修改迭代求解的次数、输入变量的个数以及整型、浮点和双精度浮点类型输入变量在缺省情况下的初值和增量。
图4 PTDG中设置参数的对话框在以下函数中,对于一个具有十个元素的数组X,其中各元素的值是任意输入的,要求采用冒泡排序方法对X中各元素进行排序,使得各元素按不减序排列,即X[0]<=X[1]<=X[2]<=X[3]<=X[4]<=X[5]<=X[6]<=X[7]<=X[8]<=X[9]。
但是在该函数中存在一个错误,即外层循环的结束条件“i <= 7”应为“i <= 8”。
void Bubble_Sort(int X[]){int temp, i, j;scanf("%d%d%d%d%d%d%d%d%d%d",&X[0],&X[1], &X[2], &X[3], &X[4],&X[5], &X[6], &X[7], &X[8], &X[9]);for (i = 0; i <= 7; i++)for (j = 0; j <= 8; j++)if (X[j] > X[j+1]) {temp = X[j];X[j] = X[j+1];X[j+1] = temp; }}当在以下程序路径W1=<n1,n2,n3>中调用该函数,n1: i nt X[10];n2: B ubble_Sort(X);n3: @ X[0] > X[1] @PTDG从初始输入<X[0]=X[1]=X[2]=X[3]=X[4]=X[5]=X[6]=X[7]=X[8]=X[9]=1>出发,假设各输入变量的增量为<1,1,1,1,1,1,1,1,1,-1>,经过两次迭代能够找到使W1被经过的程序输入<X[0]=X[1]=X[2]=X[3]=X[4]=X[5]=X[6]=X[7]=X[8]=0,X[9]=-1>。
上述结果表明,存在程序输入<X[0]=X[1]=X[2]=X[3]=X[4]=X[5]=X[6]=X[7]=X[8]=0,X[9]=-1>,当按照这组输入执行W1时,W1是可行的,即调用函数Bubble_Sort后,会出现“X[0] > X[1]”的结果,故违反了设计要求,从而发现函数中存在错误。