(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf_第1页
(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf_第2页
(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf_第3页
(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf_第4页
(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf_第5页
已阅读5页,还剩92页未读 继续免费阅读

(计算机应用技术专业论文)嵌入式覆盖测试工具gammacp的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 随着计算机硬件和软件技术的飞速发展,嵌入式系统的硬件规模和性能得 到了极大的提高,相应的,嵌入式系统软件和应用软件的复杂性和规模也日益提 高,同时嵌入式系统的特殊性决定了运行在其上的系统和应用软件必须精简高 效,稳定可靠,使得软件的开发在整个嵌入式系统开发的中的比重越来越高,软 件的质量对整个产品的质量起到了决定性的作用。因此我们迫切需要一种针对嵌 入式领域的测试工具来提高软件的质量和可靠性,缩短软件的开发周期。 本课题的目标就是设计并实现一种面向嵌入式领域的专业覆盖测试工具。 本课题在对当今主流的专业覆盖测试工具及其实现方法进行了细致深入的分析 的基础上,结合实际情况确定了课题的技术路线和需求,然后对g n u 的覆盖测 试工具g c o v 作了深入研究,在完全消化吸收其关键技术的基础上,突破了汇 编覆盖测试、决策覆盖测试、增益计算等多项关键技术,设计实现了一种在功能、 性能上都与当今主流覆盖测试工具具有可比性的嵌入式覆盖测试工具 g a m m a c p 。 关键词:嵌入式系统、覆盏测试、g n u 、g c o v a b s t r a c t w i t ht h e r a p i dd e v e l o p m e n to fc o m p u t e rh a r d w a r et e c h n o l o g y , t h es c a l ea n d c a p a b i l i t yo f h a r d w a r eo fe m b e d d e ds y s t e mh a sb e e ng r e a t l yi m p r o v e d a c c o r d i n g l y , t h ec o m p l e x i t ya n ds c a l eo fs y s t e ms o f t w a r ea n da p p l i c a t i o ns o f t w a r eo fe m b e d d e d s y s t e ma l s og r o wi n c r e a s i n g l y s i m u l t a n e o u s l yt h es p e c i a l i t yo fe m b e d d e ds y s t e m a s k sf o re m b e d d e ds o f t w a r eb e i n gm o r es m a r ta n dr e l i a b l e t h e r ei sn od o u b tt h a tt h e r & do fs o f t w a r ep l a y sam o r ea n dm o r ei m p o r t a n tr o l ei nr & do ft h ew h o l e e m b e d d e ds y s t e m t h eq u a l i t yo fs o f t w a r ep l a y sad e c i s i v er o l e s ow en e e dat e s t t o o ld e s i g n e df o re m b e d d e dd o m a i nt oi m p r o v et h eq u a l i t ya n d r e l i a b i l i t yo f s o f t w a r e a n ds h o r t e nt h ed e v e l o p m e n t c y c l e t h et a r g e to ft h i ss u b j e c ti st od e s i g na n da c c o m p l i s hac o v e r a g et e s tt o o lf o r e m b e d d e dd o m a i n b a s e do nt h e d e e p l ya n a l y s i s a n dr e s e a r c ho ff u n c t i o na n d m e c h a n i s mo fs e v e r a lc u r r e n tp o p u l a rc o v e r a g et e s tt o o l s ,w em a k es u r ea b o u tt h e t e c h n o l o g yr o u t ea n dr e q u i r e m e n t t h e n o nt h eb a s i so fd i g e s t i n gt h ek e yt e c l m o l o g y o f g n u s c o v e r a g et e s tt o o lg c o v , w e h a v eb r o k e n t h r o u g hs e v e r a lk e yt e c h n o l o g i e s a n da c c o m p l i s h e da c o v e r a g et e s tt o o lo a m m a c p , w h o s e f u n c t i o nm a d p e r f o r m a n c e i s a d v a n c e d k e yw o r d :e m b e d d e ds y s t e m 、c o v e r a g et e s t 、g n u 、g c o v i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谓 的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:堡超堕望 日期:弘w 年剧亨日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名: 域 导师签名: 泞 日期: 矽乒年坟月厂日 1 1 课题背景 第一章引言 第一章引言 嵌入式软件的应用与开发是当今计算机软件发展的一个热点。随着嵌入式技 术的发展,嵌入式应用的不断增长以及嵌入式系统复杂性不断提高,要求嵌入式 软件的规模和复杂性也不断提高,嵌入式软件的质量和开发周期对产品的最终质 量和上市时间起到决定性的影响,嵌入式软件的开发、分析与测试成为了研究的 热点。 随着计算机硬件技术的进步,硬件的集成度越来越高,从而使嵌入式设备的 硬件性能得到了极大的提高;与此同时,通过采用成熟的商用操作系统,使系统 运行在一个高性能的、可靠的软件平台上,为实现各种大型的复杂的应用打下了 良好的基础。面对系统复杂性的增加,自然需要功能强大、性能稳定的应用软件 与之相适应。所以,在嵌入系统开发中软件的规模也越来越大。同时,系统又要 求应用也要精简高效、稳定可靠,使软件的开发在整个系统开发中所占的时问也 越来越长,软件的质量对产品的最终质量起到了决定性的作用。但是事实上由于 软件的开发缺乏科学的管理手段,开发的软件得不到很好的测试与分析,所编写 的程序没有得到有效的测试就交付给用户使用。那些没有运行过的代码带着潜在 的危险交付到客户手中,经常会给用户带来巨大的经济损失、为产品供应商带来 信誉上的损失,在一些特殊的领域甚至会危及人的生命安全。 综上所述,随着嵌入式系统的发展,我们迫切需要一种工具能够在软件开发 的单元阶段、集成阶段、系统阶段等各阶段对嵌入式系统的软件进行实时在线的 测试与分析,以保证软件的质量和可靠性。 1 2 课题综述 本课题主要以g n u 的覆盖测试工具g c o v 为技术基础,在充分消化吸收其 技术的前提下,设计实现了一个面向嵌入式领域,交叉开发环境下的专业级覆盖 测试工具g a m m a c p ,g a m m a c p 适用于以g c c 作为交叉编译器的嵌入式交叉开 发环境下的软件白盒覆盖测试。国内在覆盖测试领域包括嵌入式覆盖测试领域的 研究不多,目前尚无同类型同级别的专业级覆盖测试软件面世。 本课题从原型研制到正式立项,再到正式发布共历时一年半。本人作为该课 题的项目经理参与了该课题的全过程,严格按照软件开发规范组织实旖了原型研 第一章引言 制、项目申请立项、需求分析、概要设计和详细设计、单元实现和测试、集成实 现和测试以及系统测试等主要过程。 本课题的主要工作有: 对国内外的业界动态以及新技术、新产品进行了深入的了解,对国内的 市场需求作了细致的分析; 对交叉编译器g c c 和g c o v 做了深入的技术分析,掌握了覆盖测试的 基本技术; 设计并实现了g a m m a c p ,达到了可靠性高、功能强大、使用方便等目 标,使之达到了国内先进水平; 使g a m m a c p 具各对多种程序语言的支持( 汇编c c + + ) ; 移植g a n u n a c p 到多种目标机平台( x 8 觚砌以7 ,a r m 9 ) 和多种嵌入式 开发环境( l a m b d a t o m a d o ) ; 完成对g a m m a c p 的单元测试、集成测试和系统测试。 1 3 章节安排 第一章介绍了本课题的背景和一些情况; 第二章介绍了本课题所涉及的一些基本概念,以便研究能够深入进行; 第三章详细介绍了本课题的国内外最新动态以及一些主流产品的分析,然后 介绍了课题的技术路线和功能需求; 第四章深入分析了g n u 的覆盖测试工具g c o v 的实现方式以及优缺点,展 现了g a m m a c p 赖以实现的技术基础; 第五章细致描述了g a m m a c p 的总体结构、运行方式、模块间接口、系统数 据结构和系统出错处理等部分的设计思路和实现方法; 第六章介绍了g a n m a a c p 的单元、集成和系统测试的实施过程和方法; 第七章对本文进行的总结; 最后是致谢和参考文献。 2 第二章基本概念 第二章基本概念 2 1 覆盖测试c o v e r a g e t e s t 2 1 1 覆盖测试的定义 覆盖测试是软件白盒测试的主要方法。众所周知,在一个软件产品中,如果 存在某些从来没有被执行过的代码,那么这个软件的质量是不可靠的,在那些从 来没有被执行过的代码中很可能存在着足以使整个软件崩溃的b u g ,而没有被 发现。 覆盖测试的目的就是让软件的所有代码都被执行过至少一次,力争在测试过 程中发现那些隐藏的非常隐秘的b u g ,从一定程度上确保软件的可靠性。 衡量覆盖测试好坏的标准就是覆盖率,覆盖率越高,则我们认为测试所达到 的效果越好。足够高的覆盖率可以增强我们对被测软件的信心。覆盖率代表测试 过程中被执行的程序对象的百分比。覆盖率是按照下面的公式计算的: 程序中的基本对象有三种 语句s t a t e m e n t 分支b r a n c h 决策d e c i s i o n 对于每一种被测对象的覆盖率可以从程序、文件、函数和对象四个级别进行 衡量,由此,有如下四种覆盖率: 对象覆盖情况 程序覆盖率 文件覆盖率 函数覆盖率 3 第二章基本概念 程序覆盖率是指测试所达到的程序一级的覆盖率,例如:“) ( x x 测试对x x x 程序的语句覆盖率达到了9 0 ”。该指标是测试过程中测试人员最关心的一个指 标。 文件覆盖率是指测试对程序中的单个文件的覆盖率,同一个测试下,不同的 文件将会有不同的覆盖率,例如:“x x x 测试对x x x 文件的分支覆盖率达到了 8 0 ”。 函数覆盖率是指测试对单个函数的覆盖率,同一个测试下,不同的函数将会 有不同的覆盖率,例如:“x x x 测试对x x x 函数的决策覆盖率达到了6 0 ”。 2 1 2 语句覆盖s t a t e m e n tc o v e r a g e ( s c ) 从高级语言的角度来看,程序的语句是软件的一个基本逻辑单位,也就是高 级语言的指令( 与汇编语言的指令相对) 。每个函数、程序源文件都由或多或少 的若干条语句组成。我们通过语句所在文件的行号来唯一标志一条语句,语句是 以行为单位的可以执行的代码。如下面的代码所示,如果第2 3 行的代码被执行, 则我们认为该语句被覆盖。 2 3 i f ( i 5 0 ) j + + 语句覆盖是衡量一个测试所达到的覆盖率的最基本也是最简单的方法。语句 覆盖率代表测试过程中被执行的语句在被测程序中所占的百分比。语句覆盖率是 按照下面的公式计算的: 语句覆盖是最弱的逻辑覆盖准则,即便语句覆盖率达到了1 0 0 ,也不能完 全保证被测程序1 0 0 的被覆盖,还是以上面一行程序为例,程序中如果i f 语句 中的条件表达式不成立,则“j + + ”不可能被执行,但在语句覆盖来看,这一行 语句是被覆盖了的。 2 1 3 分支覆盖b r a n c hc o v e r a g e ( b c l 从程序运行流程的角度来看,程序有这样三种基本流程:顺序、分支和循环, 4 第二章基本概念 从一定意义上说,循环也是分支的一种。程序的逻辑越复杂,也就意味着程序的 分支结构越复杂。 从汇编语句一级来看,一个分支也就意味着一个跳转语句( j m p ) 。从高级语 言来看,最典型的分支就是i f 语句,以下面的程序为例: 2 3 i f i i 5 0 ) 2 4 j + + ; 2 5e l s e 2 6k + + : 2 7 r e t u r n ; 由于i f 语句,使得程序流程产生了两个明显的分支,一支是“j + + ;”,另一支是 “k + + :” 除了i f 语句,所有的循环语句( w h i l e 、f o r ) ,跳转语句( g o t o ) ,分支语句( i f , s w i t c h ) ,以及函数调用都会使程序产生若干个分支。除了这些以外,其他情况 也可能造成或多或少的分支。 我们通过一个显示的跳转( 即从文件的某一行到另一行的一个跳转) 来唯一区别 一个分支。每个跳转需要两个行号来描述它,即起始行号和结束行号,两个行号 可以相同,也可以不同。以上面的程序为例,共有如下几个分支:2 3 2 4 :2 3 一 2 6 ; 2 4 2 7 :2 6 一 2 7 。 分支覆盖是衡量一个测试所达到的覆盖率的比较可靠的方法,如果一个程序 的所有分支都被执行过一遍,那么我们可以认为程序中所有的代码毫无遗漏的被 执行过一遍了。分支覆盖率代表被执行的分支的在被测程序的所有分支中所占的 百分比。分支覆盖率是按照下面的公式计算的 虽然分支覆盖是覆盖测试中比较可靠的方法,但是分支覆盖的代价很高,达到很 高的覆盖率非常困难,而且在实际操作中,由于我们将行号作为区分分支的标志, 所以许多的分支在高级语言中( 例如c 、c + + ) 中并没有实际的意义,编译器可 能会根据优化的需要和编译的需要引入许多在高级语言看来毫无意义( 或者说无 5 第二章基本概念 法解释) 的分支。对于这些分支的覆盖测试是毫无意义的。但是分支覆盖有一个 优点是可以实现对g o t o 、s w i t c h 语句以及函数调用等复杂程序逻辑的覆盖。 2 1 ,4 决策覆盖d e c i s i o nc o v e r a g e ( d c ) 决策是一个完整的布尔表达式,更具体的说,就是i f , w h i l e 、f o r 三种语句 中的完整布尔条件表达式。以下面的一段程序为例: 3 5w h i l e ( i 1 0 0 i ij 5 0 & & j 5 0 ) 3 8 k + + : 3 9 , 程序中总共有两个决策,第一个决策是i i 1 0 0i ij 5 0 & & j 5 0 ) 。之所以强调是完整的布尔表达式,是因为决策与单个的布尔条件 ( i 5 0 & & j 5 0 ) 中,布尔条件( i 5 0 ) 的真假 并不能独立的影响整个条件表达式的真假,更不能独立的影响程序的流程。但是 决策的真假,也就是完整条件表达式的真假确能够独立的影响程序的流程。 因此,一个完整的布尔表达式是我们唯一区别一个决策的标志。 在测试过程中,如果程序中所有的决策都取得了真与假的两种情况,那么就 基本上可以认为程序的每一个分支( 高级语言中的分支) 都被执行过了,对于那 些不是应用于关键领域的软件,我们可以说,软件达到了一个令人满意的可靠程 度。 决策覆盖作为软件覆盖测试中一个必不可少的测试级别有着相当广泛的应 用。决策覆盖率是通过下面的公式计算的: 以上面的程序段为例,只有当决策一( i 1 0 0i ij 5 0 & & j 5 0 也取得为真、为假两种情况至 少各一次,则我们就认为上面的程序段达到了百分之百的决策覆盖率。 6 第二章基本概念 决策覆盖的优点是简洁直观,缺点是对g o t o 、s w i t c h 语句以及函数调用等程 序逻辑结构无能为力。 22 测试集s u i t 2 , 2 1 案例和测试集c a s e & s u i t 测试集是覆盖测试中的一个重要概念。在覆盖测试中,仅仅通过一个测试来 达到很高的覆盖率是相当困难的,通常的做法是设计多个测试分别针对被测程序 中不同的部分进行测试,通过多个测试的组合来达到很高的覆盖率。 每一个单独的测试就叫做测试案例,而多个测试案例的组合就是一个测试 集。 从测试程序的角度来看,覆盖率又可以划分为三种: 集合覆盖率; 案例覆盖率; 增益覆盖率; 集合覆盖率是指一个完整的测试集所达到的覆盖率,它是多个测试案例覆盖 效果的综合叠加。它是衡量测试集优劣的唯一标准。 案例覆盖率是指单独一个测试案例所达到的覆盖率。它是衡量案例强度和优 劣的标准之一,衡量案例优劣的另一个标准就是增益( g a i no ri m p r o v e m e n t ) 。 2 2 2 增益g a i no ri m p r o v e m e n t 增益的概念和案例以及测试集是紧密结合的,增益是每个案例的一个属性, 也是衡量案例优劣的一个主要标准。 增益是指被测程序中仅仅被某个测试案例所覆盖( 或执行) 的代码的百分比。 增益是一个动态的概念,每当一个新的案例被添加到测试集时,或者从测试集中 删除一个案例时,该测试集中每个案例的增益都将有可能增加或者减少。 下面是一个例子: 7 第二章基本概念 某个被测函数有a 、b 、c 、d 和e 五行可执行的语句,现在有个测试集共 有三个案例,案例一覆盖了语句a 、b 和d ,案n - 覆盖了语句c 和d ,案例三 覆盖了语句e 和d ,那么案例一的增益就是语句a 和b 在被测程序中所占的百 分比,案例二的增益就是语句c 在被测程序中所占的百分比,案例三的增益就 是语句e 在被测程序中所占的百分比。 下面的表格中显示了每个语句的覆盖情况、每个案例达到的覆盖率以及每个 案例的增益。 语句 测试案例 abcde 覆盖率增益 案例一 ooo6 0 4 0 案例二 04 0 2 0 案例三 oo4 0 2 0 测试集 0oooo1 0 0 o ( 大写加粗字体) 表示仅仅被某个案例覆盖的语句 o ( 小写加粗字体) 表示被多个案例覆盖的语句。 现在增加一个测试案例四,如下图所示。实际上这个新的测试案例并没有增 加程序的总体覆盖率,因为所有的语句已经被其他案例所覆盖。 这时,由于语句b 被案例四所覆盖,所以案例一的增益下降到2 0 ,而案 例四覆盖的语句b 和d 由于已经被案例一所覆盖,所以案例四的增益为零。 案例四就可以从测试集中删除了,而整个测试集的覆盖率不会改变, 8 第二章基本概念 存甸 测试案仍 abcde 覆盖率增益 案例一o o 6 0 2 0 案例二o04 0 2 0 案例三 o 0 4 0 2 0 案例四 0o4 0 0 测试集o o o oo1 0 0 因此,增益是衡量案例优劣的另一个重要标准,可以这样说,增益就是案例 的价值,没有增益的案例是毫无价值的,增益越大,案例的价值越大。 通过删除测试集中那些增益为零或者增益太小的测试案例,就可以获得一个 最小化的测试集。测试集的最小化对于提高覆盖测试的效率的效果是非常明显 的,它可以大大缩减测试所需要耗费的时间,减轻测试人员的工作量。 2 3 小结 本章对论文中所涉及到的基本概念进行了详细解释,以便于讨论和研究能够 更加深入的迸行。首先介绍了覆盖测试的基本定义,包括语句、分支和决策三秭 覆盖的定义;接下来解释了测试集、案例的基本概念,最后重点介绍了增益的概 念。其中决策和增益是本文的重点内容。将在后续的章节中继续介绍。 9 第三章国内外现状、趋势及g a m m a c p 的需求 第三章国内外现状、趋势及g a m m a c p 的需求 3 1 三种典型覆盖测试工具实现方式的评估 从覆盖测试工具实现方式的角度划分,目前的主流覆盖测试工具大致分为三 种类型: 纯硬件; 纯软件; 软硬结合; 下面就这三种类型的实现方式逐一进行分析: 3 1 ,1 纯硬件 纯硬件的测试工具通常用于系统硬件的设计与测试工作。以逻辑分析仪为 例,逻辑分析仪主要是以监控系统运行过程中的数据总线和控制总线,并以一定 的频率对总线上的数据进行采样,通过对采样获得的数据的分析来判断被测程序 的运行情况的。 由于是采样的工作方式,数据的完备性首先就得不到保证,只能通过提高采 样频率的方法来提高数据的准确性,但是采样频率的提高是有限度的,因此难免 会漏掉一些重要信息。 而且对程序作覆盖测试时,数据是从总线上获得的,如果打开了处理器的 c a c h e ,处理器会通过指令预取功能将部分代码预取到c a c h e 中,一旦逻辑分析 仪在总线上监测到这些信号,就认为这些代码被执行过了,但实际上被预取的这 些代码很可能根本没有命中。为了避免这种误差,就必须关掉c a c h e ,但是这样 一来就不是系统的真实运行环境了。 因此,纯硬件的测试工具只适用于系统硬件的设计与测试工作,对于规模日 益庞大,体系结构日益复杂的嵌入式软件来说并不合适。 3 1 1 2 纯软件 纯软件的实现方式是目前常用的覆盖测试工具实现方法,市面上主流的纯软 件覆盖测试工具有l o g i s c o p e 和c o v e r a g e s c o p e 等。纯软件的测试工具采用软件 插桩技术实现,在被测代码的每个关键位置插入一个桩点,在程序运行的同时, 这些桩点也被执行,它们就负责在运行过程中进行数据采集,将采集到的数据保 1 0 第三章国内外现状、趋势及g a m m a c p 的需求 存到缓存中。同时在目标系统中存在一个代理,当被测程序执行完毕之后,代理 将缓存中的数据从目标机上传到主机端。主机端通过对数据的处理和分析,给出 被测程序的执行情况和覆盖信息。 由此,纯软件的测试工具有两个典型的特征:软件插桩和目标系统代理。但 是也正是这两个特征决定了纯软件方式的主要缺点:桩点和代理的存在不可避免 的引入了对被测程序的影响,程序的运行环境不够真实。早期的纯软件测试工具 主要存在三个问题: 首先,插桩是在被测程序编译之前完成的,每个桩点是一个函数,桩点在运 行过程中需要完成数据的采集、保存等工作,采集和保存工作是分两步完成的, 因此当插桩完成后,被测软件的代码量激增,同时严重影响被测代码的运行效率 ( 超过3 0 ) 。 其次,目标机系统代理是一个操作系统任务,不仅需要占用系统资源,还要 占用c p u 的运行时间,同时还要协调与被测系统中任务的关系。程序的运行环 境不够真实。 最后,数据从目标机上传到主机端需要单独占用一个通信通道,例如一个串 口或者一个网口,与被测系统争夺通信通道。 这三个问题导致早期的纯软件测试工具可用性不高,甚至导致了开发人员对 纯软件测试工具的偏见和误解。 但是随着软件技术不断进步,纯软件测试工具的这些缺陷和问题已经得到了 很大改善。 首先,插桩技术有了长足进步,插桩开始由编译器直接完成,甚至在汇编阶 段完成,数据的采集和保存一次性完成,这样,每个桩点仅仅是几条甚至是一条 汇编语句,所以桩点的规模大幅度下降,同时桩点的数量也大幅度下降,因此插 桩完成后,软件只增加有限的代码量。对软件运行效率的影响平均已经下降到l 1 5 。 其次,随着目标机端系统软件的飞速发展,目标机代理开始与程序的调试代 理以及加载代理等其他工具代理合并为一个代理,并与操作系统捆绑常驻目标机 系统。甚至出现了以通信中断服务程序作为代理的情况。这样目标机代理对被测 程序运行环境的真实性的影响已经微乎其微了。 最后,数据的上传通道开始与调试工具、加载工具及其他开发工具的数据通 道合并,统一使用同目标机硬件平台的开发通道,不再与被测系统争夺通信通道。 除此之外,纯软件测试工具还有其他方式工具所不具备的几个重要优点 第三章国内外现状、趋势及g a m m a c p 的需求 第一:纯软件沏4 试工具具有准确性高的优点。由于纯软件采用桩点数据采集, 数据实测而不是数据采样的方式,因此测试结果的准确性是不容怀疑的。 第二:纯软件测试工具具有可移植性高,灵活性高,成本低廉的优点,由于 纯软件测试工具不依赖于硬件,因此几乎适用于所有的嵌入式开发平台,不受具 体硬件的限制。 而且作为覆盖测试,并不要求程序的运行环境达到1 0 0 的真实,只要达到 覆盖率1 0 0 的目的即可,因此灵活性高、准确性高、成本低廉的纯软件覆盖测 试工具具有无可比拟的优势,并已经成为覆盖测试工具的首选实现方式。 3 1 3 软硬结合 软硬结合的测试工具是综合纯硬件和纯软件两种实现方式之后的一种方式。 技术难度比较高,市面上最具有代表性的软硬结合覆盖测试工具就是 c o d e t e s t 。 以c o d e t e s t 为例:被测试的源代码首先通过常规编译器进行预编译,使之规范 化,然后c o d e t e s t 的插桩器( 源代码分析程序) 对预编译好的源代码进行自动 插桩,即在需要插桩的关键位置写入一条赋值语句( 如:a m cc t r t = 0 x 7 4 1 0 0 0 0 9 ) , 并把赋值语句中的常量右值送入数据库文件中生成一个符号数据暂存起来,以备 后来的分析之用。然后通过常规编译器对插桩后的代码进行编译生成可执行目标 代码送到目标板上运行。当程序运行到桩点的位置时,目标板的控制总线和地址 总线上会出现相应的控制信号和地址信号。当c o d e t e s t 的辅助硬件( 信号捕获 探头) 从控制总线和地址总线上监视到符合以上条件的信号时,c o d e t e s t 会主 动地从数据总线上把数据捕获回来暂存并对这些数据进行预处理,然后将预处理 后的数据通过局域网传送到主机平台。通过与前面生成的符号数据库中的数据的 匹配,完成对嵌入式软件的覆盖测试及其他性能分析功能。 c o d e t e s t 的软硬结合方式通过信号捕获探头完成数据的采集和上传,因此不需 要在目标机暂存采集数据,不需要数据的上传通道,也就不再需要目标系统代理, 可以对大规模的嵌入式软件进行分析测试。同时先进的软件插桩可以有效的降低 桩点规模和桩点数量,插桩完成后,对被测程序运行效率的影响在1 1 5 之 问。通过这种方式可以实现许多高级的性能分析功能。 但是c o d e t e s t 的最大缺点是对具体的硬件有很强的依赖,灵活性差,可移植性 差。对不同的目标系统平台必须定制不同的信号捕获探头以及相关的数据采集和 预处理机制。在许多极端的情况下( 例如军用飞控计算机,在出厂时即已经被严 格封装,无法安装信号捕获探头) 根本无法进行测试。而且随着技术的飞速发展, 1 2 第三章国内外现状、趋势及g a m m a c p 的需求 计算机硬件日新月异,为每一种新面世的处理器都定制一款信号捕获探头将耗费 巨大的人力物力。由此也导致了这种方式下的成本据高不下。 3 2 主流覆盖测试工具的分析和比较 在覆盖测试工具领域,目前国内尚无产品化的同类工具,在国际市场上主要 有五个: c o d e t e s t ; l o g i s c o p e ; c o v e r a g e s c o p e ; a t t o lt e s t w a r e : v e c t o r c a s t : 下面逐一介绍。 表3 - 1c o d e t e s t 简介 产品名称c o d e t e s t 中文名称万用型嵌入式软件在线测试系统 生产厂商 a p p l i e dm i c r o s y s t e m sc o r p o r a t i o n ( a m c ) 产地美国 类别嵌入式软件实时测试工具 主要功能1 性能分析:最大执行时间、最小执行时间、平均执行时间、执行次数、 占总执行时间百分比、函数调用次数; 2 覆盖测试:语句覆盖( s c ) 、决策覆盖( d c ) 和可变条件的决策覆盏 ( m c d c ) 。趋势图,自动生成分析报告 3 动态存储器分配分析:动态显示空闲内存总量、动态显示分配内存的 函数和分配的大小,自动生成内存错误分析报告; 4 追踪分析:可以分三级显示追踪情况:函数级控制块级源码级,此外 追踪过程中详细显示内存的分配情况:调用内存分配释放函数的文 件、函数和代码行、被分配释放的内存大小和指针。 突出特点性能分析、内存泄漏分析功能强 适用阶段主要是单元、集成、系统测试 实现方式软硬件结合方式。通过p c i v m e c p c i 总线、m i c t o r 插头、专用适配器 或探针连接到被测试系统以及软件插桩,对嵌入式系统进行在线测试 支持c p u支持所有6 4 3 2 1 6 位c p u 和m c u ,总线频率 1 0 0 m h z 市场情况国外应用非常广泛,h p 还有贝尔、北电网络都用c o d e t e s t ,国内用户有 华为公司等。 1 3 第三章国内外现状、趋势及g a m m a c p 的需求 产品名称 l o g i s c o p e 生产厂商 t e l e l o g i c 产地 瑞典 类别代码分析、软件测试、覆盖测试工具 主要功能1 静态检查:根据编程规则检查程序源代码,自动生成测试报告: 2 覆盖分析:s c 、d c 、m c ,d c ,显示测试进度 3 系统综合测试: 突出特点代码静态检查、覆盖测试 适用阶段软件开发的各个阶段 实现方式纯软件方式 支持c p u任何c c + + 编译器支持的处理器 市场情况在国内应用非常广泛 产品名称 c o v e r a g e s c o p e 生产厂商w i n d r i v e r 产地美国 类别覆盖测试工具 主要功能1 覆盖测试:s c 、d c 、c c ,以项目的形式组织覆盖测试数据,趋势图, 自动产生分析报告。 突出特点使用方便 适用阶段不祥 实现方式纯软件,通过编译器进行源代码插装。 支持c p ua r m ,c o l d f i l e ,6 8 k c p u 3 2 ,m i p s ,p e n t i u m 、p o w e r p c , s t r o n g a r m x s c a l e 、$ u p e r h 市场情况 表3 - 4a t t o lt e s t w a r e 简介 产品名称a t t o lt b s t w a r e 中文名称 生产厂商a t t o l t e s t w a r e 厂商简称a t t o l 1 4 第三章国内外现状、趋势及g a m m a c p 的需求 产地法国 类别自动生成测试代码的软件测试工具 主要功能单元测试:通过对源码的分析自动生成测试脚本框架,通过测试脚本自动 生成测试程序、自动测试、自动生成测试报告; 覆盖测试: 系统综合测试: 突出特点自动生成测试代码 适用阶段主要是单元测试 实现方式不祥 支持c p u支持h p 6 4 7 0 0 ,l a u t e r b a c h ,a s h l i n g ,a m c ,m i c r o t e c ,c o s m i c , b s o 。t e x a s | k e i l 。w i n d r i v e r , a t s y s 。t l d lt a r t a n fn e c ld i a b d a t a | l y n x o s 等交叉环境。 市场情况在法国市场居领先位置 表3 - 5 v e c t o r c a s t 简介 产品名称 v e c t o r c a s t 生产厂商v e c t o rs o f t w a r ei n e 中文名称v e c t o r 软件公司 产地美国 类别单元测试工具 主要功能 】构造测试环境;扫描程序源代码,生成一个可执行的程序; 2 生成测试用例:按照用户的设定自动生成多种测试用例; 3 自动测试,生成测试报告; 4 覆盖分析:s c 、d c 、m c 田c : 5 静态分析:提供复杂度分析和基本路径分析; 突出特点全自动的单元测试 适用阶段单元测试 实现方式不祥 支持c p u不祥 上述五个产品中,后两种( a t t o l t e s t w a r e 和c o d e t e s t ) 的主要功能是自动生 成测试代码的单元测试工具,算不上是专业的覆盖测试工具,因此这里不作详细 介绍。我们重点介绍和比较c o d e t e s t 、l o g i s c o p e 和c o v e r a g e s c o p e 。 1 5 第三章国内外现状、趋势及g a m m a c p 的需求 c o d e t e s t 的功能最多,c o d e t e s t 也被公认为是技术最先进,功能最齐全, 业界领先的工具,主要面向高端市场。在国内外市场上占有很大的份额。动态内 存分析和性能分析是c o d e t e s t 的主要特点,由于c o d e t e s t 采用软硬结合的方 式,所以具有对被测程序影响小,不依赖于特定的开发环境,功能全面,准确性 高的优点,因此可以说目前尚无竞争对手。 l o g i s c o p e 的覆盖测试是它的一个主要功能,但是主要缺点是使用不方便, 由于l o g i s c o p e 能够支持任何c c + + 编译器支持的处理器,就注定了l o g i s c o p e 不能够与某个集成开发环境紧密结合,所以不能够借助i d e 的力量来简化操作 方法,这是l o g i s 从o p e 的最大缺点。某种意义上说,使用不方便是l o g i s c o p e 的主要缺点。 c o v e r a g e s c o p e 是风河的产品,功能比较单一,是专门的覆盖测试工具,由 于c o v e r a g e s c o p e 与t o r n a d o 开发环境紧密结合,所以使用简便是c o v e r a g e s c o p e 的最大优点。c o v e r a g e s c o p e 的主要缺点是不支持m c d c 级的覆盖测试,以及 功能相对单一。 3 3g a m m a c p 的需求 3 3 1g a m m a c p 的技术路线 在3 1 节我们对当前主流的三种覆盖测试工具实现方式进行了细致深入的分 析。对每种实现方案都分析了它的原理和优缺点: 纯硬件方式由于其准确性差,灵活性和可移植性差已经逐渐被淘汰; 软硬结合方式虽然精度高,处理能力强,对被测程序运行的影响小,测试环 境接近真实环境等优点,但是对具体的硬件有很强的依赖,灵活性差,可移植性 差,实现难度大,随着嵌入式硬件平台的不断升级,其硬件捕获探头也需要不断 升级,成本较高。 而纯软件方式虽然对被测程序的运行效率有一定的影响,测试环境不如软硬 结合方式那样真实,但是测试结果准确,灵活性和可移植性高,成本低廉,几乎 适用于所有的嵌入式开发平台。随着近年技术的不断进步,纯软件方式在插桩方 式、桩点规模和数量、代理模式以及通信通道等都有了很大进步,对被测程序的 影响已经大大降低,测试环境也更加真实。 况且作为覆盖测试工具,并不象性能分析工具那样要求程序的运行环境达到 】6 第三章国内外现状、趋势及g a m m a c p 的需求 1 0 0 的真实,只要达到对被测程序1 0 0 的覆盖率的目的即可。因此纯软件的 实现方式目前已经成为覆盖测试工具的首选实现方式。有许多成熟的技术路线和 实现方案可供参考和研究,g c o v 就是其中一个( 关于g c o v 的详细情况参见 第四章) 。 因此g a m m a c p 也采用纯软件的实现方式。g a m m a c p 在技术上完全消化吸 收g c o v 的关键技术,并对其做较大的改进。 3 _ 3 2g a m m a c p 的功能需求 在覆盖测试功能方面大多数主流覆盖测试工具都支持s c 和d c 两种最基本 的测试类型。个别工具支持c c 例如( c o v e r a g e s c o p e ) 。少数高档测试工具( 例 如c o d e t e s t 和l o g i s c o p e ) 支持m c d c 。 一般来说c c 的意义不是很大,因为c c 的完全覆盖测试需要耗费巨大的人 力物力,一般不会做c c 覆盖测试。关键是m c d c ,但是m c d c 的实现难度很 大,目前的技术力量实现起来有困难,真正实现了m c d c 的工具只有c o d e t e s t 和l o g i s c o p e 。而且在实际的覆盖测试中,如果不是关键领域的软件( 例如航空 航天领域的软件) ,一般民用软件是用不到m c d c 级别的覆盖测试的。在实际 应用中使用最广泛的还是s c 和d c 。 但是如2 1 4 节所述,d c 虽然直观,测试结果一幕了然,但是它对于g o t o 、 s w i t c h 语句和函数调用造成的分支无能为力,因此b c 就是d c 的有益补充,两 者结合,提供对被测程序最大程度的覆盖效果。 综上,g a m m a c p 将提供s c 、b c 和d c 三种类型的覆盖测试功能。 目前大多数的嵌入式系统软件和应用软件多采用c 语言实现,部分采用c + + 等语言,还有一些早期软件和一些对效率有很高要求的软件仍然采用汇编语言编 写。因此g a m m a c p 应该支持汇编、c 和c + + 三种编程语言。 为了提高测试环境的真实性,g a m m a c p 拟采用通信端口中断服务程序作为 目标机端代理的模式,即中断模式。但是该模式目前只能限定于串口,为了提高 g a n m a a c p 的灵活性,同时提供任务模式,即选择o s 任务作为目标机端代理, 在该模式下将能够支持串口和网络两种链接方式,提供更高的可靠性。 工程( 项目) 、测试集、案例三级的组织模式是目前通行的覆盖测试组织模 1 7 第三章国内外现状、趋势及g a m m a c p 的需求 式,因此g a m m a c p 的覆盖测试也按照该模式进行组织。 传统的工程、测试集、案例三级组织模式主要针对大规模软件的专业化测试, 适用于专业测试机构和测试人员使用,能够有效的组织大规模软件的测试。但是 如果被测软件规模很小,例如某个单元测试、甚至某个文件某个函数的单独测试, 这种模式就显得过于复杂,反而低效。现在边开发边测试已经逐渐成为一种主要 的开发方式,它要求开发人员在完成一个模块的代码之后立即进行简单的覆盖测 试,做到心中有数。因此迫切需要一种简化覆盖测试模式。在该模式下只有一层 平面化的组织,针对小模块的测试速度快,效率高。 g a m m a c p 将同时支持这两种组织模式,为用户提供更大的方便。 随着测试的发展,提高测试速度和效率将是必然的发展方向,从这个角度而 言,提供案例增益的计算功能,将能够迅速找出那些“不作为”的案例,从而使 测试集最小化,提高回归测试及其他重复测试的速度和效率。g a m m a c p 将支持 案例的增益计算功能。 主流的覆盖测试工具都提供了输出测试结果报告和趋势图两个功能。输出测 试结果报告进一步减轻了测试人员的劳动强度,提高了测试的规范化程序,便于 测试的总结、验收和备查,因此是一个非常有用的功能。而趋势图则可以协助测 试人员随时掌握当前的测试进度,以便调整测试方向,按时完成测试目标,也是 一个有用的功能。g a m m a c p 将支持这两个功能。 最后g a m m a c p 还将支持项目管理功能,即帮助用户管理工程、测试集及所 有的案例,用户不需要关心测试和案例的具体保存位置,全部由g a m m a c p 来完 成。 3 4 小结 本章首先介绍了目前业界主流的三种覆盖测试工具实现方式,并对每种方法 的原理以及优缺点进行了详细深入的分析。然后对市面上主流的三种覆盖测试工 具的功能以及特点进行了介绍。最后对g a m m a c p 的技术路线和需求做了简明介 绍。 1 8 4 1g c o v 简介 第四章g c o v 的分析 第四章g c o v 的分析 g c o v 是一个g n u 的本地覆盖测试工具,不能应用于嵌入式交叉开发环境 中,源代码开放,随g c c 一起发布,配合g c c 共同实现对单个c 或c + + 文件 图4 1g c o v 工作原 图4 2 g c c 编译流程 的语句覆盖和分支覆盖测试。g c o v 和大多数g n u 的开发工具一样,没有图形 化的用户界面,是一个命令行方式的控制台程序。 4 2g c o v 的工作原理 g c o v 是一个纯软件的覆盖测试工具,被测程序的预处理、插装和编译成目 标文件三个步骤由g c c 一次性完成。g c o v 本身只负责数据处理和结果显示。 g c o v 的工作原理如图4 1 所示。 几乎所有的覆盖测试工具都需要对被测程序进行不同程度的插桩,g c o v 也 不例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论