【摘 要】随着代码质量检测技术及XML技术的不断发展,XML成为了代码质量检测缺陷信息存储与处理的主要形式。因此,如何对XML文件进行高效的解析成为了研究的热点。SAX是基于公共事件的XML文件解析标准,提供了对XML文件的顺序访问模式,能够快速的读写XML数据。本文通过对基于SAX的XML文件解析的原理、特点以及在实际系统中的应用进行分析,阐述了基于SAX的代码质量检测缺陷报告的XML文件解析过程与实际应用,为代码质量检测缺陷报告XML文件的解析提供了科学的依据。
【关键词】代码质量检测 XML文件解析 SAX标准
ABSTRACT:With the development of code quality detection and XML technology, XML has become the main form of code quality detected defect information storage and processing. Therefore, it has become a hot topic that how to parse XML files efficiently. SAX is a file parsing standard based on the public events of XML. It provides the sequential access mode of XML files, meanwhile, it can read and write XML data efficiently. Based on the principle, characteristics and application in the actual system of SAX-based XML file parsing is analyzed, this paper describes the XML file parsing process and the practical application based on code quality detected defect reports of SAX, and it provides the scientific basis of XML file parsing which generated from code quality detected defect reports.
引言
随着计算机网络的发展,人们的工作方法和日常生活发生了翻天覆地的变化,人们传统意义上的时空观点也被它改变,人类社会的每个方面都被它渗透,使生活质量和工作效率发生了革命性变革。随着互联网技术的发展,HTML的劣势逐渐的显现出来,如可扩展性较差、定义模糊、结构不完善等,HTML的劣势也阻碍了其在web应用中的发展。在此背景下,诞生了可扩展标记语言即XML,如何高效的解析XML数据尤为关键,特别是对于大数据的应用程序,低效的解析会消耗大量的内存,延长解析时间,从而降低解析的效率。
1 XML技术
XML是可扩展标记语言的缩写,是文档内容编写的规范,XML的语法与HTML类似,其区别是XML描述的是数据本身,而HTML描述的是数据的表现格式,因此XML缩小了数据与文件的界限。
XML是通用的数据交换格式,在出版、商务、web服务等方面有着广泛的应用,XML具有跨平台、简单易用的特点,受到了人们的广泛欢迎,也加速了XML在其他领域的应用,成为了通用的数据格式。
2 SAX解析器
2.1 SAX简介
SAX是基于公共事件的XML文件解析标准,提供了对XML文件的顺序访问模式,能够快速的读写XML数据。SAX对XML文件进行解析时会激活事件处理函数,完成对XML文件的访问。SAX解析XML文件时,解析器会搜索标签,当发现标签时就将标签的信息告知程序,我们称之为事件驱动接口。
2.2 SAX解析原理
SAX的接口是事件驱动接口,SAX接口的基本原理就是接口的使用者提供符合定义的处理器,当解析的过程中遇到特点的事件时就调用相应的函数进行处理。SAX解析XML文件的流程图如图1所示:
2.3 SAX与DOM的比较
DOM也是对XML文件的解析方法,其解析过程为:首先将文件划分为独立的元素及属性,并以树形结构表示XML文件,以节点作为DOM的基本对象,所有的节点组成树形结构,存储XML文件内容。DOM的工作流程如图2所示:
DOM的优点是树形结构有完善的导航功能,可以动态的遍历XML文件,对文件内的操作也较为方便。但DOM的缺陷是性能较低,对运行的资源有较高的要求。首先,在XML文件解析时,需要一次性的将XML文件解析完成;其次,XML文件在内存中的加载消耗很大,DOM需要频繁的建立对象来处理XML文件,导致了开销的提升;最后,DOM节点对于对象类型绑定的效果不佳。
SAX的DOM不同,SAX是基于事件驱动,在解析XML文件时促发一系列的动作,调用对应的程序进行处理。SAX的优点为:一是对于任意大小的XML文件都可以解析,SAX不用将XML文件加载到内存中,因此对于内存的消耗比DOM小的多;二是有自己的数据结构,在事件促发之后保存数据;三是能够识别解析器需要的数据,忽略不感兴趣的数据;四是简单高效。
对于同样大小的XML文件,SAX程序的运行时间是线性的,而DOM的运行时间则要长的多,随着XML文件的不断增大,这种差距更加明显。此外,SAX程序所需的内存比DOM程序小,且随着XML文件的增大,差距进一步拉大,如图3所示:
3 基于SAX解析XML文件的应用
3.1 项目背景
自开展代码质量检测业务以来,我部门一直不断研究、开发自动化检测分析集成工具,开发完成并投入使用的代码检测工具,包含了缺陷库维护、缺陷扫描和反馈单回填等功能,且已在实际场景中进行使用,前期开发功能已基本稳定。虽然代码检测工具在代码检测过程中有一定的帮助,但是工具只完成了代码检测的独立功能,没有与其他的工具统一集成;且是基于C/S架构开发的,技术架构落后,没有对权限进行划分,各个工具之间相互独立运行,没有对缺陷检测的结果进行统一的分析展示。为了解决这些问题,又开发了产品质量管理及检测分析平台(Product Quality Management and Analysis Platform ,以下简称QMAP),实现了如下目标:
(1)全面集成:自动编译、代码检测、厂商缺陷率统计、分析定位展现、权限管理、代码缺陷管理;
(2)集成度更高,在界面、数据、应用集成方面做的更好,在缺陷检测数据的基础上对产品的质量进行多维度的分析展现;
(3)采用B/S架构模式,考虑权限分配,适应多人同时在线检测的需求,总体架构上更加合理,增强了系统的可扩展性。
平台的主要设计思想是:以产品管理业务为抓手,实现SVN、Redmine和QMAP这三个系统的数据源的串联统一管理;以QMAP产品管理功能为入口,实现SVN、Redmine、QMAP三者所涉及的产品、版本的同步,同时实现SVN中配置库目录结构管理和Redmine中项目、跟踪标签的同步。在此基础上以产品、版本为主线实现平台的规范性检测、编译管理、代码检测、测试管理等其它系统功能。
3.2 项目技术路线
平台的建设将遵循以下技术线路,包括:1、以产品、版本为主线实现SVN、Redmine、QMAP三者产品数据的同步更新;2、平台集成稳定的编译工具,实现代码自动编译功能;3、平台集成成熟的代码检测工具,实现代码自动静态检测;4、缺陷问题跟踪管理,形成产品缺陷问题的人工分析、可控、闭环管理;5、设计质量评价模型对人员、厂商和产品进行量化评估;6、产品源代码缺陷库逐步更新,逐渐向知识管理系统方向靠拢;7、统一的数据库模型设计。
(1)、以产品、版本为主线实现SVN、Redmine、自动检测分析系统三者产品数据的同步更新
以QMAP为入口,实现产品、版本数据在SVN、Redmine、QMAP中的统一维护,包括SVN配置管理库中的产品和基线版本配置项的同步更新、Redmine中项目和跟踪标签的维护管理、QMAP中的产品管理。
(2)、平台集成稳定的编译工具,实现代码自动编译功能
对于JAVA语言,平台集成ant构建工具,依赖于灵活可控的ant编译脚本build.xml完成产品的自动编译、打包、发布。对于C/C++语言,平台集成GCC作为编译套件,同样可以自动快速的实现C/C++的自动编译。实现自动编译的同时也结构化了源码与编译组件之间的关系。随着产品质量管理业务的扩大,可对编译工具进行添加。
(3)、平台集成成熟的代码检测工具,实现代码自动静态检测
目前集成的代码检测工具包括Findbugs和Fortify。通过命令调用的方式实现对这两种检测工具的集成,实现了根据产品、版本、工具来自动确定检测对象进行检测,检测报告的自动分析、问题跟踪和导入配置管理库。随着代码检测范围的扩大,代码检测工具可进行添加。
(4)、缺陷问题跟踪管理,形成产品缺陷问题的人工分析、可控、闭环管理
平台中的缺陷问题主要分为两类:代码检测缺陷和产品测试缺陷。平台针对代码检测工具产生的原始检测报告进行自动解析和归类,将结果自动导入Redmine形成代码检测缺陷数据,这样极大方便了人工二次分析和问题跟踪管理。对于产品测试缺陷,平台也提供了管理入口,便于测试人员对缺陷数据的录入和跟踪管理。
(5)、设计质量评价模型对人员、厂商和产品进行量化评估
以产品版本为主线获取代码检测缺陷数据,对缺陷数据进行分析计算,结合产品规模、人员单位等信息可快速准确的给出人员、厂商和产品三个维度的代码缺陷率统计信息。在此基础上,设计质量评价模型,可对人员、厂商和产品进行量化的评估,为公司领导、项目管理部、生产计划部决策提供参考依据。
(6)、产品源代码缺陷库逐步更新,逐渐向知识管理系统方向靠拢
随着产品质量检测业务的逐步开展,逐步完善产品缺陷库,针对典型缺陷,可根据代码缺陷库中知识对项目组开发人员进行培训;同时,对于项目组在开发过程中使用代码检测工具的情况,代码缺陷库开放供其使用可以从源头上阻止缺陷的产生,从而逐步提高产品的质量。
(7)、统一的数据库模型设计
在数据库模型设计过程中,充分考虑到SVN、Redmine、QMAP三者之间的联系,做到数据库模型的统一设计,为后续平台的实现、运行、升级奠定了坚实的基础。
3.3 基于SAX解析XML文件的过程
在QMAP的代码检测模块实现了对代码的静态检测,包括了代码质量检测和代码安全检测。其中,代码质量检测利用findbugs检测工具进行检测,代码安全检测利用fortify检测工具进行检测。
针对代码质量检测缺陷报告的解析,具体过程为:
(1)获得根节点;
(2)判断是否包含“BugCollection”节点,若包含则为findbugs缺陷报告,否则不是findbugs报告;
(3)若是findbugs缺陷报告,则获取根节点下的子节点BugInstance;
(4)循环findbugs报告中的BugInstance节点,获得缺陷的优先级(priority)、缺陷主题(type)、缺陷类别(category);
(5)获取单个buginstance节点的缺陷信息,记录缺陷的类路径及缺陷发生位置,若buginstance节点下没有SourceLine节点,则读取Class节点,获得缺陷的类路径,并标记缺陷发生的位置为第0行。若buginstance节点下包含一个SourceLine节点,则读取SourceLine节点下的sourcepath属性获得缺陷类路径,并读取start属性获得缺陷发生位置。若buginstance节点下包含多个SourceLine节点,则读取第一个SourceLine节点的sourcepath属性获得缺陷类路径,读取start属性获得缺陷发生位置。
(6)依据缺陷主题查询数据库中对应的缺陷类别,若未查询到对应的缺陷类别,则将本次解析的缺陷类别保存至数据库。
4 结论
XML为应用程序提供了可移植的数据,SAX则是对XML文件进行顺序的访问,是快速读写XML数据的解析器,使得web应用程序能够方便的解析XML文件。SAX与DOM是较为流行的XML文件解析技术,两者的区别是客户得到的XML数据方式不同。经过两者的对比分析之后,本文选用SAX进行XML文件的解析,并将该解析的方法运用到QMAP的代码质量检测缺陷报告的解析中,为产品质量管理及代码分析工作提供了支持。
参考文献
[1]Li XS, Wang H, Liu TY, Li W. Key elements tracing method for parallel XML parsing in multi-core system. In: Proc. of the 2009 Int’l Conf. on Parallel and Distributed Computing, Applications and Technologies. 2009. 439444. [doi: 10.1109/PDCAT. 2009.64].
[2]Dai ZF, Ni N, Zhu JW. A 1 cycle-per-byte XML parsing accelerator. In: Proc. of the 18th Annual ACM/SIGDA Int’l Symp. On Field Programmable Gate Arrays. 2010. [doi: 10.1145/1723112.1723148].
[3]El-Hassan F, Peterkin R, Abou-Gabal M, Ionescu D. A high-performance architecture of an XML processor for SIP-based presence.In: Proc. of the 6th Int’l Conf. on Information Technology: New Generations (ITNG 2009). 2009. 9095. [doi: 10.1109/ ITNG.2009.50]
[4]刘芳,肖铁军.XML应用的基石XML解析技术[J].计算机工程与设计,26(19):2823-2839. 2005
[5]左伟明. 即用即查XML数据标记语言参考手册[M].北京人民邮电出版社2007.
论文作者:景娜,王红志
论文发表刊物:《低碳地产》2016年10月第19期
论文发表时间:2016/11/18
标签:缺陷论文; 代码论文; 文件论文; 产品论文; 节点论文; 数据论文; 质量检测论文; 《低碳地产》2016年10月第19期论文;