CN106855842B - 一种基于正则表达式的程序静态分析方法 - Google Patents
一种基于正则表达式的程序静态分析方法 Download PDFInfo
- Publication number
- CN106855842B CN106855842B CN201510901013.0A CN201510901013A CN106855842B CN 106855842 B CN106855842 B CN 106855842B CN 201510901013 A CN201510901013 A CN 201510901013A CN 106855842 B CN106855842 B CN 106855842B
- Authority
- CN
- China
- Prior art keywords
- program
- key information
- evaluated
- regular expression
- rule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种程序分析方法,特别涉及一种基于正则表达式的程序静态分析方法。根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,从提取到的关键信息数据库中,得到不符合待评价程序结构和编码规则的项目。基于正则表达式的分析方法,可以快速有效的对程序进行分析,并对程序进行有针对性的优化。
Description
技术领域
本发明涉及一种程序分析方法,特别涉及一种基于正则表达式的程序静态分析方法。
背景技术
程序静态分析是在不执行程序的情况下对程序进行分析,推测程序在运行时可能表现出来的行为,是实现对软件系统理解与分析的一种有效途径和关键技术。现有多种程序静态分析方法,如:符号执行,定理证明,类型推导,抽象解释等。但此类方法难以挖掘出具体的代码元素,如函数,变量名,数据结构类型,返回值等信息。
机载系统设备一般包括惯性导航系统、飞行控制系统、火控系统等。随着惯导功能复杂性的增强,程序的规模也急剧增加,相应的文档规模也越来越大,在编制文档过程中极大的增加了开发人员的工作量。现已有自动生成文档的方法,例如基于注释的方法。此类方法虽然具有针对性强的优点,能够直接生成程序的一部分文档,但需要人工在代码中添加注释,当代码规模迅速增大时,仅仅依靠人力几乎不可能完成注释添加工作,且会增加开发人员的负担。
在程序的开发过程中,需要遵循一定的编码规则。由于开发人员较多,因此每个人可能未必能严格遵循编码规则,因此也需要一种检测手段来查找不符合编码规则的程序片段,并促使开发人员修正此问题。
此外,由于程序运行在使用嵌入式处理器的惯导系统上,硬件资源有限,为了更好的利用仅有的处理器和内存资源,也需要一种程序优化的方法。
发明内容
本发明解决的技术问题为:提供一种快捷高效的,基于正则表达式的程序静态分析方法。
本发明的技术方案为:根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,从提取到的关键信息数据库中,得到不符合待评价程序结构和编码规则的项目。
作为本技术方案的一种改进,所述的方法包括如下步骤:
步骤一,确定待评价程序需要分析的关键信息;
步骤二,根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,构成正则表达式分析规则库;
步骤三,根据正则表达式分析规则库,提取待评价程序的关键信息,得到关键信息的数据字典和关键信息数据库;
步骤四,从关键信息数据库中提取不符合待评价程序的结构和编码规则的项目,并生成不符合项分析报告。
作为本技术方案的一种改进,待评价程序的关键信息包括函数名、局部变量、全局变量、返回值、函数中使用的数据结构和当前函数调用的其他函数名。
作为本技术方案的一种改进,根据步骤三中得到的关键信息数据字典和关键信息数据库,和事先规定的设计文档模版,生成得到程序对应的设计文档。
作为本技术方案的一种改进,根据正则表达式分析规则库,提取待评价程序的关键信息时,还统计了每个函数和数据结构的调用频次。
本发明的有益效果为:首先,基于正则表达式的分析方法,可以快速有效的对程序进行分析,并对程序进行有针对性的优化。
其次,能够自动生成设计文档,大大减少了开发人员的工作量。
再次,能够对不符合编码规则的程序片段进行标识,快速定位不符合项程序片段,易于修改程序。
最后,适用性强,适用所有型号的程序,可以兼容旧版本的程序。分析结果可以在多个项目之间复用,降低了其他型号的开发成本,通过构建的分析模型能够进一步的优化程序。
附图说明
图1本发明运行的具体实施步骤流程图;
图2本发明的设计框架图。
具体实施方式
下面结合附图对本技术方案作进一步详细说明。
所述的方法,根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,从提取到的关键信息数据库中,得到不符合待评价程序结构和编码规则的项目。
图1显示的是本方法的处理流程。图1中有两个功能组建,程序分析器和文档生成器。通过分析程序的关键信息,建立正则表达式规则库,程序分析器可以对输入的程序进行分析并输出数据字典,关键信息数据库和统计与分析模型。文档生成器能够生成程序对应的文档和不符合项报告。开发人员可以根据统计与分析模型,以及不符合项报告来改进和优化程序。
使用本方法整个实施步骤参见附图1,具体描述如下:
步骤1:提取程序需要分析的关键信息。对于程序来说,程序的关键信息包括函数名、局部变量、全局变量、返回值、函数中使用的数据结构和当前函数调用的其他函数名。
步骤2:结合程序关键信息,建立程序的编码规则。根据编码规则,建立分析和解析程序的正则表达式规则库。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些字符的组合,用来表达对字符串的一种过滤逻辑。正则表达式能够自由方便的进行字符串匹配,具有适用性强,灵活且易于修改的特点。正则表达式规则库是多条正则表达式规则的集合,它是能够进行程序分析的前提,提供了对程序关键信息的映射关系。程序关键信息中的每一个要素,如程序中的函数名,对应于正则表达式规则库中的一条规则,程序分析器可以通过此规则找到每个函数,同理,可以找到其他的程序关键信息。
步骤3:根据正则表达式分析规则库,提取待评价程序的关键信息。分析过程基于正则表达式规则。根据正则表达式规则匹配程序中的相应程序关键信息,自动生成关键信息数据库、数据字典,并建立统计与分析模型。关键信息数据库是用来存储程序关键信息的数据库,数据字典是存放数据库所用的有关信息,描述了数据库的格式,为数据库提供存取和控制管理。
步骤4:从关键信息数据库中提取不符合待评价程序的结构和编码规则的项目。使用文档生成器生成文档。文档生成器访问步骤3建立的数据字典和关键信息数据库,并结合规定的文档模版,生成程序对应的文档。此文档模版规定了需要输出的文档格式以及文档中需要填写的内容。此外,在解析程序的过程中,识别程序中不符合编码规则的程序片段,生成不符合项分析报告。
步骤5:根据不符合项分析报告,对不符合惯导编码规则的程序片段进行修正,使之完全符合标准,此方式降低了人工在海量的程序片段中进行检查的成本,能够快速定位不符合项的位置。
步骤6;重新使用程序分析器对改进后的程序进行分析,查看不符合项报告。若不存在不符合项,则说明已经完成对所有不符合项的修正。否则重复步骤6,直到不存在不符合项为止。
步骤7:根据步骤4建立的统计和分析模型,结合惯导硬件系统,对程序进行优化。统计程序中使用频度最高的函数体,全局变量和数据结构,根据“2-8法则”,对这些程序关键信息的优化能够大幅提升程序运行效率。
实施例
应用场景如下:在某型号飞机上,该型惯导系统的硬件单片机基本配置如下:
CPU类型:PowerPC8245处理器。
操作系统:VXworks5.5。
程序需支持此CPU,且使用此操作系统API。
图2是本发明在应用场景下的设计框架图。
根据程序的运行环境(CPU和操作系统),以及程序关键信息,建立程序的编码规则。规定程序关键信息包括函数名、局部变量、全局变量、返回值、函数中使用的数据结构和当前函数调用的其他函数名。函数输入参数的变量命名规则:名称前缀为程序指定的特定字符串,能够唯一识别对应的程序关键信息。
通过操作界面,载入需要分析的程序,可以是单个文件,也可以是一批文件存放在某个文件夹。
点击“开始分析”按钮,调用程序分析器对程序进行分析,并得到XML格式的数据字典和关键信息数据库。在分析完毕之后,文档生成器会自动根据以上结果生成程序对应的文档和不符合项分析报告。
根据不符合项分析报告改进程序。不符合项分析报告中,包括不符合项的统计信息,如不符合项的个数,所在的文件以及所在文件的行数和其所在的函数。根据此信息,对程序进行修改,使之符合惯导的编码规则。
根据统计和分析模型,对输入的程序中,出现频率最高的函数体和数据结构进行分析。对数据结构中的变量的存储空间,以及顺序进行调整;优化数据结构的在内存中的对齐方式;并删去不使用的数据结构项,将此数据结构中的使用频度最少变量提出,建立单独的变量,能够有效减少使用频度最高的数据结构所占用的空间,提高对其访问的效率。
通过实际验证,本发明能够在200ms内完成10万行规模级的程序的分析工作,并输出程序对应的文档和不符合项,通过不符合项和统计与分析模型对程序改进,优化后的程序执行效率提高约1.6%。原本人工完成10万行规模级程序对应的设计文档,需要约216小时/人,现在可自动生成文档,无需人工介入,极大节约人力成本。
本发明还可以有其它多种实施例,在不背离本发明精神和实质的情况下,熟悉本领域的技术人员可根据本发明做出各种相应的改变,但这些相应的改变都应属于本发明所附的权利要求的保护范围。
Claims (2)
1.一种基于正则表达式的程序静态分析方法,其特征为:根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,从提取到的关键信息数据库中,得到不符合待评价程序结构和编码规则的项目;
所述的方法包括如下步骤:
步骤一,确定待评价程序需要分析的关键信息;
步骤二,根据待评价程序的结构和编码规则,建立提取关键信息的正则表达式分析规则,构成正则表达式分析规则库;
步骤三,根据正则表达式分析规则库,提取待评价程序的关键信息,得到关键信息的数据字典和关键信息数据库;
步骤四,从关键信息数据库中提取不符合待评价程序的结构和编码规则的项目,并生成不符合项分析报告;根据步骤三中得到的关键信息数据字典和关键信息数据库,和事先规定的设计文档模版,生成得到程序对应的设计文档;
所述关键信息包括函数名、局部变量、全局变量、返回值、函数中使用的数据结构和当前函数调用的其他函数名。
2.根据权利要求1所述的一种基于正则表达式的程序静态分析方法,其特征为:根据正则表达式分析规则库,提取待评价程序的关键信息时,还统计了每个函数和数据结构的调用频次。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510901013.0A CN106855842B (zh) | 2015-12-08 | 2015-12-08 | 一种基于正则表达式的程序静态分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510901013.0A CN106855842B (zh) | 2015-12-08 | 2015-12-08 | 一种基于正则表达式的程序静态分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106855842A CN106855842A (zh) | 2017-06-16 |
CN106855842B true CN106855842B (zh) | 2020-12-29 |
Family
ID=59133101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510901013.0A Active CN106855842B (zh) | 2015-12-08 | 2015-12-08 | 一种基于正则表达式的程序静态分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106855842B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766466A (zh) * | 2017-09-29 | 2018-03-06 | 上海望友信息科技有限公司 | 数据类型的识别方法、系统、计算机可读存储介质及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968367A (zh) * | 2012-08-28 | 2013-03-13 | 华南理工大学 | 一种基于嵌入式软件的静态检测方法及其系统 |
CN103077064A (zh) * | 2012-12-31 | 2013-05-01 | 北京配天大富精密机械有限公司 | 一种解析并执行程序语言方法及解释装置 |
CN104298503A (zh) * | 2014-09-16 | 2015-01-21 | 燕山大学 | 一种基于平行控制的同一算法执行系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9305116B2 (en) * | 2010-04-20 | 2016-04-05 | International Business Machines Corporation | Dual DFA decomposition for large scale regular expression matching |
-
2015
- 2015-12-08 CN CN201510901013.0A patent/CN106855842B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968367A (zh) * | 2012-08-28 | 2013-03-13 | 华南理工大学 | 一种基于嵌入式软件的静态检测方法及其系统 |
CN103077064A (zh) * | 2012-12-31 | 2013-05-01 | 北京配天大富精密机械有限公司 | 一种解析并执行程序语言方法及解释装置 |
CN104298503A (zh) * | 2014-09-16 | 2015-01-21 | 燕山大学 | 一种基于平行控制的同一算法执行系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106855842A (zh) | 2017-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797298B2 (en) | Automating identification of code snippets for library suggestion models | |
US12032475B2 (en) | Automating identification of test cases for library suggestion models | |
US12056487B2 (en) | Automating generation of library suggestion engine models | |
US11340896B2 (en) | Library model addition | |
CN106062751B (zh) | 对与数据类型有关的数据剖析操作的管理 | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
WO2019051426A1 (en) | PRUNING ENGINE | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
US20130179863A1 (en) | Bug variant detection using program analysis and pattern identification | |
CN108459964B (zh) | 测试用例选择方法、装置、设备以及计算机可读存储介质 | |
CN111459495B (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
CN115061721A (zh) | 一种报表生成方法、装置、计算机设备及存储介质 | |
US8904352B2 (en) | Systems and methods for processing source code during debugging operations | |
CN108415998B (zh) | 应用依赖关系更新方法、终端、设备及存储介质 | |
CN107797823B (zh) | 业务规则管理方法、装置、存储介质和计算机设备 | |
CN115827895A (zh) | 一种漏洞知识图谱处理方法、装置、设备及介质 | |
CN110765152A (zh) | Sql提取方法、装置、计算机设备和存储介质 | |
CN106855842B (zh) | 一种基于正则表达式的程序静态分析方法 | |
CN104536880A (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
CN110515653B (zh) | 文档生成方法、装置、电子设备及计算机可读存储介质 | |
JP2014519671A5 (zh) | ||
CN113138767A (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN112464242A (zh) | 一种网页平台漏洞采集方法、系统、终端及存储介质 | |
CN117251187A (zh) | 内核更新、任务处理方法、计算设备及计算机存储介质 | |
CN115408453A (zh) | 一种配置化报表生成方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |