一种模块间内部接口引用的静态检测方法
【专利摘要】本发明提出了一种模块间内部接口引用的静态检测方法,包括:将模块内程序分为模块源程序和对外头文件;解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。采用本发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。
【专利说明】一种模块间内部接口引用的静态检测方法
【技术领域】
[0001]本发明涉及软件架构【技术领域】,尤其涉及一种模块间内部接口引用的静态检测方法。
【背景技术】
[0002]良好的软件系统设计是层次化及模块划分、模块与模块之间有明确的接口调用原贝U。软件系统在设计、开发及维护过程中都会存在的现象:软件系统在最初的设计与开发过程中一般都能遵守模块间的接口调用原则,然而随着时间的推移、开发及维护人员的不断替换,接手的人员尤其是没有经验的新人往往就打破这些调用原则。久而久之,原先结构层次清晰的软件系统就变得界面不清晰,严重影响产品的维护和质量。
[0003]当今的软件系统尤其是大型的软件系统无一例外都采用了分层次、模块化设计。模块与模块间有明确的信赖方向及原则,如图1所示。模块间接口调用方向及原则:上层子系统模块可以调用下层子系统模块提供的接口。下层子系统模块禁止调用上层子系统模块的接口 ;模块间的接口仅限于对外API,禁止调用其他模块的内部接口。因为某种原因开发维护人员发生了流动,加上人员能力参差不齐,新进的开发维护人员没能理解当初设计人员的意图,后合入的代码往往就破坏了软件架构的层次关系,模块与模块间的界面就越来越模糊,牵一发而动全身,最终导致了寸步难行,软件架构的生命就此终结。
【发明内容】
[0004]基于此,有必要提供一种保持软件架构的模块间内部接口引用的静态检测方法。
[0005]一种模块间内部接口引用的静态检测方法,包括:
[0006]将模块内程序分为模块源程序和对外头文件;
[0007]解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接Π ;
[0008]若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。
[0009]在优选实施例中,所述另一模块为所述模块的下层模块。
[0010]在优选实施例中,解析模块源程序和对外头文件的方法为dependence parser静态分析。
[0011]采用发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。
【专利附图】
【附图说明】
[0012]图1为本发明提供的大型软件模块间的层级关系;
[0013]图2为本发明提供的一种模块间内部接口引用的静态检测方法的具体流程图;[0014]图3为解析模块源程序和对外头文件的方法示意图。
【具体实施方式】
[0015]为了使本领域相关技术人员更好地理解本发明的技术方案,下面将结合本发明实施方式的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。
[0016]参阅图2,本发明提供一种实施方式的模块间内部接口引用的静态检测方法,包括:
[0017]步骤S101,将模块内程序分为模块源程序和对外头文件;
[0018]模块内程序包括模块源程序和对外头文件,模块源程序为模块内程序主体,而对头文件是声明那些接口可以被其他模块弓I用。
[0019]步骤S102,解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口;
[0020]内部接口为源程序内自己定义的接口,禁止被其他模块引用;外部接口为源程序定义的接口,对外头文件声明可以被其他模块引用的接口 ;未定义接口为源程序未定义的接口,为引用其他模块的接口 ;通过解析模块源程序和对外头文件,可分别获知上述三种接□。
[0021 ] 步骤S103,若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒程序员修改。
[0022]未定义接口如果不是另一模块的外部接口,即该未定义接口不是另一个模块对外头文件中声明的接口,则这种引用是不合法的,告警并提醒修改。
[0023]在优选实施方式中,上述另一模块为所述模块的下层模块。在软件架构中,上层模块可以引用下层模块的接口,反之则不行。
[0024]参阅图3,为解析模块源程序和对外头文件的方法示意图。
[0025]本实施方式采用dependence parser的依赖分析方法,dependence parser的依赖分析方法基于编译、链接的原理,做了以下改进(以C语言为例说明):
[0026](I)编译器对C文件进行编译,进行汇编,生成中间文件;dependence parser需要对以模块为单位进行分析,模块所以文件(C文件与头文件)进行分析,所有文件定义的符号认为是模块的内部符号,以自定义的文件格式保存内部符号与外部符号信息,不需要进行指令汇编。
[0027](2)对模块对外头文件进行分析,提取模块对外的API列表。这里对外头文件需要通过指定的格式来标识,这里例子通过在头文件前加“-API”。
[0028](3)如果模块A引用的外部接口在模块B的内部定义接口及API列表中找到,则认为模块A信赖了模块B;如果模块A引用的外部接口在模块B的内部定义接口列表中找到,但在API列表中没能找到,则认为模块A引用了模块B的内部接口符号,这个引用是严厉禁止。
[0029]采用发明后,将模块内程序分为模块源程序和对外头文件,通过解析这两个文件,判断未定义接口是否为另一模块的外部接口,若未定义接口不是另一模块的外部接口,则告警,使得模块间接口的引用清晰明了,保证模块之间的层级关系,保证了软件的架构。[0030]以上仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种模块间内部接口引用的静态检测方法,其特征在于,包括: 将模块内程序分为模块源程序和对外头文件; 解析模块源程序和对外头文件,判别源程序的内部接口、外部接口以及未定义接口 ; 若未定义接口为另一模块的外部接口则合法,否则为不合法,告警并提醒修改。
2.根据权利要求1所述的模块间内部接口引用的静态检测方法,其特征在于,所述另一模块为所述模块的下层模块。
3.根据权利要求1所述的模块间内部接口引用的静态检测方法,其特征在于,解析模块源程序和对外头文件的方法为dependence parser静态分析。
【文档编号】G06F11/36GK103885880SQ201410124206
【公开日】2014年6月25日 申请日期:2014年3月28日 优先权日:2014年3月28日
【发明者】李智荣, 廖正新, 陈城香, 冯明 申请人:上海斐讯数据通信技术有限公司