功能模块的生成工具的制作方法

文档序号:6370750阅读:239来源:国知局
专利名称:功能模块的生成工具的制作方法
技术领域
本发明属于计算机技术领域,尤其涉及一种功能模块的生成工具。
背景技术
目前,对于大部分的程序设计而言,通常是将一个较大的程序(项目)按功能分成若干个功能模块,由不同的人员进行编写和调试以将各个功能模块写成结构清晰、接口简单、容易理解的程序段,即函数。这种程序设计方法称之为模块化的程序设计方法。采用模块化的程序设计方法可以提高程序的开发效率、设计效率、缩短了程序的开发周期,避免了程序开发的重复性劳动,且采用模块化的程序设计,便于模块的调试和排错,且模块易于维护,功能也易于扩充。对于程序开发过程中的每一个功能模块而言,其不可能是孤立运行的,必须配合工作,但是又不希望其他功能模块干扰其内部的运行,于是应用程序编程接口(API,Application Programming Interface)应运而生,功能模块之间通过调用API来互相连接,以实现各自的功能。如A模块调用了 B模块的API,B模块调用了 C模块的API。通过调用功能模块的API,功能模块之间既能保证自己的独立性,又能彼此间协同工作。然而,对于功能模块之间的调用而言,存在以下问题第一功能模块调用过程中,往往会出现阻塞的情况。如在开发复杂系统的过程中,需要多人并行开发多个功能模块,多个功能模块之间配合工作。而开发每一个功能模块的工程师的工作效率不一样,功能模块的工作量也不一样,具体地,以一个项目包含A模块、B模块、C模块、D模块为例,若A模块、C模块、D模块均要调用B模块、且A模块还要调用C模块,那么一旦B模块没有完成,则C模块、D模块也无法完成,而A模块既要调用B模块又要调用C模块,因此A模块也无法完成。最终由于功能模块之间调用的阻塞,导致任务无法预期完成。当系统越来越复杂,协作方越来越多时,阻塞问题将越发地严重。第二 由于被调用功能模块的版本分裂,导致需要重新编写功能模块的源代码,耗时耗力,且开发过程繁琐,给开发人员造成了不便也增加了开发成本。所谓版本分裂指的是基础软件的多个版本存在差异。由于基础软件的版本存在差异,故会导致应用软件必须为基础软件的每个版本开发一次。举例来说,开发人员编写功能模块X的源代码,功能模块X的源代码中包含了调用功能模块Y的代码,当被调用功能模块Y存在多个版本Yl、Y2、Y3时,开发人员则需要重新编写多个源代码XI、X2、X3以对应不同的Y1、Y2、Y3。第三在复杂的系统中,代码和文档的数量相当庞大,不同功能模块的开发人员需要花费一定的时间才能找到其想要调用的功能模块的API,并且要花一定时间学习和理解API的用法。如学习API的参数和返回值、调用时序(某些API必须配对使用,例如malloC函数和free函数)、特殊的使用规则(在多线程系统中,有些API不能在某些线程中调用)等。而对于一个功能模块而言,往往功能模块的使用者(调用者)要比开发人员多得多,因此对于功能模块的使用者而言,每个使用者都要花费寻找和学习API的时间,给使用者带来了诸多的不便。、
第四对于功能模块的开发人员而言,其最了解功能模块的用法,若其在写功能模块用法的文档时,漏写了某些信息,如该功能模块的某些接口必须匹配调用,那么在调用该功能模块的过程中,就会出现bug。而功能模块的开发人员和被调用功能模块的开发人员很可能是不同公司的工程师,因此,二者之间不能看到源代码,一旦出现bug,bug的解决过程会变得极其艰难,导致功能模块的开发周期变长,增加了开发成本。另外,当被调用功能模块升级时,如升级开发被调用功能模 块的软件开发工具包(SDK, Software DevelopmentKU),则调用该功能模块的功能模块也必须做相应的修改,且调用该功能模块的开发人员也要重新学习被调用功能模块的API,给开发人员带来了不便,同时也会增加功能模块的开发成本。因此,如何能够避免开发功能模块过程中阻塞现象的发生、以及由于被调用功能模块升级、版本分裂等因素导致的开发成本增加,给开发人员提供更大的便利成为目前亟待解决的问题之一。其他有关功能模块的相关技术还可以参见公开号为CN101650648,发明名称为动态调用功能模块的系统及方法的专利申请。

发明内容
本发明解决的问题是提供一种功能模块的生成工具以防止功能模块开发过程中出现阻塞现象和开发成本的增加,给开发人员提供更多便利。为了解决上述问题,本发明提供了一种功能模块的生成工具,包括资源库,用于储存功能信息、被调用模块及其模块信息,所述功能信息包括功能名称及其对应实现的功能,所述被调用模块的模块信息包括所述被调用模块实现的功能;获取单元,用于获取功能模块的至少一需求信息;匹配单元,用于获取所述资源库中与所述功能模块的需求信息匹配的功能名称;搜索单元,用于依据与匹配单元匹配到的功能名称对应的实现的功能搜索所述资源库中被调用模块的模块信息,以确定要调用的被调用模块;生成单元,用于调用搜索单元搜索到的被调用模块,以生成所述功能模块。可选的,所述功能模块的生成工具,还包括第一封装单元,用于封装所述资源库中的至少两功能信息;第一存储单元,用于将所述第一封装单元封装后的功能信息存储至所述资源库中。可选的,所述功能模块的生成工具,还包括第二封装单元,用于为所述生成单元生成的功能模块添加模块信息,以将所述功能模块封装成被调用模块;第二储存单元,用于将所述第二封装单元封装的被调用模块储存至所述资源库中;添加单元,用于基于所述第二封装单元封装的被调用模块生成功能信息并将所述生成的功能信息储存至所述资源库中。可选的,所述被调用模块由API实现,所述被调用模块实现的功能为API实现的功能,所述模块信息还包括API名称;所述功能信息和模块信息均以自然语言字符串描述。
可选的,所述模块信息还包括API的形参信息;所述功能信息还包括API的形参信息与功能名称的对应关系。可选的,所述模块信息还包括API的返回值信息;所述功能信息还包括API的返回值信息与功能名称的对应关系。可选的,所述匹配单元采用模糊匹配算法搜索所述资源库。可选的,所述匹配单元基于所述功能模块的需求信息与功能名称之间的关系获取所述资源库中与所述需求信息匹配的功能名称。可选的,所述获取单元包括 输入单元,用于输入生成功能模块的请求;解析单元,用于解析所述请求,以得到至少一需求信息,所述需求信息包括实际参数。可选的,所述被调用模块由API实现,所述模块信息还包括API的形参信息,所述生成单元包括调用单元,用于将所述实际参数传递给所述搜索到的被调用模块,以调用该被调用模块;代码生成单元,用于基于所述调用结果,生成所述功能模块的源代码。与现有技术相比,本发明的技术方案具有以下优点功能模块的生成过程中,获取单元获取其需求信息,匹配单元获取与所述需求信息匹配的存储在资源库中的功能名称,进而使得搜索单元利用与所述功能名称对应的实现的功能来搜索到被调用模块,生成单元调用被调用模块以生成功能模块。由于在生成功能模块的过程中,只先获取功能模块的需求信息,而不是直接调用被调用模块,故功能模块的生成并未直接依赖于被调用模块,或者说功能模块的实现不再是只有等被调用模块设计完成后才能进行,因此,避免了生成功能模块过程中阻塞现象的出现。由于功能模块生成过程中,涉及的是其需求信息,而当被调用模块出现版本分裂的情况时,资源库中的功能信息会相应的更新,故无需再编写对应不同版本的功能模块,而是直接根据功能模块的需求信息去获取与其匹配的功能名称,进而根据与所述功能名称对应实现的功能来搜索被调用模块的模块信息,确定被调用模块并进行调用以生成功能模块。简化了功能模块的开发过程,给开发人员带来了便利也减小了开发成本。此外,由于功能模块调用被调用模块是通过其需求信息和功能名称相匹配进行的,因此,被调用模块升级时,功能模块可以不修改其需求信息,只要被调用模块的功能名称与功能模块的需求信息相匹配,调用单元就可以实现对被调用模块的调用,进而使得生成单元可以重新生成源代码,降低了开发过程的繁琐程度,给开发人员带来了便利。通过匹配单元和搜索单元的配合以确定被调用模块,进而通过生成单元中的调用单元将实际参数传递至被调用模块,实现调用被调用模块以生成功能模块。因此,开发人员不用再学习被调用模块的API,给开发人员带来了很大的便利,也提高了开发功能模块的效率。另外,由于功能模块的开发者不用再直接调用被调用模块的API,故在一定程度上避免了因被调用模块的API文档不全所引起的调试困难,且由于生成功能模块的过程中,只涉及将需求信息中的实际参数传递至被调用模块,因此降低了功能模块调用被调用模块的API时的出错概率,进而降低了调试过程中的复杂度。此外,功能信息和需求信息均以自然语言字符串的形式表示,方便开发人员的同时也提高了开发功能模块的效率。


图I是本发明实施方式的功能模块的生成工具的结构示意图;图2是本发明实施例的功能模块的生成工具的结构示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式
做详细的说明。在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式
的限制。 正如背景技术中描述的,现有生成功能模块的过程中,功能模块在调用其他功能模块时,会出现阻塞、且由于其他功能模块出现版本分裂、模块升级等问题,也会导致开发人员在调用其他功能模块时,需要重新学习其他功能模块的API并重新编写功能模块的源代码,导致开发过程繁琐,开发成本增加,并给开发人员带来了极大的不便。因此,发明人考虑,是否可以改变功能模块的生成过程,尽量使得功能模块的生成不要直接依赖于其调用的功能模块(被调用模块)的完成,具体地,在功能模块的生成过程中,在资源库中存储功能信息,被调用模块及其模块信息,将功能模块的需求信息与功能信息进行匹配,进而通过功能信息与被调用模块的模块信息之间的对应来搜索到被调用模块,然后调用被调用模块以生成功能模块。请参见图I本发明实施方式的功能模块的生成工具的结构示意图,如图I所示,所述功能模块的生成工具包括资源库101,用于储存功能信息、被调用模块及其模块信息,所述功能信息包括功能名称及其对应实现的功能,所述被调用模块的模块信息包括所述被调用模块实现的功倉泛;获取单元102,用于获取功能模块的至少一需求信息;匹配单元103,与所述资源库101、获取单元102相连,用于获取所述资源库101中与所述功能模块的需求信息匹配的功能名称;搜索单元104,与所述资源库101、匹配单元103相连,用于依据与匹配单元103匹配到的功能名称对应的实现的功能搜索所述资源库101中被调用模块的模块信息,以确定要调用的被调用模块;生成单元105,与所述资源库101、搜索单元104相连,用于调用搜索单元104搜索到的被调用模块,以生成所述功能模块。本实施方式中,所述被调用模块(也称为被调用函数)、功能模块(也称为功能函数)均用来实现一定的功能,被调用模块、功能模块均具有各自的模块信息,所述模块信息包括若干步骤,涉及变量、参数、基本运算等信息。本实施方式中,匹配单元103将获取单元102获取的功能模块的需求信息与资源库101中存储的功能名称进行匹配,搜索单元104根据匹配单元103获取的功能名称对应的实现的功能,对资源库101中存储的被调用模块的模块信息进行搜索,进而搜到被调用模块,生成单元105根据搜索单元104搜索到的被调用模块的名称对资源库101中的被调用模块进行调用。为了更好地说明本发明的技术方案,以下结合具体的实施例对本发明的技术方案进行详细的说明。图2是本发明实施例的功能模块的生成工具的结构示意图,如图2所示所述功能模块的生成工具包括资源库101、获取单元102、匹配单元103、搜索单元104、生成单元105 ;所述资源库101、获取单元102分别与所述匹配单元103相连,所述搜索单元104与所述资源库101、匹配单元103相连,所述生成单元105与所述资源库101、搜索单元104相连,其中所述获取单元102包括输入单元1021,用于输入生成功能模块的请求; 解析单元1022,与所述输入单元1021、匹配单元103相连,用于解析所述请求,以得到至少一需求信息,所述需求信息包括实参信息。所述生成单元105包括调用单元1051,与所述解析单元1022、资源库101、搜索单元104相连,用于将所述实参信息传递给所述搜索到的被调用模块,以调用该被调用模块;代码生成单元1052,与所述调用单元1051相连,用于基于所述调用结果,生成所述功能模块的源代码。本实施例中,所述资源库101中存储有被调用模块及其模块信息,所述被调用模块的模块信息以自然语言字符串进行描述。所述被调用模块的模块信息包括若干步骤,其中一部分步骤涉及了该模块的变量、参数、返回值、基础运算等信息,另一部分步骤则包括了被调用模块实现的功能。本实施例中,所述被调用模块由API实现,被调用模块的模块信息所包括的被调用模块实现的功能为API实现的功能,所述API实现的功能也即API的作用,且所述被调用模块的模块信息还包括API名称。举例来说API名称为“Play Channel ”,其实现的功能为“播放频道” ;API名称为“GetFileLength”,其实现的功能为“获取文件大小”。所述资源库101中还存储有功能信息,所述功能信息也以自然语言字符串进行描述。所述功能信息可以关联于被调用模块,或者说,通过功能信息可以搜索到被调用模块。举例来说,所述资源库101中可以存储有功能名称为“播放频道字符串”,与该功能名称对应实现的功能为“播放频道”的功能信息。或者存储有功能名称为“获得路径为路径字符串的文件的大小字符串”,与该功能名称对应实现的功能为“获得文件大小”的功能信息等。在生成功能模块的过程中,通过所述获取单元102获取功能模块的需求信息。具体地,所述获取单元102包括输入单元1021和解析单元1022,所述输入单元1021输入的生成功能模块的请求以自然语言字符串描述,所述请求包括调用请求,即在生成功能模块的过程中,该功能模块要调用其他功能模块的请求,且所述调用请求并不唯一;所述解析单兀1022解析所述输入单兀1021输入的请求,以获得需求彳目息,所述需求彳目息也以自然语目字符串描述,所述需求信息包括实际参数(实参)。举例来说,若功能模块生成的过程中请求调用播放频道模块以播放频道CCTV,则其需求信息为“播放频道CCTV”,其中CCTV为实际参数。需要说明的是,所述输入单元1021输入的生成功能模块的请求除了包括调用请求外,还包括用于生成功能模块所需的相关请求,所述请求经所述解析单元1022解析后获得功能模块的基本信息和需求信息。所述基本信息包括若干步骤,涉及了该功能模块的变量、参数、返回值、基础运算等信息,每一个步骤仍以自然语言字符串进行描述。所述需求信息也以自然语言字符串进行描述。另外,被调用模块的模块信息中也可以包括需求信息,而功能模块的模块信息中也可以包括功能模块实现的功能,当功能模块由API实现时,功能模块实现的功能则为API实现的功能,功能模块的模块信息中还包括API的名称。也就是说,功能模块还是被调用模块都是相对的,对于任何一个功能模块而言,其可能是其他功能模块的被调用模块;对于被调用模块而言,其可能是调用其他模块的功能模块。举例来说,功能模块A调用功能模块B,功能模块B调用功能模块C,则功能模块B的模块信息中既包括了 API实现的功能和API的名称,也包括了功能模块B的需求信息。在获取了功能模块的需求信息后,匹配单元103在所述资源库101中搜索与功能·模块的需求信息匹配的功能名称。进而由搜索单元104依据与该功能名称对应的实现的功能在资源库101中搜索模块信息,进而搜到被调用模块。由于本实施例中,需求信息和功能信息均是以自然语言字符串来描述的,故可以采用自然语言处理算法来匹配功能名称和需求信息。本实施例中,所述匹配单元103采用模糊匹配算法来匹配功能名称和需求信息。模糊匹配是指两个字符串的含义相同,但字符串本身并不相同。例如“我吃了一个苹果”和“一个苹果被我吃了”模糊匹配。“假如”和“如果”模糊匹配。“学校的名字”和“校名”模糊匹配。模糊匹配算法的本质是通过不同的方法来对字符串的语义进行等义变换,且所述等义变换也包括了将字符串变换为它的类型。举例来说“我吃了一个苹果”可以被等义变换为“我吃了一个水果”,因为苹果(字符串)是一种水果(类型)。经过等义变换后,若最终两个字符串可以变换为同一字符串,则认为这两个字符串模糊匹配。在另一实施例中,所述匹配单元也可以基于所述功能模块的需求信息与功能名称之间的关系来确定与所述需求信息匹配的功能名称。具体地,功能模块的需求信息与功能名称之间是否具有包含关系,例如判断所述需求信息是否为功能名称的子集,若是,则所述需求信息与所述功能名称之间匹配。举例来说,若功能模块的需求信息为“播放频道CCTV”;匹配单元对资源库中的功能名称进行搜索,搜索到功能名称“播放频道字符串”,而需求信息“播放频道CCTV ”中CCTV为一个字符串,是字符串的子集,故“播放频道CCTV ”也为“播放频道字符串”的子集,因此,需求信息“播放频道CCTV”与功能名称“播放频道字符串”相匹配。在又一实施例中,匹配单元也可以先采用模糊匹配算法来匹配功能模块的需求信息和功能名称,若匹配不到与所述功能模块的需求信息匹配的功能名称,再通过确定功能模块的需求信息是否为功能名称的子集来对二者进行匹配。在匹配单元103获取与功能模块的需求信息匹配的功能名称后,搜索单元104根据所述功能名称确定与其对应的API实现的功能。由于被调用模块的模块信息中也包括了被调用模块的API实现的功能和与该API实现的功能对应的API的名称,因此搜索单元104根据功能信息中API实现的功能找到在模块信息中与其相同的API实现的功能,进而再由模块信息中API实现的功能找到与其对应的API的名称,以搜到被调用模块。举例来说若功能模块的需求信息为“播放频道CCTV” ;匹配单元103采用模糊匹配算法将所述需求信息与资源库101中存储的功能名称进行匹配,搜索到功能名称“播放频道字符串”与“播放频道CCTV”匹配。而“播放频道字符串”对应的API实现的功能为“播放频道”,搜索单元104依据匹配单元103匹配到的功能名称“播放频道字符串”所对应的API实现的功能“播放频道”搜索资源库101中存储的被调用模块的模块信息,搜索到某一模块的模块信息中也包括与功能信息中API实现的功能相同的API实现的功能“播放频道”,由于该API实现的功能所对应的API的名称为“Play Channel ”,故搜索单元104确定了被调用模块。在实际生成功能模块的过程中,被调用模块可以有输入参数和返回值,也可以只有输入参数或只有返回值,还可以既没有输入参数也没有返回值;因此,本实施例中,对于不同的情况,功能信息所包括的内容、被调用模块的模块信息所包括的内容也有所不同。具体地, 若被调用模块有输入参数,则所述被调用模块的模块信息还包括API的形参信息;所述功能信息还包括API的形参信息与功能名称的对应关系。所述API的形参信息包括API的形参的参数名、参数类型及参数含义。所述API的形参信息与功能名称的对应关系具体是指所述功能名称中的部分字符串与API的形参的参数名之间的对应关系。举例来说被调用模块的API名称为“Play_Channel”其形参信息包括形参参数名“ch_name”,参数类型char*,参数含义待播放的频道名;而功能名称为“播放频道字符串”,则“字符串”与形参参数名“ch_name”对应。若被调用模块有返回值,则所述被调用模块的模块信息还包括API的返回值信息;所述功能信息还包括=API的返回值信息与API名称的对应关系。所述API的返回值信息包括API的返回值的类型及返回值的含义。所述API的返回值信息与功能名称的对应关系具体是指所述功能名称中的部分字符串与API的返回值之间的对应关系。若被调用模块既有输入参数又有返回值,则所述被调用模块的模块信息还包括API的形参信息和API的返回值信息;所述功能信息还包括API的形参的参数名与功能名称中的一部分字符串之间的对应关系以及API的返回值与功能名称中的另一部分字符串之间的对应关系。举例来说被调用模块的API名称为“GetFileLength”其形参信息包括形参参数名“file_path”,参数类型char*,参数含义文件路径;其返回值信息包括返回值的类型=Iong ;返回值的含义文件大小;而功能名称为“获得路径为路径字符串的文件的大小字符串”,则“路径字符串”与形参参数名“file_path”对应,“大小字符串”与API名称为“GetFileLength”的返回值对应。搜索单元104搜索到被调用模块后,通过生成单元105调用搜索到的被调用模块,以生成功能模块。具体地,通过调用单元1051,将功能模块的需求信息中的实际参数传递至被调用模块,所述调用单元1051分析需求信息中的实际参数与功能名称之间的对应关系,并根据功能信息中功能名称的部分字符串与API的形参的参数名之间的对应关系将所述实际参数传递给被调用模块的API的形参信息中的形参,以实现对被调用模块的调用。调用单元1051调用被调用模块后,实现了功能模块的请求,以生成功能模块。本实施例中,功能模块是通过自然语言字符串进行描述的,为了使得功能模块可以运行在计算机上,通过代码生成单元1052生成功能模块的源代码。所述功能模块的源代码可以是C语言编写,也可以是Java语目编写。此外,本实施例中为了实现不同功能模块的需求信息,所述功能模块的生成工具还包括第一封装单元,用于封装所述资源库中的至少两功能信息;第一存储单元,用于 将所述第一封装单元封装后的功能信息存储至所述资源库中。举例来说,若资源库中存储有被调用模块A和B,其中,与被调用模块A关联的功能信息的功能名称为“播放频道字符串”,与该功能名称对应的API实现的功能为“播放频道”,功能名称中的“字符串”与被调用模块A的API的形参的参数名“ch_name”对应。与被调用模块B关联的功能信息的功能名称为“获得当前播放频道字符串”,与该功能名称对应的API实现的功能为“获得当前播放频道”,功能名称中的“字符串”与被调用模块B的API的返回值“当前播放的频道名”对应。则可以通过第一封装单元将这两个功能信息封装为新的功能信息,封装后的功能信息的功能名称为“播放当前频道”,与该功能名称对应的API实现的功能为“获得当前播放频道字符串”和“播放频道字符串”这两个功能名称。也就是说,本实施例中,当通过第一封装单元将至少两功能信息进行封装后,功能名称对应的API实现的功能可以是被封装的功能信息的功能名称的集合。当功能模块的需求信息与功能名称“播放当前频道”匹配时,功能模块的生成工具可以实现先调用获取当前播放频道模块(功能模块B),再调用播放频道模块(功能模块A)。为了给开发人员提供更大的便利,在其他实施例中,所述功能模块的生成工具还包括第二封装单元,用于为所述生成单元生成的功能模块添加模块信息,以将所述功能模块封装成被调用模块;第二储存单元,用于将所述第二封装单元封装的被调用模块储存至所述资源库中;添加单元,用于基于所述第二封装单元封装的被调用模块生成功能信息并将所述生成的功能信息储存至所述资源库中。所述第二封装单元为功能模块添加的模块信息至少包括该功能模块实现的功能,功能模块实现的功能具体指API实现的功能;所述添加单元添加的功能信息包括关联于该功能模块的功能名称及其对应的API实现的功能。对于不同的功能模块,第二封装单元添加的模块信息、添加单元添加的功能信息也有所不同,具体地,若功能模块有输入参数,所述第二封装单元添加的模块信息还包括API的形参信息;所述添加单元添加的功能信息还包括=API的形参信息与功能名称的对应关系。若功能模块有返回值,所述第二封装单元添加的模块信息还包括:API的返回值信息;所述添加单元添加的功能信息还包括=API的返回值信息与功能名称的对应关系。若功能模块既有输入参数又有返回值,所述第二封装单元添加的模块信息还包括API的形参信息和API的返回值信息;所述添加单元添加的功能信息还包括API的形参信息与功能名称的对应关系以及API的返回值信息与功能名称的对应关系。需要说明的是,功能名称及其对应实现的功能与功能模块可以是一对一关联,也可以是一对多关联。具体地,关联于功能模块A的功能名称及其对应的API实现的功能与关联于功能模块B的功能名称及其对应的API实现的功能是相同的,而功能模块A和功能模块B自身可能不同(模块信息不同,模块的源代码也不同),以关联于功能模块A的功能名称及其对应的API实现的功能已经写入资源库为例如果是一对一关联,则可以直接在资源库中复制关联于功能模块A的功能名称及其对应的API实现的功能,将复制的功能名称及其对应的API实现的功能作为关联于功能模块B的功能名称及其对应的API实现的功能;如果是一对多关联,则无需再向资源库写入关联于功能模块B的功能名称及其对应的API实现的功能,通过资源库中该功能名称及其对应实现的功能既可以搜索到功能模块A(被调用模块A)也可以搜索到功能模块B (被调用模块B),这样也提高了功能模块的开发效率。而对于功能名称及其对应实现的功能与功能模块为一对多关联的情况,实际调用功能模块的过程中,若搜索单元既搜索到了功能模块A又搜索到了功能模块B (功能模块A的功能与功能模块B的功能相同),调用单元具体调用哪个功能模块,则可以通过以下方式确定
一般来讲,实际开发过程中,一个项目通常包括若干个功能模块,且各个功能模块的功能均不相同。通过所有的功能模块的配合来实现该项目的任务。举例来说,项目P包括了功能模块A、功能模块C、功能模块D和功能模块E,在生成功能模块C的过程中,根据其需求信息搜索单元在资源库中搜索到功能模块A (被调用模块A)和功能模块B (被调用模块B),由于功能模块A属于项目P,因此,调用单元调用功能模块A(被调用模块A)以生成功能模块C。也就是说,若在项目的开发过程中,功能模块的生成工具根据该项目中功能模块的需求信息搜索到了多个功能模块(被调用模块),如果项目中包含了搜索到的功能模块(被调用模块),则调用单元调用项目中包含的功能模块(被调用模块)。若项目P包括了功能模块C、功能模块D、功能模块E和功能模块F,在生成功能模块C的过程中,根据其需求信息搜索单元在资源库中搜索到功能模块A (被调用模块A)和功能模块B (被调用模块B),而项目P并未包含功能模块A或功能模块B,此时,调用单元随机调用功能模块A (被调用模块A)或功能模块B (被调用模块B)以生成功能模块C。也就是说,若在项目的开发过程中,功能模块的生成工具根据该项目中功能模块的需求信息搜索到了多个功能模块(被调用模块),如果项目中未包含搜索到的功能模块(被调用模块),则调用单元随机调用搜索到的功能模块(被调用模块)。此外,当被调用模块更新时,其功能名称及与该功能名称对应的API实现的功能可以不变,从而可以保持对更新前的被调用模块的的兼容性。或者说,虽然被调用模块已经更新,但是功能信息中包含了未更新前的信息,这样功能模块也可以不用修改需求信息,当需求信息和功能名称匹配后,仍然可以由搜索单元搜索到更新后的被调用模块,进而实现对其的调用。为了更好地说明本发明的技术方案,以下通过实际的例子对功能模块的生成工具生成功能模块的过程进行相应的说明。实例一本例中,资源库中存储有播放频道模块,其模块信息如下API 名称Play_Channel ;API实现的功能播放频道;
API的形参信息char*ch_name (参数类型和参数名);待播放的频道名(参数含义);资源库中存储的功能信息如下功能名称播放频道字符串;API实现的功能播放频道;API的形参参数名与功能名称的对应关系形参参数名“ch_name”与“字符串”对应;本例中,获取单元获取功能模块的需求信息“播放频道CCTV”,匹配单元将所述需 求信息“播放频道CCTV”与资源库中存储的功能名称进行匹配,搜索到功能名称“播放频道字符串”与“播放频道CCTV”匹配。而“播放频道字符串”对应的API实现的功能为“播放频道”,搜索单元依据匹配单元匹配到的功能名称“播放频道字符串”所对应的API实现的功能“播放频道”搜索资源库中存储的被调用模块的模块信息,搜索到播放频道模块的模块信息中也包括与功能信息中API实现的功能相同的API实现的功能“播放频道”,由于该API实现的功能所对应的API的名称为“Play_Channel”,故搜索单元确定了被调用模块为播放频道模块。调用单元,分析功能模块的需求信息“播放频道CCTV”与功能名称“播放频道字符串”之间的对应关系,获得实际参数“ CCTV”对应了 “字符串”。而由功能信息中功能名称与API的形参信息之间的对应关系可以知道功能名称中的“字符串”对应了 API形参的参数名“ch_name”,因此,将实际参数CCTV传递给API的形参,即ch_name=CCTV,以调用播放频道模块。调用单元实现对播放频道模块的调用后,代码生成单元则可以基于所述调用结果,生成功能模块的源代码。实例二本例中,以基于文件系统例如FAT32或NTFS开发文本编辑工具记事本为例进行说明。记事本开发过程中需要将文本文件的内容读入内存缓冲,为了便于说明,此处将将文本文件的内容读入内存缓冲称为ReadTextFile模块,该模块的模块信息包括如下步骤定义数据名称为file_length,类型为int ;定义指针名称为p_buffer,类型为char ;获得文件file_path的大小file_length ;//需求信息,其中参数f ile_path是文件路径为p_buffer申请大小为file_length的内存;将文件file_path中大小为file_length的数据读入p_buffer ;返回p_buffer ;资源库中存储有获得文件大小模块,其模块信息如下API 名称GetFileLength ;API实现的功能获得文件大小;API的形参信息char*file_path (参数类型和参数名);文件路径(参数含义);API的返回值信息long (返回值的类型);文件大小(返回值的含义);资源库中存储的功能信息如下功能名称获得路径为路径字符串的文件的大小字符串;
API实现的功能获得文件大小;API的形参参数名与功能名称的对应关系形参参数名“file_path”与“路径字符串”对应;API的返回值与功能名称的对应关系API名称为“GetFileLength”的返回值与“大小字符串”对应;本例中,获取单元获取ReadTextFile模块(功能模块)的需求信息“获得文件路径为D: \123的文件的大小file_length”,匹配单元将所述需求信息“获得文件路径为D: \123的文件的大小file_length”与资源库中存储的功能名称进行匹配,搜索到功能名称“获得路径为路径字符串的文件的大小字符串”与“获得文件路径为D:\123的文件的大小file_length”匹配。而“获得路径为路径字符串的文件的大小字符串”对应的API实现的功能为“获得文件大小”,搜索单元依据匹配单元匹配到的功能名称“获得路径为路径字符串的文件的大小字符串”所对应的API实现的功能“获得文件大小”搜索资源库中存储的被调用模块的模块信息,搜索到获得文件大小模块的模块信息中也包括与功能信息中API实现的功能相同的API实现的功能“获得文件大小”,由于该API实现的功能所对应的API名称为·“GetFileLength”,故搜索单元确定了被调用模块为获得文件大小模块。调用单元,分析功能模块的需求信息“获得文件路径为D:\123的文件的大小f ile_length”与功能名称“获得路径为路径字符串的文件大小字符串”之间的对应关系,获得实际参数“D:\123”对应“路径字符串”,file_length对应GetFileLength的返回值。而由功能信息中功能名称与API的形参信息之间的对应关系可以知道功能名称中的“路径字符串”对应了 API形参的参数名“file_path”,因此,将实际参数D:\123传递给API的形参,即file_path=D:\123,以调用获得文件大小模块。将GetFileLength的返回值作为文件大小 file_length,即 file_length=GetFileLength (D:\123)。调用单元实现对获得文件大小模块的调用后,代码生成单元则可以基于所述调用结果,生成ReadTextFile模块的源代码。由实例二可以获知,若文件系统FAT32由A公司开发,文件系统NTFS由B公司开发,记事本由C公司开发。由于C公司在开发记事本的过程中写入的是对文件系统各个模块相关的需求信息,因此,不论是A公司的文件系统升级(如获得文件大小模块升级),还是B公司的文件系统升级,C公司开发的记事本都可以不用修改,且其开发的记事本可以适用于所有的文件系统,C公司的开发人员在开发记事本时,可以不用学习文件系统的API的使用方法(如获得文件大小模块API的使用方法)给开发人员带来了便利,提高了开发效率。综上所述,本发明的技术方案避免了生成功能模块过程中的阻塞现象,简化了功能模块的开发过程,降低了开发过程的繁琐程度,提高了开发功能模块的效率,也减小了开发成本,给开发人员带来了便利。本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
权利要求
1.一种功能模块的生成工具,其特征在于,包括 资源库,用于储存功能信息、被调用模块及其模块信息,所述功能信息包括功能名称及其对应实现的功能,所述被调用模块的模块信息包括所述被调用模块实现的功能; 获取单元,用于获取功能模块的至少一需求信息; 匹配单元,用于获取所述资源库中与所述功能模块的需求信息匹配的功能名称; 搜索单元,用于依据与匹配单元匹配到的功能名称对应的实现的功能搜索所述资源库中被调用模块的模块信息,以确定要调用的被调用模块; 生成单元,用于调用搜索单元搜索到的被调用模块,以生成所述功能模块。
2.如权利要求I所述的功能模块的生成工具,其特征在于,还包括 第一封装单元,用于封装所述资源库中的至少两功能信息; 第一存储单元,用于将所述第一封装单元封装后的功能信息存储至所述资源库中。
3.如权利要求I所述的功能模块的生成工具,其特征在于,还包括 第二封装单元,用于为所述生成单元生成的功能模块添加模块信息,以将所述功能模块封装成被调用模块; 第二储存单元,用于将所述第二封装单元封装的被调用模块储存至所述资源库中; 添加单元,用于基于所述第二封装单元封装的被调用模块生成功能信息并将所述生成的功能信息储存至所述资源库中。
4.如权利要求I所述的功能模块的生成工具,其特征在于,所述被调用模块由API实现,所述被调用模块实现的功能为API实现的功能,所述模块信息还包括API名称;所述功能信息和模块信息均以自然语言字符串描述。
5.如权利要求4所述的功能模块的生成工具,其特征在于,所述模块信息还包括API的形参信息;所述功能信息还包括API的形参信息与功能名称的对应关系。
6.如权利要求4所述的功能模块的生成工具,其特征在于,所述模块信息还包括API的返回值信息;所述功能信息还包括API的返回值信息与功能名称的对应关系。
7.如权利要求4所述的功能模块的生成工具,其特征在于,所述匹配单元采用模糊匹配算法搜索所述资源库。
8.如权利要求4所述的功能模块的生成工具,其特征在于,所述匹配单元基于所述功能模块的需求信息与功能名称之间的关系获取所述资源库中与所述需求信息匹配的功能名称。
9.如权利要求I所述的功能模块的生成工具,其特征在于,所述获取单元包括 输入单元,用于输入生成功能模块的请求; 解析单元,用于解析所述请求,以得到至少一需求信息,所述需求信息包括实际参数。
10.如权利要求9所述的功能模块的生成工具,其特征在于,所述被调用模块由API实现,所述模块信息还包括API的形参信息,所述生成单元包括 调用单元,用于将所述实际参数传递给所述搜索到的被调用模块,以调用该被调用模块; 代码生成单元,用于基于所述调用结果,生成所述功能模块的源代码。
全文摘要
一种功能模块的生成工具,包括资源库,用于储存功能信息、被调用模块及其模块信息,所述功能信息包括功能名称及其对应实现的功能,所述被调用模块的模块信息包括所述被调用模块实现的功能;获取单元,用于获取功能模块的至少一需求信息;匹配单元,用于获取所述资源库中与所述功能模块的需求信息匹配的功能名称;搜索单元,用于依据与匹配单元匹配到的功能名称对应的实现的功能搜索所述资源库中被调用模块的模块信息,以确定要调用的被调用模块;生成单元,用于调用搜索单元搜索到的被调用模块,以生成所述功能模块。本发明技术方案的功能模块的生成工具可以防止功能模块开发过程中出现阻塞现象和开发成本的增加,给开发人员提供了便利。
文档编号G06F9/44GK102750144SQ20121017806
公开日2012年10月24日 申请日期2012年5月31日 优先权日2012年5月31日
发明者付晶, 李知伟, 王岩峰, 董琦, 靳文辉 申请人:华亚微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1