嵌入式软件测试工具静态分析的研究与实现
VIP免费
摘要
当前在各种高技术武器装备中,嵌入式计算机及其实时软件承担着系统指挥、
过程控制、数据采集和处理、数据通信以及系统安全保障等任务,软件已经成为
整个系统的神经中枢,通过近年来从事军用软件的测试实践工作以及对军方用户、
软件承制单位软件测试情况的调查研究,目前我国对军用武器装备软件的测试工
作,往往采用人工判读或从系统外部进行功能测试的方法与其所承担的重要使命
是不相称的。静态分析的研究是软件工程的一个热点,市场上已经有一些自动化
测试工具支持静态分析。但这些测试工具主流还是欧美厂商的产品,并且价格不
菲。国内缺乏这类成熟的产品,因此开发此类软件具有一定的现实意义和广阔的
市场前景。
本文根据软件测试工具的概念、定位、系统框架、具体构成,彻底分析和研
究了软件测试工具中核心部分——静态分析的关键技术与实现方案。利用
Programmar 工具构造静态分析器的编译系统获得更好的扩展性和数据完整性,克
服了编译环节的技术壁垒。同时引入 XML 技术实现系统中数据的存储与转换,实
现了中间结构到静态质量分析和动态覆盖插桩过程的接口,为今后实现对多种语
言的支持奠定了基础。本文提出的静态分析器的架构和中间结构的存储转换是一
种新的尝试,可以为软件测试工具的开发提供一定的借鉴意义。
论文首先介绍了嵌入式软件测试工具的应用背景和应用现状,并对技术现状进
行分析比较。基于上述分析结果,明确了系统开发目标:构建一个嵌入式软件测
试工具的系统结构,并开展了系统设计。接着结合嵌入式软件测试工具的应用,
对预处理﹑词法语法﹑中间结构﹑转换器和静态分析进行详细分析和研究;在此
基础上,根据系统设计目标,结合嵌入式软件测试工具实现静态分析功能。然后
通过基于嵌入式软件测试工具进行了详细的比较分析,包括实践项目中遇到的问
题和解决方案,对系统应用进行了总结。最后进一步结合应用发展趋势,对嵌入
式软件测试工具的未来发展方向进行了较为深入地探讨。
关键字:词法语法分析 中间结构 解析器 可扩展标记语言 标记语言
样式转换
ABSTRACT
Nowadays in all kinds of devices of high level technology software plays an
important role .It resides in commanding system, process control, collecting data,
communication and system safety. At the present time software testing in army is
executed mainly by man. Research on static analysis is focused on by IT people in
software engineering. On the market most of all testing tool are developed in overseas
and their price is high. In China this kind of testing tool is absent and it will mostly be
imported from Europe and America. So it is significant to develop this testing tool and it
will be sold booming in market.
In the paper software testing tool’s concept and framework will be expatiated
firstly. Furthermore hard core of software testing tool (static analysis) will be described
in detail.We are sure the development objective after analyzing the results. Moreover
the tool of Programmar will be used to overcome bulwark in technique. And the
technique of XML will be used to realize data storage, transition and interface between
middle structure and static analysis and dynamic inserting stake in order to support
several languages. The framework of static analysis and middle structure’s storage and
transition proposed is a new try. And it can be used for reference in development of
software testing tool. The news is excited in IT fields because it will make up some
vacuity in China.
Built-in software testing tool’s application background will be described in paper
in first place. After we are comparing technology nowadays we define developing
objective: making a framework of built-in software testing tool and developing system
design step by step. Moreover according its application preprocessing, lexical and
syntax, middle structure, transition and static analysis will be analyzed in order to gain
necessary information which is important for us to achieve the tool. Furthermore a lot of
problems and solving scheme which were fallen across in practice will be summarized
in order to improve it in future. Finally its developing direction in future will be
discussed at length in paper.
Key Word:lexical and syntax analysis,middle structure,parser,XML,
XSLT
目录
摘要
ABSTRACT
第一章 绪论.....................................................................................................................1
§1.1 嵌入式软件测试概述 ............................................1
§1.2 课题的背景及意义 ..............................................2
§1.3 研究内容 ..................................................... 3
§1.4 本文的组织结构 ................................................4
第二章 嵌入式软件测试工具的系统组成.....................................................................5
§2.1 嵌入式软件测试的特点 ..........................................5
§2.1.1 软硬件互相协调、互相反馈和互相测试 ....................... 5
§2.1.2 嵌入式软件的专用性 ....................................... 5
§2.1.3 嵌入式软件的实时性 ....................................... 6
§2.2 嵌入式软件测试自动化过程模型 ..................................6
§2.3 嵌入式软件测试方法分类 ....................................... 7
§2.3.1 软件测试方法 ............................................. 7
§2.3.2 硬件测试方法 ............................................. 7
§2.3.3 软硬件结合的测试方法 ..................................... 8
§2.3.4 基于宿主机的测试 ......................................... 9
§2.3.5 基于目标机的测试 ......................................... 9
§2.4 嵌入式软件测试工具的系统结构 ................................. 9
§2.4.1 静态分析器 .............................................. 10
§2.4.2 动态测试分析器 .......................................... 11
§2.4.3 结果浏览器 .............................................. 11
§2.4.4 文档生成器 .............................................. 12
§2.4.5 质量模型定义器 .......................................... 12
§2.4.6 规则检查器 .............................................. 13
§2.4.7 代码浏览器 .............................................. 13
第三章 预处理和词法语法分析与研究.......................................................................14
§3.1 语言的描述 ...................................................14
§3.1.1 正则表达式 .............................................. 14
§3.1.2 语法和语义 .............................................. 15
§3.1.3 上下文无关文法描述 ...................................... 16
§3.2 预处理器 .................................................... 16
§3.2.1 预处理概念 .............................................. 16
§3.2.2 宏的替换 ................................................ 19
§3.3 词法分析器 .................................................. 23
§3.3.1 手工词法分析器 .......................................... 23
§3.3.2 自动词法分析器 .......................................... 24
§3.4 语法分析及工具 .............................................. 25
§3.4.1 LL(1)分析法 ............................................. 25
§3.4.2 递归下降分析 ............................................ 26
§3.4.3 构造分析树 .............................................. 28
§3.4.4 解析工具 Programmar ...................................... 31
第四章 中间结构和转换器的分析与研究...................................................................35
§4.1 中间结构 .....................................................35
§4.2 中间结构的元数据表示 .........................................37
§4.2.1 中间结构的存储 .......................................... 37
§4.2.2 元数据的表达 ............................................ 38
§4.2.3 元数据在工具中的实现 .................................... 39
§4.3 中间结构的接口 .............................................. 40
§4.3.1 从解析到转换 ............................................. 40
§4.3.2 解决方案雏形 ............................................ 42
§4.3.3 优化的解决方案 .......................................... 45
第五章 静态分析的研究...............................................................................................46
§5.1 代码分析 .................................................... 46
§5.1.1 常规信息 ................................................ 46
§5.1.2 CFG 图 ................................................... 46
§5.2 代码审查 .................................................... 48
§5.2.1 内存泄漏 ................................................ 48
§5.2.2 空指针引用 .............................................. 50
§5.3 软件度量 .................................................... 53
§5.3.1 质量模型 ................................................ 53
§5.3.2 度量元 .................................................. 54
第六章 静态分析的实现...............................................................................................56
§6.1 系统设计框架 ................................................ 56
§6.2 框架详细设计 ................................................ 57
§6.2.1 预处理器 ................................................ 57
§6.2.2 词法语法分析器 .......................................... 62
§6.2.3 中间元结构 .............................................. 64
§6.2.4 信息的提取 ............................................... 67
§6.2.5 分析层 .................................................. 71
第七章 结论与展望.......................................................................................................78
§7.1 结论 ........................................................ 78
§7.2 展望 ........................................................ 78
参考文献.........................................................................................................................79
在读期间公开发表的论文和承担科研项目及取得成果.............................................81
第一章 绪论
1
第一章 绪论
§1.1 嵌入式软件测试概述
随着软、硬件技术的发展,计算机的应用领域越来越广,而其中软件的功能
也越来越强大,同时也越来越复杂。这就使保证软件的质量,保证软件的高度可
靠性,面临着大的挑战。特别是诸如军事、航空航天、通讯、交通医疗等行业,
软件的微小瑕疵就可能造成对生命安全、天文数字的巨额财产、甚至对国家安全
严重威胁。为了确保软件的质量,达到软件工程的度量标准,就必需进行严格的
软件测试。软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编
码的最终复审,是软件质量保证的关键步骤。
软件测试就是为了发现错误而执行程序的过程。软件测试的目的:测试是程
序的执行过程,目的在于发现错误;一个好的测试用例在于发现至今未发现的错
误;一个成功的测试是发现了至尽未发现的错误的测试。
软件测试的原则:应当把“尽早地和不断地进行软件测试”作为软件开发者
的座右铭;测试用例应由测试输入数据和与之对应的预期输出结果两部分组成;
程序员应避免检查自己的程序(注意不是指对程序的调试);在设计测试用例时,
应当包括合理的输入条件和不合理的输入条件;不合理的输入条件是指异常的,
临界的,可能引起问题异变的输入条件;充分注意测试中的群集现象;经验表明,
测试后程序残存的错误数目与该程序中以发现的错误数目或检错率成正比。应该
对错误群集的程序段进行重点测试;严格执行测试计划,排除测试的随意性;应
当对每一个测试结果做全面的检查;妥善保存测试计划,测试用例,出错统计和
最终分析报告,为维护提供方便。
软件测试的方法和技术是多种多样的。对于软件测试技术,可以从不同的角
度加以分类:从是否需要执行被测软件的角度,可分为静态测试和动态测试。从测
试是否针对系统的内部结构和具体实现算法的角度来看,软件测试可分为白盒测
试和黑盒测试[1]。
静态测试是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、
过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠
缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递
归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一
步的查错,并为测试用例选取提供指导。
动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析
嵌入式软件测试工具静态分析的研究与实现
2
运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分
析程序的输出结果。
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,
通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打
开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接
口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序
是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库
或文件)的完整性。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通
过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部
的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不
顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证[2]。
“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”
法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检
查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使
每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了
设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中
因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。
常见的白盒测试包括:
1) 语句测试:选择的测试用例至少执行一次程序中的每条语句。
2) 判定或分支覆盖:选择的测试用例是每个分支(包括真,假分支)运行一次。
3) 条件覆盖:选择的测试用例使每个用于判定的条件具有所有可能的逻辑值。
§1.2 课题的背景及意义
目前嵌入式软件测试产品的主流是部分欧美厂商的产品,有 Telelogic
Logiscope、McCabe Test/QA、LDRA Testbed 等工具提供了软件的静态分析功能。
这些产品在国外的国防、电信等领域应用广泛,同时他们也在我国国内市场积极
进行技术推广工作。占据了绝对市场。国外测试工具已经形成了垄断,一则由于
测试工具存在相当技术壁垒,二则少数厂商才能提供产品,三则国内没有软件厂
商能够提供产品,所以一套测试工具少则数万人民币的价格,多则数万美元的天
价。每年随着技术的更新还要不断的升级,缴纳不菲的升级费用和维护费用。国
内在此方面的研究处于起步阶段,尚未见可提供实用的商品,随着人们对软件质
第一章 绪论
3
量问题的日益关注,国内的部分高校、研究所、电信设备厂商目前已经开始进行
此方面技术的研究开发。各类测试产品通常在宿主机上完成对被测软件的静态分
析测试,差别不大,能够进行可维护性质量分析或者只能够提供基本度量指标。
对语言的支持不够完善,如很多工具对 C++的模板都无法成功进行解析,测试的目
标语言种类单一。
开发此类软件具有一定的现实意义和广阔的市场需求,设计一套嵌入式软件
测试工具可以适合国内的软件测试服务,满足国内软件企业的需求。同时因为是
自主开发的产品,可以为我国软件产品的安全性、可靠性提供了保障。
综上所述,随着越来越多的企业对软件质量以及静态测试方面的重视,我们迫
切希望开发一套嵌入式软件测试工具 Pileatus 用于实现软件的静态测试和动态测
试,以保证软件的质量和可靠性。华东计算技术研究所为此特别成立了嵌入式软
件测试产品的研发队伍,我也参加了相关的工作。经过领导的正确指导和团队成
员的多年精诚合作,研究取得了令人满意的成果。在此,根据本人主要参与的嵌
入式软件测试产品中静态分析部分展开分析和探讨,
§1.3 研究内容
嵌入式软件测试工具的目标是设计一个实时的嵌入式软件测试环境,内含一套
针对 C/C++语言的静态分析和动态测试工具集,能够对 C/C++源程序进行语法分
析,建立中间结构,并进行静态分析获得各种分析结果;在动态测试方面,能够
对源程序进行正确的插装,获取测试实例对源程序的覆盖信息,分析后得到覆盖
指标等测试信息,并产生文档。
本文要解决的问题是,设计一个 C/C++源码的解析器将源码转换成中间结构,
利用 XML 语言完成从中间结构到静态质量分析和动态覆盖插桩数据的提取。本论
文研究内容如下所示:
1) 研究软件测试工具静态分析器的主要核心技术,包括预处理器、词法与语法分
析等解析部件。研究这些部件的工作原理,实现算法以及具体的实例。
2) 研究测试过程中静态分析的有关知识,并研究一些常用的静态分析算法,并给
出一些分析实例。在研究的理论基础上,结合一些辅助工具及成熟技术,设计
静态分析器的系统框架并且实现系统中各个组件的功能。
3) 中间结构的存储形式。随着机器性能的不断提高,程序的代码量也不断增加,
大量的代码经过解析后将生成庞大的中间结构。为了使得能从中快速查找到所
嵌入式软件测试工具静态分析的研究与实现
4
需信息,必须设计一个合理的数据结构和与之匹配的算法。
4) 从中间结构到静态质量分析和动态覆盖插桩数据的转换。由于静态质量分析度
量元数量多,形式各异,加上动态覆盖测试需求的多样性,所需的数据也各不
相同,因此中间结构到静态质量分析和动态覆盖插桩数据转换工作必不可少。
§1.4 本文的组织结构
本文共分七个章节,首先简要介绍了论文所研究嵌入式软件测试工具的应用
背景和应用现状,接着探讨了工具的系统结构和系统设计,并对工具中关键实现
技术进行了分析比较,然后对静态分析的实现做了简单介绍,最后给出了文章的
总结和展望。文章具体结构安排如下:
第一章 简要介绍了嵌入式软件测试工具的应用背景和应用现状,以及本论文的
研究内容和组织结构。
第二章 简单介绍嵌入式软件测试工具的系统结构和系统设计,并对解析器﹑插
桩和覆盖加以阐述。
第三章 进行预处理和词法语法分析与研究。词法分析部分主要介绍词法分析的
基本知识,以及研究手工实现或自动实现词法分析器的技术;预处理部
分主要介绍预处理基本知识;语法分析部分介绍了编译系统中常用的语
法分析算法,并且研究了一个商用的代码解析工具。
第四章 进行中间结构和转换器的分析与研究。引入 XML 技术实现系统中数据的
存储与转换,实现了中间结构到静态质量分析和动态覆盖插桩过程的接
口,为今后实现对多种语言的支持奠定了基础。
第五章 讲述静态分析的基本知识,并且介绍了静态分析的三个主要方面:代码
分析、代码审查与软件度量。
第六章 讲述了测试工具静态分析器的系统框架,静态分析器的各个部件的设计
思想以及具体实现的问题。
第七章 对论文的研究内容进行了总结,指出了其中的不足,并进行了展望。
第二章 嵌入式软件测试工具的系统组成
5
第二章 嵌入式软件测试工具的系统组成
§2.1 嵌入式软件测试的特点
在嵌入式领域目标系统的应用系统日趋复杂,而由于竞争要求产品快速上市,
开发技术日新月异,同时硬件发展的日益稳定,而软件故障却日益突出,软件的
重要性逐渐引起人们的重视,越来越多的人认识到嵌入式软件测试势在必行。与
传统的面向对象和面向过程的软件相比,嵌入式软件及其测试有其自身的特点。
§2.1.1 软硬件互相协调、互相反馈和互相测试
嵌入式系统开发和测试有其自身的特点。一般先进行硬件部分的开发,主要
包括形成裸机平台,根据需要移植实时操作系统,开发底层的硬件驱动程序等。
硬件平台测试通过后,进行应用程序的开发、调试、测试。因为软件是基于该硬
件平台进行的,这同时也是对硬件平台的一个测试。应用程序测试程序通过后,
则进行整个嵌入式系统测试流程。
因此可以说,嵌入式系统的开发和测试过程是一个软硬件互相协调,互相反
馈和互相测试的过程。一般来说,在嵌入式系统软件中,底层驱动程序、操作系
统和应用程序的界线是不清晰的,根据需要甚至混编在一起。这主要是由于嵌入
式系统中软件对硬件的依赖性造成的。
嵌入式软件对硬件的依赖性要求,软件测试时必须最大限度地模拟被测软件
的实际运行环境,以保证测试的可靠性。底层程序和应用程序界限的不清晰增加
了测试时的难度,测试时只有确认嵌入式系统平台及底层程序正确的情况下才能
进行应用程序的测试,而且在系统测试时,错误的定位较为困难[3]。
§2.1.2 嵌入式软件的专用性
软件的专用性也是嵌入式软件的一个重要特点。由于嵌入式软件设计是以一
定的目标硬件平台为基础的、面向固定的任务进行的,因此,一旦被加载到目标
系统上,功能必须完全确定。这个特点决定了嵌入式应用软件的继承性较差,延
长的系统的测试时间,增加了测试费用。
摘要:
展开>>
收起<<
摘要当前在各种高技术武器装备中,嵌入式计算机及其实时软件承担着系统指挥、过程控制、数据采集和处理、数据通信以及系统安全保障等任务,软件已经成为整个系统的神经中枢,通过近年来从事军用软件的测试实践工作以及对军方用户、软件承制单位软件测试情况的调查研究,目前我国对军用武器装备软件的测试工作,往往采用人工判读或从系统外部进行功能测试的方法与其所承担的重要使命是不相称的。静态分析的研究是软件工程的一个热点,市场上已经有一些自动化测试工具支持静态分析。但这些测试工具主流还是欧美厂商的产品,并且价格不菲。国内缺乏这类成熟的产品,因此开发此类软件具有一定的现实意义和广阔的市场前景。本文根据软件测试工具的概念...
相关推荐
-
跨境电商商业计划书模版VIP免费
2025-01-09 27 -
跨境电商方案范文VIP免费
2025-01-09 14 -
创业计划书VIP免费
2025-01-09 18 -
xx生鲜APP计划书VIP免费
2025-01-09 12 -
跨境电商创业园商业计划书(盈利模式)VIP免费
2025-01-09 8 -
跨境电商计划书VIP免费
2025-01-09 13 -
绿色食品电商平台项目计划书VIP免费
2025-01-09 22 -
农产品电子商务商业计划书VIP免费
2025-01-09 9 -
农村电商平台商业计划书VIP免费
2025-01-09 13 -
生鲜商城平台商业计划书VIP免费
2025-01-09 21
作者:赵德峰
分类:高等教育资料
价格:15积分
属性:84 页
大小:3.44MB
格式:PDF
时间:2024-11-19

