CN103885880A - 一种模块间内部接口引用的静态检测方法 - Google Patents
一种模块间内部接口引用的静态检测方法 Download PDFInfo
- Publication number
- CN103885880A CN103885880A CN201410124206.5A CN201410124206A CN103885880A CN 103885880 A CN103885880 A CN 103885880A CN 201410124206 A CN201410124206 A CN 201410124206A CN 103885880 A CN103885880 A CN 103885880A
- Authority
- CN
- China
- Prior art keywords
- module
- interface
- external
- source program
- internal
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出了一种模块间内部接口引用的静态检测方法,包括:将模块内程序分为模块源程序和对外头文件;解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。采用本发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。
Description
技术领域
本发明涉及软件架构技术领域,尤其涉及一种模块间内部接口引用的静态检测方法。
背景技术
良好的软件系统设计是层次化及模块划分、模块与模块之间有明确的接口调用原则。软件系统在设计、开发及维护过程中都会存在的现象:软件系统在最初的设计与开发过程中一般都能遵守模块间的接口调用原则,然而随着时间的推移、开发及维护人员的不断替换,接手的人员尤其是没有经验的新人往往就打破这些调用原则。久而久之,原先结构层次清晰的软件系统就变得界面不清晰,严重影响产品的维护和质量。
当今的软件系统尤其是大型的软件系统无一例外都采用了分层次、模块化设计。模块与模块间有明确的信赖方向及原则,如图1所示。模块间接口调用方向及原则:上层子系统模块可以调用下层子系统模块提供的接口。下层子系统模块禁止调用上层子系统模块的接口;模块间的接口仅限于对外API,禁止调用其他模块的内部接口。因为某种原因开发维护人员发生了流动,加上人员能力参差不齐,新进的开发维护人员没能理解当初设计人员的意图,后合入的代码往往就破坏了软件架构的层次关系,模块与模块间的界面就越来越模糊,牵一发而动全身,最终导致了寸步难行,软件架构的生命就此终结。
发明内容
基于此,有必要提供一种保持软件架构的模块间内部接口引用的静态检测方法。
一种模块间内部接口引用的静态检测方法,包括:
将模块内程序分为模块源程序和对外头文件;
解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;
若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。
在优选实施例中,所述另一模块为所述模块的下层模块。
在优选实施例中,解析模块源程序和对外头文件的方法为dependenceparser静态分析。
采用发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。
附图说明
图1为本发明提供的大型软件模块间的层级关系;
图2为本发明提供的一种模块间内部接口引用的静态检测方法的具体流程图;
图3为解析模块源程序和对外头文件的方法示意图。
具体实施方式
为了使本领域相关技术人员更好地理解本发明的技术方案,下面将结合本发明实施方式的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。
参阅图2,本发明提供一种实施方式的模块间内部接口引用的静态检测方法,包括:
步骤S101,将模块内程序分为模块源程序和对外头文件;
模块内程序包括模块源程序和对外头文件,模块源程序为模块内程序主体,而对头文件是声明那些接口可以被其他模块引用。
步骤S102,解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;
内部接口为源程序内自己定义的接口,禁止被其他模块引用;外部接口为源程序定义的接口,对外头文件声明可以被其他模块引用的接口;未定义接口为源程序未定义的接口,为引用其他模块的接口;通过解析模块源程序和对外头文件,可分别获知上述三种接口。
步骤S103,若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。
未定义接口如果不是另一模块的外部接口,即该未定义接口不是另一个模块对外头文件中声明的接口,则这种引用是不合法的,告警并提醒修改。
在优选实施方式中,上述另一模块为所述模块的下层模块。在软件架构中,上层模块可以引用下层模块的接口,反之则不行。
参阅图3,为解析模块源程序和对外头文件的方法示意图。
本实施方式采用dependence parser的依赖分析方法,dependence parser的依赖分析方法基于编译、链接的原理,做了以下改进(以C语言为例说明):
(1)编译器对C文件进行编译,进行汇编,生成中间文件;dependence parser需要对以模块为单位进行分析,模块所以文件(C文件与头文件)进行分析,所有文件定义的符号认为是模块的内部符号,以自定义的文件格式保存内部符号与外部符号信息,不需要进行指令汇编。
(2)对模块对外头文件进行分析,提取模块对外的API列表。这里对外头文件需要通过指定的格式来标识,这里例子通过在头文件前加“-API”。
(3)如果模块A引用的外部接口在模块B的内部定义接口及API列表中找到,则认为模块A信赖了模块B;如果模块A引用的外部接口在模块B的内部定义接口列表中找到,但在API列表中没能找到,则认为模块A引用了模块B的内部接口符号,这个引用是严厉禁止。
采用发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。
以上仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (3)
1.一种模块间内部接口引用的静态检测方法,其特征在于,包括:
将模块内程序分为模块源程序和对外头文件;
解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;
若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒修改。
2.根据权利要求1所述的模块间内部接口引用的静态检测方法,其特征在于,所述另一模块为所述模块的下层模块。
3.根据权利要求1所述的模块间内部接口引用的静态检测方法,其特征在于,解析模块源程序和对外头文件的方法为dependence parser静态分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410124206.5A CN103885880A (zh) | 2014-03-28 | 2014-03-28 | 一种模块间内部接口引用的静态检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410124206.5A CN103885880A (zh) | 2014-03-28 | 2014-03-28 | 一种模块间内部接口引用的静态检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103885880A true CN103885880A (zh) | 2014-06-25 |
Family
ID=50954788
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410124206.5A Pending CN103885880A (zh) | 2014-03-28 | 2014-03-28 | 一种模块间内部接口引用的静态检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103885880A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108139891A (zh) * | 2015-10-23 | 2018-06-08 | 微软技术许可有限责任公司 | 针对外部文件的缺失包括建议 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000043886A1 (en) * | 1999-01-20 | 2000-07-27 | Applied Microsystems Corporation | Instrumentation of calls to routines for which source code is unavailable |
US20060190923A1 (en) * | 2005-02-22 | 2006-08-24 | Microsoft Corporation | Custom API modeling for source code static analysis simulator |
US20110153900A1 (en) * | 2009-12-23 | 2011-06-23 | Spansion Llc | Variable read latency on a serial memory bus |
CN102523229A (zh) * | 2011-12-23 | 2012-06-27 | 大唐移动通信设备有限公司 | 一种信息的访问方法和设备 |
-
2014
- 2014-03-28 CN CN201410124206.5A patent/CN103885880A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000043886A1 (en) * | 1999-01-20 | 2000-07-27 | Applied Microsystems Corporation | Instrumentation of calls to routines for which source code is unavailable |
US20060190923A1 (en) * | 2005-02-22 | 2006-08-24 | Microsoft Corporation | Custom API modeling for source code static analysis simulator |
US20110153900A1 (en) * | 2009-12-23 | 2011-06-23 | Spansion Llc | Variable read latency on a serial memory bus |
CN102523229A (zh) * | 2011-12-23 | 2012-06-27 | 大唐移动通信设备有限公司 | 一种信息的访问方法和设备 |
Non-Patent Citations (3)
Title |
---|
KINN: "PCLINT+C51", 《HTTP://BLOG.CSDN.NET/KINNHEUNG/ARTICLE/DETAILS/6853810》 * |
ZHZHT19861011: "嵌入式C语言之---模块化编程", 《HTTP://BLOG.CSDN.NET/ZHZHT19861011/ARTICLE/DETAILS/5974945》 * |
余亚刚 等: "一种可扩展的C代码静态分析方法研究", 《科技风》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108139891A (zh) * | 2015-10-23 | 2018-06-08 | 微软技术许可有限责任公司 | 针对外部文件的缺失包括建议 |
CN108139891B (zh) * | 2015-10-23 | 2021-05-28 | 微软技术许可有限责任公司 | 用于生成建议以纠正未定义标记错误的方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104899147B (zh) | 一种面向安全检查的代码静态分析方法 | |
US20180096153A1 (en) | System and Method for Responding to a Cyber-Attack-Related Incident Against an Industrial Control System | |
CN105550594B (zh) | 安卓应用文件的安全性检测方法 | |
CN103676896B (zh) | 核电厂数字化控制室人机界面改进方法 | |
Panesar-Walawege et al. | Characterizing the chain of evidence for software safety cases: A conceptual model based on the IEC 61508 standard | |
US9792204B2 (en) | System and method for coverage-based automated test case augmentation for design models | |
CN104462984B (zh) | 基于逆向符号执行的应用权限泄漏检测方法及系统 | |
CN107885609B (zh) | 业务冲突处理方法及装置、存储介质和电子设备 | |
Bernardi et al. | Security modelling and formal verification of survivability properties: Application to cyber–physical systems | |
CN103389939A (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN108595236A (zh) | 一种防止子线程进行用户界面操作的方法及装置 | |
CN102968367A (zh) | 一种基于嵌入式软件的静态检测方法及其系统 | |
CN103279421B (zh) | 一种基于数据起源技术的程序异常传播模型构造方法 | |
Al-Saiyd | Source code comprehension analysis in software maintenance | |
CN103885880A (zh) | 一种模块间内部接口引用的静态检测方法 | |
CN103901872B (zh) | 安全仪表系统以及pst启动方法 | |
Kim et al. | Execution of natural language requirements using State Machines synthesised from Behavior Trees | |
CN104765688A (zh) | 一种可动态部署规则的Java程序运行时验证系统 | |
CN101625641A (zh) | 基于安全缺陷知识库的可信软件开发方法 | |
Zheng et al. | Software Reliability and Dependability Engineering | |
Lagerstedt | Using automated tests for communicating and verifying non-functional requirements | |
Shippey | Exploiting abstract syntax trees to locate software defects | |
Baller et al. | Towards incremental test suite optimization for software product lines | |
Zoubi et al. | Study the impact of improving source code on software metrics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140625 |