一种面向路径的测试数据自动生成工具

合集下载

一种路径测试数据自动生成方法

一种路径测试数据自动生成方法

的输入空问会因复杂的程序 结构而迅速非线性 化 , 成为多维、 非连续、 多极值…的复杂求解空 问,程序 的测试数据 生成 问
题通常会转化为 N P完全 问题 或 N P难 问题 I遗 传 算法 对 于 。
求解空间无需训练和先验知识 ,具有仅依赖于算法 自身 的寻 优 机 制 以 及 为 目标 问 题 所 设 计 的 适 应 值 函 数 的 引导 即可 完成
可见 ,在 Tl相邻的 2 个子路径中 ,只移 出了一个节点 ,
而 引入 了 一 个新 节 点 ,实 际是 采 用 了 以 TI的相 邻 重 叠 路径 段对 路 径 进 行 描 述 ,称 其 中 的 , , f …, } 重 叠 路径 为 (vr p e a ) Tf共 包含 ( + ) 路 径 ,取 得 了 节点 oel p d t 。 a ph 1段子
路 径 测 试 是 指 设 计 相 应 的测 试 数 据 ,使 得 被 测 程 序 在 执 行 该 组 测 试 数 据 时 ,能 经 过 程 序 中 的某 一 指 定 路 径 。程 序 结
自动化 ;胡春华 ,助 理研 究员 ;陈少波 ,博士研 究 生 ;李路 明 ,
教 授 、 博 士 生导 师
文献标识码:A
中 圈分类号: P1. T 31 5

种 路 径 测 试 数 据 自动 生 成 方 法
曹 洋 ,胡春华 ,陈少波 ,李路 明
( 华 大 学 航 天 航 空 学 院 人 机 与 环 境 工 程 研 究 所 ,北京 10 8 ) 清 0 0 4

要 :适应值 函数 的设计是决定测试数据生成质量和效率 的关键 ,为 此提 出一种重叠路径 结构 ,对程序路径进行描 述,并设计基于遗传
s o t a o ft e sf n to sb l n e t e c n e g n ea d t ec n u p i n we 1 h w h t het n s u c i n a a c h o v r e c n i o s m to l. t w i m

一种基于改进遗传算法的测试数据自动生成

一种基于改进遗传算法的测试数据自动生成
S GA=( C, E, P o , M, , F, , T) ( 2 . 1 )
其 中 C是个 体 的编码 方法 , E是个 体适 应度 评 价
1 ) 运行被测试程序, 在 程 序 中插 桩 , 记 录 每 个 个 2 ) 对 种 群 中 的 个 体 进 行 适 应 度 的评 估 ,使 用
软件质 量 , 缩 短软 件 开发 周期 , 减少 软件 成 本 , 人 们 开 那 么可 以认 为程 序 中 的每 个 语 句都 已经 检验 过 了, 即
展 了广泛 而 深入 的研 究 , 实 践 证 明测试 数 据 的 自动 化 达 到 了语 句覆 盖 , 这 种测 试 方 法就 是 独 立路 径 测试 方
函数从 而 自动生 成测 试ቤተ መጻሕፍቲ ባይዱ 据 [ 3 1 。 本文在 P r a v e e n R a - j a n S r i v a s t a v a思想 的基础 上 , 传算 法 进 行 改 进 ,并通 过 实验 验 证 了该 算 法 的 有 效
性。
循 环简 化 成一 次和 零 次两 种 情 况 , 从而 极 大 地减 少 路
2 . 遗传 算 法
遗传 算 法 ( G e n e t i c A l g o r i t h m ) 是一种通过模拟 自
预处 理包 括 确 定输 入 变量 和 约 束条 件 , 编 码 产 生 ( 2 ) 计算初 始 种群 的环 形 复杂度 ( P a t h N u mb e r ) , 遗 传迭 代 次数 f g e n ) = 0 。 ( 3 ) 当P a t h N u mb e r小于 所 需 的测 试 用 例 数 目时 , 循环 执 行 以下步 骤 :
径 的数 量 , 使 得覆 盖 这 些 有 限 的路 径 成 为 可 能 , 这 种 3 . 3改进 的遗 传 算法 的算 法描 述 本 文提 出的改进 的遗 传 算法 的算 法描 述如 下 :

网上购物系统_文献综述[详解]

网上购物系统_文献综述[详解]

网上购物系统_文献综述文献综述(开题报告)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:测试覆盖分析,显示没有测试的代码路径,基于源码结构分析。

基于遗传算法的路径测试用例的自动生成探讨

基于遗传算法的路径测试用例的自动生成探讨
2 o m ̄o s R 繁9 翔

No . 9
ELEc T RONI C TEsT
基于遗传算法的路径测试用例 的 自动 生成探讨
田丽芳
( 黄淮学 院信 息工程学 院 ,河南驻马店 4 6 3 0 0 0 )
摘要 :在软件 开发 中进 行软件测试是 为了保 证软件质量和可 靠性 。软件测试 中测 试数据合理设计很关键 。如何 优化测试 数据 ,自动 生成 测试 数据是 人们一 直研究 的问题 ,本文针 对测试 用例 的自动化 生成 进行 了深入 的研
e x p e i r me n t a l r e s u l t s s h o w ha t t ,t h e a u t o ma i t c g e n e r a i t o n o f t e s t c a s e s o f t h e s y s t e m c a n c o mp l e t e a s e t o ft a r g e t p a t h,a n d
of t e s t d a t a o f t he a ut om a ic t g e ne r a io t n o f t e s t c a s e s ,b a s e d o n t he i n—de pt h r e s e a r c h, us i ng g e ne t i c a l g or i t hm ba s e d
0 引言
工设 计输 入 测试 数 据 ,费 工 费时 易 出错 ,那 么 ,如何 来 确 保 软件 开 发质 量 ,实 现 软件 测试 工具 的 自动 化 。现 在
目前 ,软件 应 用 已经 渗透 到 各 个领 域 ,软件 质量 问 测试 用 例 的 自动生 成 还远 不尽 如 人 意 。本 文探 讨 一种 有

面向路径的测试数据自动生成工具的设计与实现

面向路径的测试数据自动生成工具的设计与实现

关键词 :测试数 据 自动 生成 ;软 件 工具 ;U ;面 向对 象 ML
K yw rs u m t s dt gnr i ;s ta o;u ie oen nug ;oj t r t e od :a t a t t a eea o o w r t l nf dm dl gl gae b c- i 6 o e e d a tn f e o i i a e oe d n
(col f s t e c ne a oa U i ri f e leTenlg,clns 407 ,C ia Sh o Cma rSi c.N tnl nv syo D fl e oo ̄ l g ̄ 103 hn ) 0 mt e i e t et S h a 摘 要 :面 向路 径 的测试数 据 生成 问题是软 件 测 试 中的 一 个基 本 问题 。G p ut a等提 出一种 线性化
l e msi sf a etsig G p t l m n o t r e t . u m e p w n a ameh d w ihi r ff dt steI rt eR l ain Me} ,t to , h c s ee r o a h t ai e e v ea t x o 【 I d o o
单锦辉 ,王 戟 ,齐治 昌,马晓 东 ,单黎 君
SJ i-t .WA G J,Q h-h n ,MA i -o g H N Ld n I  ̄N Jnhf i N i IZ i a g c Xa d n .S A i u o ( 防科技 大学计 算机学 院,湖南 长 沙 407 ) 国 103
维普资讯
( 3 1 5 /T .2 8 P £S 0 一3N NEE I & S I q E OC U/ d G/ RNG CF C 3

管理信息系统考试题库(附答案)

管理信息系统考试题库(附答案)

“产出”问答题:试讨论当今信息系统面临哪些挑战?P22要点:(1)政治因素对信息系统的影响。

民主进程的加快,政治体制改革的深入,要求建立一个廉政、高效、有序的政府,人们要求民主进程的加速,要求透明度的进一步提高。

在这种背景下,信息系统的建立和发展不仅为企业所需,也正在成为政府电子政务的组成部分。

(2)经济因素对信息系统的影响。

信息系统的建立与完善需要大量的资金注入,信息系统既可以促进经济的发展,同时,资金的回笼与投入也将成为企业发展信息系统的一个现实的制约因素。

(3)人文因素对信息系统的影响。

信息系统是科技发展和社会进步的结果之一,其核心问题不在于技术本身,而在于人。

现实生活中,人们的生活理念、思想意识、风俗习惯、知识水平、知识结构、工作作风、工作的工艺流程等等诸多方面都对信息系统的应用和发展起到不同程度的影响。

(4)信息系统本身的挑战。

人们要求信息系统硬件结构趋于合理化,性能更好;随着工作对信息处理的要求不断提高,人们对软件的要求会越来越高。

论述TPS、MIS、DSS之间的相互区别与联系。

要点:(1)信息系统是为组织目标服务的,组织每个层面都对应着相应的信息系统,因此,信息系统相应的划分为决策支持系统(DSS)、管理信息系统(MIS)和事物处理系统(TPS)。

(2)TPS可以保证企业数据记录和处理的准确性,可以快速及时地产生企业运营所需要的各种数据报表;TPS常有助于改善企业的服务质量,提高顾客的满意度。

TPS还是企业其他信息系统的基础,例如决策支持系统、高层主管信息系统等都需要从TPS获得基础数据。

(3)MIS与TPS的主要区别在于它可以提供分析并辅助决策,为组织更好的运作、管理和决策提供帮助。

当然,这种对决策的辅助作用是较为有限的,它主要帮助组织解决结构化或程序化的问题。

(4)DSS系统是面向组织中的高层决策者和中层管理人员,支持半结构化或非结构问题,进行决策或辅助管理决策;DSS更强调灵活性、多变性和快速响应;DSS系统开发过程不是固定的,其系统分析和系统设计将根据需要不断地反复进行试述组织内部的五种流及其相互关系。

一种结构测试数据自动生成的框架

一种结构测试数据自动生成的框架

Fr m e r f a wo k o t m a i e t Au o tcT s t e e a i n Da a G n r to f rS fwa e S r c u e o o t r tu t r
C N Jfn S NJ n i WAN Z ia , HE i g, HE u y , e G hh i WAN X nu G ij n
流和数据流的结构测试数据 自动生成 的框架 。该框 架根据控 制流和 数据流测试 中所采用 的覆盖标准优化选取测试路径 , 以改进后的迭代 并 松弛法为核心 ,对所选取 的路径 生成测试数据 。以基于路径 覆盖、分支覆盖和数据流覆盖测试数据 自动生成这 3 种算法 为核 心,开发了一 个测试数据 自动 生成的框架原型。实验结果表明该框架是可行 的。 关健诃 :结构测试 ;控制流 ;数据流 ;测试数据 自动生成
C e me g d t t — re t d t s a a g n r to n s fwa e c sr c i n ts i g Th o e a e c t ra f rc tol o a d d t o a e u e O n a b r e pah o n e t t e e a i n i o o i e d t r on t u t e tn . e c v r g r e on w a f w r s d t o i i o r f l n al o tmi e t e s lc i n o s a h h e a p o c n p t — a e u oma i e td t e e a i n i u e o g n r t e t a rt e s l ce a h p i z e e t ft t t .T p r a h o ah b s a t h o e p d tc t s a a g n r to s s d t e e ae ts t f h e e t p t .A dao d p o o y e on t e fa wo i d v l p d b s n t e a t ma i e td t e e a i n f r p t — a e , r c n a a fo c v r g . e tr s ls r t t p me  ̄ s e e o e a e o u o tc t s a g n r to o a b s h d h a h d b a h a d d t w o e a e T s e u t n l s o t a e fa wo i e sb e h w t h me  ̄ sf a i l . h t

面向路径的测试数据自动生成工具的设计

面向路径的测试数据自动生成工具的设计

盖标准来选取 测试路径 , 并以改进后的迭代松 弛法为核心 , 对所选取 的路径生成测试数据 。同时工具采用 Fbnci ioac 法优化选取路 径, 对不可达路径进行处理, 并对测试数据 的分 支覆盖率、 C D P覆盖 率等进行 了统计。 实验 结果表 明该工具是可行的。
关 键 词 : 径 ; 试 数 据 自动 生 成 ; 盖 率 路 测 覆
t e t o i fa il . h o l S e sb e
Ke r s p t a tmai e t d t e e ai n c v rg ae y wo d : ah; u o t ts aa g n r t ; o e a e r t c o

要 : 计 了一 个 通 用 的基 于控 制 流 和 数 据 流 的 结 构测 试 数 据 自动 生 成 的 工 具 。 工具 根 据 控 制 流 和 数 据 流 测试 中所 采 用的 覆 设 该
En i e rn n p iain ,0 0, 6 1 : 3 5 . gn e ig a d Ap l t s 2 1 4 ( 5)5 - 6 c o
A b t a t A pah— s d o t e o ] o a t ma i t s p rThe o e a e rtra o c nr l sr c : t — e s fwar to n u o tc e t t e rto i d sg d n h s pa e . c v r g c e fr o to ba i i
C m u rE gnei n p l a os o p t n i r g ad A pi t n 计算机工程与应用 e e n ci
2 1 ,6 1 ) 0 0 4 (5
5 3

软件测试中的测试数据如何生成

软件测试中的测试数据如何生成

软件测试中的测试数据如何生成在软件测试领域,测试数据的生成是一个至关重要的环节。

它直接影响着测试的质量、效率和准确性,对于发现软件中的缺陷和验证软件的功能起着关键作用。

那么,如何有效地生成测试数据呢?首先,我们需要明确测试数据的类型。

一般来说,测试数据可以分为正常数据、边界数据和异常数据。

正常数据是指符合软件预期输入规范的常见数据;边界数据则是处于输入范围边界的值,例如最大、最小或特定的临界值;异常数据则是那些不符合正常输入规则、可能导致软件出错的数据。

对于正常数据的生成,我们可以从实际的业务场景中获取灵感。

比如,如果是一个电商网站的购物车功能测试,正常数据可能包括常见的商品数量、价格组合等。

可以通过对用户行为的分析和历史交易数据的研究,来确定这些正常的数据范围和模式。

边界数据的生成需要特别小心。

以一个输入年龄的字段为例,假设允许的年龄范围是 18 到 65 岁,那么边界数据就包括 18 岁、65 岁,以及刚刚超过和低于这个范围的值,比如 17 岁、66 岁。

通过对这些边界值的测试,可以发现软件在处理极限情况时是否存在问题。

异常数据的生成则更具挑战性。

这可能包括输入错误的数据格式(如字符串代替数字)、超出合理范围的极大或极小值、空值或者包含特殊字符的数据。

例如,在一个要求输入电话号码的字段中,输入一个过长的数字串或者包含字母的字符串,来检查软件对这种异常输入的处理能力。

接下来,谈谈测试数据的生成方法。

一种常见的方法是手动生成。

测试人员根据对软件功能的理解和需求规格说明书,手动编写和构造测试数据。

这种方法的优点是针对性强,可以精确地控制数据的内容和特征。

但缺点也很明显,那就是效率低下,对于大规模的数据需求难以满足。

另一种方法是使用工具自动生成测试数据。

市面上有许多专门的测试数据生成工具,它们可以根据设定的规则和模式,快速生成大量的测试数据。

这些工具通常能够生成各种类型的数据,包括随机数据、符合特定分布的数据等。

基于Java语言的面向路径测试用例自动生成框架设计

基于Java语言的面向路径测试用例自动生成框架设计

想、 心算 法、 要模 块及 工作 流程 进行 了 阐述 . 框 架 可 以很好 的 为给 定路 径 自动 生 成测 试 用 核 主 该
例 .
关键词
面向路 径 , 测试 用例 , 元测试 , 单 谓词 , 件测 试 软 TP 1 . 315 文献 标识码 A 文章 编号 1 7 — 6 4 2 0 ) 10 8 —3 6 2 6 3 (0 7 O ~ 0 60
维普资讯
第2 卷 0
第 1期
聊 城 大 学 学报 ( 自然 科 学 版 )
J u n lo a c e g Unv r i Na. c. o r a fLio h n iest y( t S i)
V0 . 0 No 1 12 .
M a. 0 7 r2 0
Байду номын сангаас
盖 的测试 , 求对程序 内部 的结构 特性做 到一定 的覆盖 . 于路径 的测试 数据 自动生成是 一种 性价 比比较 要 基
高 的方 法 , 0世纪 7 自2 0年代 以来 有关 这一 领域 的研究 就 已经展 开 . 于路径 生成测 试数 据 的方法 主要 ]基
有两 种 : 态方法 , 静 动态 方法 . 静态 方法 以符 号运算 为 主要代 表 , 静态 分析 给定路 径 上 的相关 变量 和谓 词 ,
1 迭 代松 弛 法
迭代 松弛法 是 由珀杜大 学的 Ne lm Gu t ea pa等人 于 1 9 9 8年提 出 的 , 它是一 种动态 方法. 它采用 程序 切
片 的思 想 , 从输 入 域 中任 意输 入一 组数 据 , 后考察 给定 路 径上 的各分 支谓 词 , 过分 析确 定 各谓 词 函数 然 通
中图分类 号

一种基于分支覆盖的测试数据自动生成算法

一种基于分支覆盖的测试数据自动生成算法
取新 的路径 , 重复以上过程 , 直至求出所期 望的数据 , 或无新的路径 被选取 , 给定分 支不可达 。实例和 实验表 明, 法 算
可行 、 效 。 有
关键词
分 支覆 盖 , 词 函数 , 谓 线性 算 术表 示
Au o a i e t t n r t n Al o i m n Br n h Co e a e t m t T s a Ge e a i g rt c Da o h o a c vrg
Ab ta t I r e o g n rt e td t o ie rn h,an w r g a fo g a h i cn tu td,a d F b n c i src no d rt e eae ts a afragv n b a c e p o rm lw rp s o sr ce n io a c meh d i u e O o t z h ah s lcin Th o c pin a d c luain t ah b s d ts aa g n r t n em — t o s sd t p i e te p t ee t . mi o ec n e t n ac lt O p t— a e etd t e eai o o o o pe iyi rs n e . I alb a c rdc tso h ee td p t r ie re p e so lxt sp e e td f l r n h p e iae n tes lce ah a el a x rsin,te1 e rc n tans ti o — n h i a o sri e sc n n sr te n ov d t e e aets aa tewie t ep t a e d tr n d ifa il. Ele h e iaie fa tu td a ds le og n r t e td t ,o h r s h ah c n b eemie ne sbe s ,t ed rv tv so

c语言单元测试用例全自动生成软件wings介绍

c语言单元测试用例全自动生成软件wings介绍

wings是一款用于单元测试测试用例驱动框架自动生成工具,简单来说这款工具主要是全自动生成单元测试驱动代码与测试数据。

下面我们尝试使用wings来完成单元测试框架与测试数据的自动生成。

首先准备好需要测试的C语言工程,本文以大型开源软件Mysql为例。

第一步:打开wings工具,选择被测工程的主要目录。

第二步:点击工程操作中的分析生成,对工程目录下的.c文件进行解析,保存为XML 的格式,生成的文件保存在工程目录下的FunXml与GlobalXml中,分别是函数信息与全局变量的信息,点击驱动文件结构图,即可看到对应文件的函数结构信息。

上图可以查看所有.c文件的驱动函数,以及函数所对应的参数信息与全局变量的信息。

第三步:点击功能操作驱动生成,完成项目的驱动框架自动生成,驱动文件保存在wings_projects下的Driver文件夹下。

点击驱动文件,即可看到对应.c文件的驱动生成代码。

点击单个函数,可以高亮定位到函数所在位置,并且双击函数参数,可以定位到每个参数的赋值单元,查看每个参数的具体驱动赋值代码。

第四步:点击值功能操作的值生成按钮,则对应生成测试数据。

界面上显示为单个函数的测试数据,可依据需要修改测试次数,重新生成测试数据文件,也可依据需要修改特定的测试数据。

第五步:将驱动文件加载到所在工程目录,与源文件一起编译,即可运行。

如果想查看对应的函数信息与全局变量信息,则右键对应打开对应的Parameter Struture Description(函数信息结构体)与Global Parameter Struture Description(全局变量结构图)。

Parameter Struture Description(函数信息结构体):显示函数的名称,参数个数,参数类型以及复杂类型的展开形式。

Global Parameter Struture Description(全局变量结构图):显示全局变量的结构信息。

面向路径的测试数据自动生成工具

面向路径的测试数据自动生成工具

中图 分类号: P1 T3 1
面 向路径 的测 试 数据 自动 生 成工 具
李宝林 ,李 志蜀 ,陈 良银 ,邢建川 ,叶
( 四川大学计算机学 院 ,成都 6 0 6 ) 10 4 摘 要 :针对测试路径覆盖 的可行性 问题 ,给出了一种新 的面 向路径测试覆盖准则 的测 试数 据 自动生成工具。并对 L n t N 路径覆盖准 eg _ h
试覆盖准则 由此被提出。
程序在测试用例 上执 行以发现软件 中存在的缺陷是种基 本的测试方法。传统 的人 工构造测 试用例方式工作量大 ,测 试周期长 ,且容易出现测试遗漏。测试用例 自动构造技术可 以较好 地弥补这些缺陷。为了更好地 解决上述问题 ,对启发
当程序 P 所对应 C G 中的分支节点数足够多的情况 m F
Pa h. re t d T o o t o i n e o l rAut m a i e t f o tcT s t e e a i n Da a G n r to
LIBa -i LIZh-h , ol n, i u CHEN a gyn, NG in c u n YE u s Lin -i XI Ja -h a , Jn
下 ,路径覆盖准则往往 行不通 ,假设 C G中的分支数为 L, F 在不包括循环 的情况下 ,其完整路径 数为 2 ,当 L 1 > 0时,
中的一个有限子集进 行测试 ,如基本路径覆盖测试就是选择 了一个能覆盖系统 中所有状态 的路径子集 。一种新 的路径测
) 是尾 ,
) 是头 。如果 ( ) = ,则 和 e / 是临界边。 ) H() 是 e的前驱节点 。
) 是 ) 的后继节点 ,
定义 1 完 整路 径 :如果 一 条 路 径 P ee…e = 12 。满 足

带数组和循环的路径测试数据自动生成技术研究

带数组和循环的路径测试数据自动生成技术研究

关的数组元素 , 将循 环中的同一变量名在每 一次执行 时用不同的变量参数来替代 , 从而较好地解决 了路径 中数组循环 有效处理的 问题 。为有效 、 简单地 自动 生成测试数据 , 建立 了谓词函数关 于输入变量的线性约束 系统 。当谓词函数为 线性表达式 时, 不需要计 算其 线性 算术表 示, 计算非线性 函数谓 词 函数 的线性算术表 示, 不需计算路径 中的谓词 仅 且
( p rm e to m p tr H u a n e n to a o o isUn v riy, a g h 1 05 Chia De at n fCo u e , n nI t r ain lEc n m c ie st Ch n s a 4 02 , n)
Ab t d t A e a p o c mp s o a h b s d a t ma i e td t e ea in wi r a sa d lo s Th p r a h, sr c n w p r a h i p o e f rp t - a e u o t t s aa g n r t t ar y n p . ea p o c i s d c o h o n whc n y t ea r y ee n s r l e O t e b a c r ia e n t e p t ss lce n l b a c r i tso h a h a e ih o l h ra l me t ead t h r n h p e c tso h a h i ee t a d al r h p e c e n t e p t r t d d n d a smu n u l o sd r 。 d p e o c n tu tt e l e rc n tan s tr Th o p i o t p e d d o h i e ah Th i t e s c n ie e i a o t t o sr c h i a s r i y e ̄ a o y d s d n o s e lo u s ra e n t g v n p t . e s e s me v ra l i rp a e yd f r n a ib e a h e e u in o h o p I t rd c t u c in i l e r i i n t e d dt a ai be S e l d b i e e tv r l i e c x c t ft el . f h p e i ef n t i a 。t s o e e c f a sn o e a o S n n O o c mp h ie ra i me i rp e e tt n o r i t u c in Ot r s ,h s c mp tt n i n e e . S u t o 。  ̄et l a rt e n h t e r s n ai fp e c e f t o . h wi t i o u a i S e d d A1O i o rmeh d c o d a n e e o n i’ o e d mp t h l e 。d n i h n u e e d n y s t d c n t c h n a n tan y t m fp e i t t s n tn e e t c d O o u e t e si s ie t y t e ip t p n e c e sa s m tt l e rc s r i t se o rd c e c f d n o e i o s a
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种面向路径的测试数据自动生成工具单锦辉北京大学信息科学技术学院软件研究所(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]”的结果,故违反了设计要求,从而发现函数中存在错误。

相关文档
最新文档