具体实施方式
下面将参照附图更加详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
代码,即code,其是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。软件系统的功能均需要依赖代码实现,因此代码编写是软件项目的重要组成部分。
软件项目是指基于用户需求设定的构建软件系统的项目。当新的待开发软件项目被立项后,需要梳理统计出项目需求,并将项目需求分发给对应的程序员。待程序员接收到项目需求时,编写具有项目需求所需功能的代码,以利用所编写的代码实现项目需求。
目前,新的待开发软件项目被立项后,软件项目的程序员均需要根据被分配的项目需求,重头构思和编写具有项目需求所需功能的代码。现有的这种方式,即使程序员拥有编写相同功能的代码的经验,其也需要付出大量的时间去编写、审查和测试代码,因此严重的影响了软件项目的研发效率。
本发明实施例提供了一种代码合入方法和装置,以在新的待开发软件项目立项之后,直接根据软件项目的需求涉及的功能模块,直接调取预设代码库中已存在的代码,实现代码复用,从而降低程序员的重复工作量,进而提高软件项目的开发效率。下面对本发明实施例提供的代码合入方法和装置进行具体说明。
如图1所示,本发明实施例提供了一种代码合入方法,该方法主要包括:
101、确定待开发软件项目的目标需求项涉及的功能模块,其中,所述目标需求项涉及的功能模块用于实现所述目标需求项对应的需求。
在实际应用中,任意一个基于用户需求设定的构建软件系统的新立项的项目,均可作为待开发软件项目。待开发软件项目会存在有多个需求,这些需求均是基于立项时用户需求而定的,其中,一个需求即为一个需求项。每一个需求项均会涉及一个或多个功能模块,通过其所涉及的功能模块来实现其对应的需求,也就是说,需求项涉及的功能模块用于实现需求项对应的需求。
为了避免待开发软件项目的各需求项的代码出现混乱,则在进行代码合入操作时,需要对各需求项分别单独进行。因此可依次将待开发软件项目的各需求项作为目标需求项。
待目标需求项选定后,需要确定目标需求项涉及的功能模块,以基于所确定的功能模块,提取可复用的代码。下面对确定待开发软件项目的目标需求项涉及的功能模块的具体方法进行说明,该方法至少包括如下两种:
第一种,获取待开发软件项目的项目需求表,从项目需求表中提取目标需求项涉及的功能模块。
项目需求表是待开发软件项目立项时,基于立项文件梳理而得,其记载有待开发软件项目所涉及的全部需求项,以及每一个需求项涉及的全部功能模块。
示例性的,项目需求表中包括需求项“无线功能需求”,“无线功能需求”对应功能模块1、功能模块2以及功能模块3,则从项目需求表中提取目标需求项“无线功能需求”涉及的功能模块包括“功能模块1、功能模块2以及功能模块3”。
第二种,在获取到目标需求项对应的目标代码库的目标地址时,通过预设交互界面展示预设代码库中所涉及的功能模块的名称。将被选中的名称对应的功能模块,确定为目标需求项涉及的功能模块。
目标需求项存在有其对应的目标代码库,目标代码库用于存储目标需求项所有功能模块对应的代码。目标代码库存在有对应的目标地址,根据该目标地址可向目标代码库合入代码。
在获取到目标需求项对应的目标代码库的目标地址时,说明存在向目标代码库合入代码的需求,因此通过预设交互界面展示预设代码库中所涉及的功能模块的名称,以供程序员选用其需要复用代码的功能模块。
通过预设交互界面展示预设代码库中所涉及的功能模块的名称,使得程序员可以更为方便和直观的选取目标需求项涉及的功能模块。当程序员选中一个或多个名称时,将被选中的名称对应的功能模块,确定为目标需求项涉及的功能模块。
102、从预设代码库的样本代码中选取与所述功能模块对应的目标代码,其中,所述预设代码库中存储有多个样本代码,各样本代码均具有其各自对应的功能模块。
预设代码库中存储有多个样本代码,且每一个样本代码均具有其各自对应的功能模块。每一个样本代码均能够成功实现其对应的功能模块所涉及的功能。预设代码库中的样本代码基于已开发软件项目的历史代码而得。预设代码库的设置目的在于,在新的待开发软件项目立项之后,直接根据待开发软件项目的目标需求项涉及的功能模块,直接调取预设代码库中已存在的代码,实现代码复用,从而降低程序员的重复工作量,进而提高软件项目的开发效率。
下面对从预设代码库中选取与目标需求项涉及的功能模块对应的目标代码的具体过程进行说明,该过程至少存在如下两种情况:
第一种情况,功能模块不存在编程语言需求的场景下,从预设代码库中选取与所述功能模块对应的目标代码的过程包括如下步骤一至步骤四:
步骤一,在预设代码库中查找对应于目标需求项涉及的功能模块的样本代码,根据查找结果执行步骤二或步骤三。
预设代码库中的样本代码与功能模块之间存在对应关系。在确定目标需求项涉及的功能模块后,需要查找所确定的功能模块是否在所述预设代码库中存在。若存在则可根据上述的对应关系查找到与所确定的功能模块对应的样本代码,故执行步骤二或步骤三。若不存在,则说明所确定的功能模块可能为新的功能模块,其并无样本代码可用,需要程序员针对其进行代码编写工作,故执行步骤四。
步骤二,在所述预设代码库中存在与所述功能模块对应的样本代码,且所述功能模块对应的样本代码存在至少两个版本时,从所述至少两个版本中选取与所述功能模块对应的目标代码,并结束当前流程。
在功能模块对应的样本代码存在至少两个版本时,需要从这些版本中选取与功能模块对应的目标代码。下面对从所述至少两个版本中选取与所述功能模块对应的目标代码的方法进行说明,该方法包括如下两种:
一是,将最新版本的样本代码选取为所述功能模块对应的目标代码。
最新版本的样本代码为最新更新后的代码,其可能更符合功能模块的功能需求,因此将最新版本的样本代码选取为功能模块对应的目标代码。
二是,在所述预设代码库中存在与所述功能模块对应的样本代码,且所述功能模块对应的样本代码存在至少两个版本时,发出版本选择提示。在所述版本选择提示下,当至少一个版本的样本代码被选中时,将被选中的版本的样本代码选取为所述功能模块对应的目标代码。
不同版本的样本代码具有不同的编写侧重点,因此功能模块对应的样本代码存在至少两个版本时,发出版本选择提示,以供程序员选取满足其需求的版本对应的样本代码。
在版本选择提示下,当至少一个版本的样本代码被选中时,则说明程序员选取满足其需求的版本,则将被选中的版本的样本代码选取为所述功能模块对应的目标代码。
步骤三,在所述预设代码库中存在与所述功能模块对应的样本代码,且所述功能模块对应的样本代码存在一个版本时,直接将该版本的样本代码选取为所述功能模块对应的目标代码。
步骤四,在所述预设代码库中不存在与所述功能模块对应的样本代码时,发出针对所述功能模块的代码合入失败提示。
在预设代码库中不存在与所述功能模块对应的样本代码时,说明功能模块可能为新的功能模块,其并无样本代码可用,需要程序员针对其进行代码编写工作,因此发出针对功能模块的代码合入失败提示,以使程序员基于该提示启动后续的代码编写工作。
第二种情况,功能模块存在编程语言需求的场景下,从预设代码库中选取与所述功能模块对应的目标代码的过程包括如下步骤一至步骤五:
步骤一,在预设代码库中查找与对应于目标需求项涉及的功能模块的样本代码,根据查找结果执行步骤二或步骤六。
步骤二,在所述预设代码库中存在与所述功能模块对应的样本代码时,检测所述功能模块对应的样本代码的编程语言是否与所述功能模块需求的编程语言相同。若相同,执行步骤三或步骤四;若不同,执行步骤五。
在功能模块存在编程语言需求的场景下,为了保证功能模块对应的样本代码在待开发软件项目下可用,则需要检测功能模块对应的样本代码的编程语言是否与功能模块需求的编程语言相同。
步骤三,若所述功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言相同,且所述功能模块对应的样本代码存在一个版本时,将所述功能模块对应的样本代码选取为所述功能模块对应的目标代码,并结束当前流程。
若功能模块对应的样本代码的编程语言与功能模块需求的编程语言相同,则说明功能模块对应的样本代码在待开发软件项目下可用。在功能模块对应的样本代码存在一个版本的情况下,将功能模块对应的样本代码选取为功能模块对应的目标代码即可。
步骤四,若所述功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言相同,且所述功能模块对应的样本代码存在至少两个版本时,从所述至少两个版本中选取与所述功能模块对应的目标代码,并结束当前流程。
功能模块对应的样本代码的编程语言与功能模块需求的编程语言相同,则说明功能模块对应的样本代码在待开发软件项目下可用。在功能模块对应的样本代码存在至少两个版本的情况下,需要从至少两个版本中选取与功能模块对应的目标代码,该选取方法与上述第一种情况中的步骤二下的具体详解基于相同,因此这里不再赘述。
步骤五,若所述功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言不同,发出针对所述功能模块的代码合入失败提示,并结束当前流程。
功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言不同,说明功能模块对应的样本代码在待开发软件项目下不可用,因此发出针对功能模块的代码合入失败提示,以使程序员基于该提示启动后续的代码编写工作。
步骤六,在所述预设代码库中不存在与所述功能模块对应的样本代码时,发出针对所述功能模块的代码合入失败提示。
在预设代码库中不存在与所述功能模块对应的样本代码时,说明功能模块可能为新的功能模块,其并无样本代码可用,需要程序员针对其进行代码编写工作,因此发出针对功能模块的代码合入失败提示,以使程序员基于该提示启动后续的代码编写工作。
103、将所述目标代码合入所述目标需求项对应的目标代码库中。
为了便于对目标需求项的代码进行统一管理,为目标需求项设置目标代码库。目标代码库用于存储目标需求项所涉及的所有功能模块的代码,因此将功能模块对应的目标代码合入目标代码库中,以供程序员调取目标代码,对目标代码进行与目标需求项相关的改写或测试操作。
需要说明的是,在将目标代码合入目标代码库中时,需要建立目标代码与功能模块的对应关系,以便程序员根据该对应关系,调取目标代码。
本发明实施例提供的代码合入方法,当需要对待开发软件项目的目标需求项进行代码合入处理时,确定目标需求项涉及的功能模块。然后从预设代码库存储的样本代码中选取与功能模块对应的目标代码。最后将选取的目标代码合入目标需求项对应的目标代码库中。可见,本发明实施例提供的方案能够直接根据软件项目的需求项涉及的功能模块,直接调取预设代码库中已存在的代码,实现代码复用,从而降低程序员的代码编写的工作量,进而提高软件项目的开发效率。
进一步的,根据图1所示的方法,本发明的另一个实施例还提供了一种代码合入方法,如图2所示,该方法主要包括:
201、获取已开发软件项目的历史代码,其中,所述历史代码为能够成功实现对应功能的代码。
已开发软件项目的历史代码是预设代码库中样本代码的来源。历史代码为能够成功实现对应功能的代码,其添加到预设代码库中可进行复用。
需要说明的是,为了丰富预设代码库中的样本代码,一旦已开发软件项目存在历史代码时,即可获取该历史代码,对历史代码进行添加到预设代码库的处理。
202、基于所述历史代码的功能描述信息的解析结果,确定所述历史代码对应的功能模块,执行步骤203或步骤204。
历史代码的功能描述信息主要用于描述其功能,因此可基于历史代码功能描述信息的解析结果,确定历史代码对应的功能模块。功能描述信息的解析过程为:提取功能描述信息中的关键字,基于关键字确定历史代码对应的功能模块。示例性的,功能描述信息中的关键字包括密码验证,则确定历史代码对应的功能模块为密码验证功能模块。
203、在所确定的功能模块在所述预设代码库中不存在对应的样本代码时,将历史代码作为样本代码建立与所确定的功能模块之间的对应关系,并执行步骤208。
在所确定的功能模块在预设代码库中不存在对应的样本代码时,则说明该功能模块目前无可复用的代码,为了后续针对该功能模块有代码可复用,则将历史代码作为样本代码建立与所确定的功能模块之间的对应关系,以便于将历史代码作为样本代码添加到预设代码库中。
204、在所确定的功能模块在所述预设代码库中已存在对应的样本代码时,判断所述历史代码是否为已存在的样本代码的新版本,若是执行步骤205;否则执行步骤206或207。
205、若所述历史代码为已存在的样本代码的新版本,为所述历史代码标注版本信息,将标注版本信息的历史代码作为样本代码建立与所确定的功能模块之间的对应关系,并执行步骤208。
由于不同版本的代码可能具有不同的编写侧重点,因此在历史代码为已存在的样本代码的新版本的情况下,为历史代码标注版本信息,将标注版本信息的历史代码作为样本代码建立与所确定的功能模块之间的对应关系,以便预设代码库中该功能模块可以存在多个版本的样本代码以供复用。
206、若所述历史代码不是已存在的样本代码的新版本,但所述历史代码与已存在的样本代码的版本相同,则剔除历史代码,并结束当前流程。
在历史代码与已存在的样本代码的版本相同的情况下,说明该样本代码已在预设代码库中存在,无需在将其添加到预设代码库,因此直接将其剔除即可。
207、若所述历史代码不是已存在的样本代码的新版本,且所述历史代码与已存在的样本代码的版本不同,发出针对所述历史代码的功能确定提示,并结束当前流程。
在历史代码不是已存在的样本代码的新版本,则说明功能模块确定可能存在异常,需要发出针对所述历史代码的功能确定提示,以便程序员对历史代码对应的功能模块进行复核和更正。
208、将建立对应关系的样本代码和功能模块添加至所述预设代码库。
209、确定待开发软件项目的目标需求项涉及的功能模块,其中,所述目标需求项涉及的功能模块用于实现所述目标需求项对应的需求。
210、从预设代码库的样本代码中选取与所述功能模块对应的目标代码,其中,所述预设代码库中存储有多个样本代码,各样本代码均具有其各自对应的功能模块。
211、将所述目标代码合入所述目标需求项对应的目标代码库中。
进一步的,依据上述方法实施例,本发明的另一个实施例还提供了一种代码合入装置,如图3所示,所述装置包括:
确定单元31,用于确定待开发软件项目的目标需求项涉及的功能模块,其中,所述目标需求项涉及的功能模块用于实现所述目标需求项对应的需求;
选取单元32,用于从预设代码库的样本代码中选取与所述功能模块对应的目标代码,其中,所述预设代码库中存储有多个样本代码,各样本代码均具有其各自对应的功能模块;
合入单元33,用于将所述目标代码合入所述目标需求项对应的目标代码库中。
本发明实施例提供的代码合入装置,当需要对待开发软件项目的目标需求项进行代码合入处理时,确定目标需求项涉及的功能模块。然后从预设代码库存储的样本代码中选取与功能模块对应的目标代码。最后将选取的目标代码合入目标需求项对应的目标代码库中。可见,本发明实施例提供的方案能够直接根据软件项目的需求项涉及的功能模块,直接调取预设代码库中已存在的代码,实现代码复用,从而降低程序员的代码编写的工作量,进而提高软件项目的开发效率。
可选的,如图4所示,所述确定单元31包括:
展示子单元311,用于在获取到所述目标需求项对应的目标代码库的目标地址时,通过预设交互界面展示所述预设代码库中所涉及的功能模块的名称;
确定子单元312,用于将被选中的名称对应的功能模块,确定为所述目标需求项涉及的功能模块。
可选的,如图4所示,选取单元32包括:
第一选取子单元321,用于在所述预设代码库中存在与所述功能模块对应的样本代码时,检测所述功能模块对应的样本代码的编程语言是否与所述功能模块需求的编程语言相同;若所述功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言相同,将所述功能模块对应的样本代码选取为所述功能模块对应的目标代码。
可选的,如图4所示,选取单元32还包括:
第一提示子单元322,用于若所述功能模块对应的样本代码的编程语言与所述功能模块需求的编程语言不同,发出针对所述功能模块的代码合入失败提示。
可选的,如图4所示,选取单元32包括:
第二选取子单元323,用于在所述预设代码库中存在与所述功能模块对应的样本代码,且所述功能模块对应的样本代码存在至少两个版本时,将最新版本的样本代码选取为所述功能模块对应的目标代码。
可选的,如图4所示,选取单元32包括:
第三选取子单元324,用于在所述预设代码库中存在与所述功能模块对应的样本代码,且所述功能模块对应的样本代码存在至少两个版本时,发出版本选择提示;在所述版本选择提示下,当至少一个版本的样本代码被选中时,将被选中的版本的样本代码选取为所述功能模块对应的目标代码。
可选的,如图4所示,所述装置还包括:
添加单元34,用于获取已开发软件项目的历史代码,其中,所述历史代码为能够成功实现对应功能的代码;基于所述历史代码的功能描述信息的解析结果,确定所述历史代码对应的功能模块;将所述历史代码作为样本代码建立与所确定的功能模块之间的对应关系,并存储至所述预设代码库。
可选的,如图4所示,添加单元34,还用于在所确定的功能模块在所述预设代码库中已存在对应的样本代码时,判断所述历史代码是否为已存在的样本代码的新版本;若所述历史代码为已存在的样本代码的新版本,为所述历史代码标注版本信息,将标注版本信息的历史代码作为样本代码建立与所确定的功能模块之间的对应关系;若所述历史代码不是已存在的样本代码的新版本,发出针对所述历史代码的功能确定提示。
本发明实施例提供的代码合入装置中,各个功能模块运行过程中所采用的方法详解可以参见图1-图2方法实施例的对应方法详解,在此不再赘述。
进一步的,依据上述实施例,本发明的另一个实施例还提供了一种计算机可读存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行图1或图2所述的代码合入方法。
进一步的,依据上述实施例,本发明的另一个实施例还提供了一种存储管理设备,所述存储管理设备包括:
存储器,用于存储程序;
处理器,耦合至所述存储器,用于运行所述程序以执行图1或图2所述的代码合入方法。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的深度神经网络模型的运行方法、装置及框架中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。