CN107967213B - 一种航天软件临界资源访问冲突检测方法 - Google Patents
一种航天软件临界资源访问冲突检测方法 Download PDFInfo
- Publication number
- CN107967213B CN107967213B CN201711292178.8A CN201711292178A CN107967213B CN 107967213 B CN107967213 B CN 107967213B CN 201711292178 A CN201711292178 A CN 201711292178A CN 107967213 B CN107967213 B CN 107967213B
- Authority
- CN
- China
- Prior art keywords
- function
- write
- read
- thread
- global variable
- 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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (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:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;
步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;
步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;
步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。
进一步的,步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。
进一步的,步骤1中,所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。
进一步的,步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。
进一步的,步骤2中,所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。
进一步的,步骤2中,所述语法树用于识别函数对全局变量的读写情况,所述语法树的识别代码中的语法操作,其格式与GCC编译器编译结果保持一致。
进一步的,步骤3中,所述全局变量读写关系附表记录每个全局变量被函数表中的函数读写的情况。
进一步的,步骤3中,所述函数读写关系附表记录每个函数对全局变量表中的变量读写的情况。
进一步的,步骤3中,所述函数调用关系表根据语法树识别出的函数调用关系,记录每个函数调用其他函数的情况和被其他函数调用的情况。
进一步的,步骤4中,所述识别线程入口是根据函数调用关系表识别调用图中入度为0并且出度不为0的节点编号,将该节点设置为线程入口,并分配唯一的线程编号。
进一步的,步骤4中,所述线程着色是根据线程入口将该线程中每个被调用的函数进行线程标号,表示该被调函数属于当前线程,同一函数可以被多个线程着色。
进一步的,步骤5中,所述读写冲突为不同线程函数对同一变量进行读写,导致读取数据不完整或数据异常的情况;
所述写写冲突为不同线程函数对同一变量进行写,导致写数据失败或写数据错误的情况。
本发明由于采用以上技术方案,使之与现有技术相比,具有以下的优点和积极效果:
本发明通过对软件代码进行词法分析和语法分析,获取全局变量表和函数表,再进一步分析出函数调用关系、识别线程入口,将函数调用图进行线程着色后,通过遍历全局变量读写关系附表和函数读写关系附表,识别不同线程中对同一变量的读写冲突和写写冲突,发现资源访问冲突情况,从而提早发现软件故障隐患。可以降低人力资源成本,并且实施容易、易于复用,通过对软件源代码进行分析,自动识别出共享资源访问冲突的情况,极大的提高了检查的效率。该方法在某型号综合控制器CPU软件、某型号综合驱动控制器CPU软件上得到成功应用,有效的识别出共享资源访问冲突情况,并根据检查结果采取相应保护措施,提高了软件可靠性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:
图1是本发明一种航天软件临界资源访问冲突检测方法的实现简图;
图2是本发明一种航天软件临界资源访问冲突检测方法的数据结构示意图。
具体实施方式
以下将结合本发明的附图,对本发明实施例中的技术方案进行清楚、完整的描述和讨论,显然,这里所描述的仅仅是本发明的一部分实例,并不是全部的实例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
如图1和2所示,本发明公开了一种航天软件临界资源访问冲突检测方法,通过对软件代码进行词法分析和语法分析,获取全局变量表和函数表,再进一步分析出函数调用关系、识别线程入口,将函数调用图进行线程着色后,通过遍历全局变量读写关系附表和函数读写关系附表,识别不同线程中对同一变量的读写冲突和写写冲突,发现资源访问冲突情况,从而提早发现软件故障隐患。具体包括以下检测步骤:
步骤1:由词法分析单元进行词法分析后,识别出词牌流;
步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;
步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;
步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;
步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。
在步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。
在步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。所述语法树用于识别函数对全局变量的读写情况,所述语法树的识别代码中的语法操作,其格式与GCC编译器编译结果保持一致。
在步骤3中,所述全局变量读写关系附表记录每个全局变量被函数表中的函数读写的情况。所述函数读写关系附表记录每个函数对全局变量表中的变量读写的情况。所述函数调用关系表根据语法树识别出的函数调用关系,记录每个函数调用其他函数的情况和被其他函数调用的情况。
在步骤4中,所述识别线程入口是根据函数调用关系表识别调用图中入度为0并且出度不为0的节点编号,将该节点设置为线程入口,并分配唯一的线程编号。所述线程着色是根据线程入口将该线程中每个被调用的函数进行线程标号,表示该被调函数属于当前线程,同一函数可以被多个线程着色。
在步骤5中,所述读写冲突为不同线程函数对同一变量进行读写,导致读取数据不完整或数据异常的情况;所述写写冲突为不同线程函数对同一变量进行写,导致写数据失败或写数据错误的情况。
本发明由于采用以上技术方案,使之与现有技术相比,具有以下的优点和积极效果:
本发明可以降低人力资源成本,并且实施容易、易于复用,通过对软件源代码进行分析,自动识别出共享资源访问冲突的情况,极大的提高了检查的效率。该方法在某型号综合控制器CPU软件、某型号综合驱动控制器CPU软件上得到成功应用,有效的识别出共享资源访问冲突情况,并根据检查结果采取相应保护措施,提高了软件可靠性。
本发明将软件工程源代码作为输入,通过冲突检测方法,自动检测出多线程对共享变量的读写冲突和写写冲突。本发明方法可用于航天型号软件共享资源访问冲突检测。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (12)
1.一种航天软件临界资源访问冲突检测方法,其特征在于,包括以下检测步骤:
步骤1:由词法分析单元进行词法分析后,识别出词牌流;
步骤2:语法分析单元根据词牌流进行语法分析后生成全局变量表、语法树和函数表;
步骤3:语法树结合全局变量表进行分析后得出全局变量读写关系附表,语法树结合函数表进行分析后得出函数读写关系附表和函数调用关系表;
步骤4:根据函数调用关系识别线程入口后对函数调用关系表进行线程着色;
步骤5:结合全局变量读写关系附表、函数读写关系附表和线程着色后的函数调用关系表分析检查得出全局变量读写冲突情况和写写冲突情况。
2.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤1中,所述词法分析单元根据源码文件和头文件生成词牌流。
3.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤1中,所述词牌流的格式与GCC编译器预编译结果保持一致,所述词牌流用于所述语法分析单元进行语法分析。
4.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述全局变量表记录所有变量的变量名,并为每个变量分配一个唯一的编号。
5.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述函数表记录所有函数的函数名,并为每个函数分配一个唯一的编号。
6.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤2中,所述语法树用于识别函数对全局变量的读写情况,所述语法树的识别代码中的语法操作,所述语法树的格式与GCC编译器编译结果保持一致。
7.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤3中,所述全局变量读写关系附表记录每个全局变量被函数表中的函数读写的情况。
8.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤3中,所述函数读写关系附表记录每个函数对全局变量表中的变量读写的情况。
9.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤3中,所述函数调用关系表根据语法树识别出的函数调用关系,记录每个函数调用其他函数的情况和被其他函数调用的情况。
10.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤4中,所述识别线程入口是根据函数调用关系表识别调用图中入度为0并且出度不为0的节点编号,将该节点设置为线程入口,并分配唯一的线程编号。
11.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤4中,所述线程着色是根据线程入口将该线程中每个被调用的函数进行线程标号,表示该被调函数属于当前线程,同一函数被多个线程着色。
12.根据权利要求1所述的一种航天软件临界资源访问冲突检测方法,其特征在于,步骤5中,
所述读写冲突为不同线程函数对同一变量进行读写,导致读取数据不完整或数据异常的情况;
所述写写冲突为不同线程函数对同一变量进行写,导致写数据失败或写数据错误的情况。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711292178.8A CN107967213B (zh) | 2017-12-07 | 2017-12-07 | 一种航天软件临界资源访问冲突检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711292178.8A CN107967213B (zh) | 2017-12-07 | 2017-12-07 | 一种航天软件临界资源访问冲突检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107967213A CN107967213A (zh) | 2018-04-27 |
CN107967213B true CN107967213B (zh) | 2021-06-04 |
Family
ID=61998357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711292178.8A Active CN107967213B (zh) | 2017-12-07 | 2017-12-07 | 一种航天软件临界资源访问冲突检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107967213B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110221923B (zh) * | 2019-06-06 | 2021-06-08 | 北京字节跳动网络技术有限公司 | 数据访问方法、装置及设备 |
CN111159022B (zh) * | 2019-12-20 | 2023-05-02 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063328A (zh) * | 2010-12-17 | 2011-05-18 | 北京控制工程研究所 | 一种用于检测中断驱动型程序数据竞争的*** |
CN102073589A (zh) * | 2010-12-29 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的数据竞争检测方法及*** |
DE102012000748A1 (de) * | 2012-01-12 | 2013-07-18 | Uwe-Jürgen Zunker | Verfahren zur Auffindung von versteckten Race Conditions in Computerprogrammen, sowie zur Ermittlung des theoretischen, maximalen Stackbedarfs von Computerprogrammen |
-
2017
- 2017-12-07 CN CN201711292178.8A patent/CN107967213B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063328A (zh) * | 2010-12-17 | 2011-05-18 | 北京控制工程研究所 | 一种用于检测中断驱动型程序数据竞争的*** |
CN102073589A (zh) * | 2010-12-29 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的数据竞争检测方法及*** |
DE102012000748A1 (de) * | 2012-01-12 | 2013-07-18 | Uwe-Jürgen Zunker | Verfahren zur Auffindung von versteckten Race Conditions in Computerprogrammen, sowie zur Ermittlung des theoretischen, maximalen Stackbedarfs von Computerprogrammen |
Also Published As
Publication number | Publication date |
---|---|
CN107967213A (zh) | 2018-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8875110B2 (en) | Code inspection executing system for performing a code inspection of ABAP source codes | |
CN101286132B (zh) | 一种基于软件缺陷模式的测试方法及*** | |
US9158514B2 (en) | Method and apparatus for providing change-related information | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
CN106506283B (zh) | 银行和企业对接***的业务测试方法和装置 | |
US8645761B2 (en) | Precise fault localization | |
CN102760095B (zh) | 基于静态共享变量识别的动态数据竞争检测方法 | |
CN106325970A (zh) | 编译方法和编译*** | |
US9304893B1 (en) | Integrated software development and test case management system | |
CN104899147A (zh) | 一种面向安全检查的代码静态分析方法 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测*** | |
CN103257919A (zh) | 脚本程序检查方法和装置 | |
CN107967213B (zh) | 一种航天软件临界资源访问冲突检测方法 | |
CN108932191A (zh) | 自动化测试方法、***、计算机设备及可读存储介质 | |
CN111813672B (zh) | 一种针对多种处理器架构的非侵入式覆盖率统计方法 | |
JP6357814B2 (ja) | 未完成ソフトウェアの分析 | |
US20110167413A1 (en) | Coverage apparatus and method for testing multi-thread environment | |
CN105354035A (zh) | 用于编写web工程测试用例的方法 | |
CN110347589B (zh) | 一种软件单元测试自动化检测方法及*** | |
CN113742252A (zh) | 一种检测内存乱序的方法及装置 | |
CN111737122B (zh) | 一种大型机程序调用层级的检查方法及*** | |
CN106250260A (zh) | 处理器溢出监控和调试方法及装置 | |
CN115718704A (zh) | 一种基于自主架构芯片的Decode模拟器及调试方法 | |
KR101403298B1 (ko) | 프로그램 소스 특성 자동인식 방법 | |
Owens | A generic framework facilitating automated quality assurance across programming languages of disparate paradigms. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
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 |