一种基于代码变更的软件模型同步方法

文档序号:6402176阅读:155来源:国知局
专利名称:一种基于代码变更的软件模型同步方法
技术领域
本发明涉及对过期的软件模型与新代码进行同步的方法,属于软件工程、模型驱动工程交叉技术领域。
背景技术
模型驱动工程是以模型为主要产品,试图通过建立模型来明确软件开发的内容,是近年来软件工程发展的重要课题。模型用建模语言来表示,能够描述软件却高于软件,是一种描述设计、指导软件开发的中间产物。标准的软件开发流程包括需求分析、模型设计、代码编写以及测试部署这些步骤。其中模型设计不但承接了需求分析中的各种要素,而且还是后续编写代码软件测试等活动的基准,在整个开发流程中至关重要。软件开发过程中,模型作为设计思路和业务逻辑的抽象,能够指导开发人员之间的交流以及代码的开发和软件的交付。开发人员需要理解模型的含义,然后用程序设计语言表达出模型中的种种信息,模型中的要求和思路都会在代码中得到体现,最终递交的软件和模型是一致的。在证明软件的正确性时,也是通过它和模型的对应关系入手的,能够解决问题的软件系统往往非常复杂,而其模型是某种层次上的抽象,因此在企业的实际开发和测试中,可以通过证明模型的正确性以及模型与软件系统的对应关系来证明软件的正确性。软件开发完成后,并不是一成不变的。在实际的使用和生产环境中,软件往往会因为多种原因,如使用场景变化、用户要求、性能优化、错误排除,由开发人员进行维护。这个维护过程中,软件会进行不断演化,代码会经过诸多修改而变成新的东西,而模型可能会被忽视。多个版本之后代码与最初的代码有了很大的变化,与最初的模型也无法对应,这时如果需要模型来完成相关工作,就会遇到模型与代码的不一致问题。这种不一致问题会导致模型过期,那么与模型相关的一系列软件开发行为就无法正常进行。在实际开发环境中,往往由一组开发人员进行协作完成代码和相关的开发任务,代码通过多次迭代开发最终成型。在整个开发过程中,代码由代码管理系统来进行管理,提供版本控制、冲突检查、代码分发、子版本管理、变更检测等多种功能。每个代码单元(比如源代码文件)从无到有的各个状态都由这个系统统一管理,如果需要源代码文件的历史版本、演化轨迹,都可以向代码管理系统发出请求。

发明内容
技术问题:本发明的目的是处理代码演化过程中软件模型同步方法,以旧代码以及旧模型为基准,通过分析新代码与旧代码的变更内容,并自动识别旧代码和旧模型之间的关系,对旧模型进行修改和更新,得到与新代码相匹配的新模型。技术方案:本发明所述基于代码变更的软件模型同步方法采用代码变更分析技术来比较代码之间的差别,利用代码检索技术自动将为软件模型和代码建立联系,通过软件模型所适用的规则集,逐个处理代码变更,并对模型进行自动或半自动更新。本发明所述软件模型是对软件实体进行简化,用适当的变现形式或规则把它的主要特征描述出来。本发明所述软件模型所适用的规则集包括一系列规则,每一个规则给出模型中的元素和标准代码中的元素关系,该规则和标准代码由开发人员预先定义。步骤1、代码变更分析从有变化的代码中,将非实质变更、非本质变更、非相关变更的代码过滤出去,获得软件模型相关的变更代码,所述非实质变更是指在不断演化过程中,开发人员可能会引入一些格式的调整,比如空白字符、空行,这些变更只是改变代码文件的存储内容,没有改变根据代码所得到的软件行为和结构,所述非本质变更是指在代码语法和语义约束下,程序代码内容改变,但根据代码所得到的软件在行为和结构上保持不变,所述非相关变更是指变更发生在与模型无关的代码片段,但不在模型所关注的范围内;步骤2、模型代码匹配给定软件模型,根据模型的类型和元素的名称,对模型与软件模型相关的变更代码进行匹配,建立模型中的元素与代码中的元素之间的对应关系,具体匹配过程如下:·
步骤2.1:读入软件模型,读入软件模型所适用的规则集;步骤2.2:读入软件模型相关的变更代码;步骤2.3:确定模型中需要对应的元素,逐个根据模型所适用的规则在软件模型相关的变更代码中进行搜索,找到可能与之相联系的代码片段,并给出可信度,根据预设定的可信度阈值决定立即匹配或是交由开发人员确认;步骤2.4:将所获得的模型中的元素与代码中的元素之间的对应关系信息加入代码库中;步骤3、代码变更处理将得到的代码变更信息、模型中的元素与代码中的元素之间的对应关系翻译为更新操作,产生新模型,具有步骤为:步骤3.1:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已修改的变更代码,修改对应的模型元素;步骤3.2:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已删除的变更代码,移除对应的模型元素;步骤3.3:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已新增的变更代码,判断是否需要在模型中新增新的元素,如果是,则在模型中新增新的元素。步骤I中所述非实质变更是指在不断演化过程中,开发人员可能会引入一些格式的调整,这些变更没有改变根据代码所得到的软件行为和结构。步骤I中所述非本质变更是指在语法和语义约束下,代码内容改变,但根据代码所得到的软件在行为和结构上保持不变。
步骤I中所述非相关变更是指变更发生在与模型无关的代码片段,但不在模型所关注的范围内。有益效果:本发明所述的基于代码变更的软件模型同步方法中,相关功能可以集成在代码版本管理系统中,能够自动判断代码的差异,确定如何修改模型,对于模棱两可的情况会向开发人员请求人工干预。具体说来,本发明所述的方法具有如下有益效果:(I)在本发明所述的基于代码变更的软件模型同步方法中,代码的差异是通过自动分析出来的,并且能够根据预先设定的规则过滤不相关的变更差异,减轻开发人员的负担。(2)在本发明所述的基于代码变更的软件模型同步方法中,模型与代码比较采用启发式模糊匹配,对于不确定的情况会经过人工确认,既保证了正确性又减轻工作量。(3)在本发明所述的基于代码变更的软件模型同步方法中,模型在修改之后会与代码进行校验,以确保模型与代码的一致性。(4)在本发明所述的基于代码变更的软件模型同步方法中,模型与代码的定义规则比较灵活,等够适应不同的复杂系统以及用户需求的变化。


图1是基于代码变更的软件模型同步方法具体实施流程示意图。图2是代码变更示意图。图3是代码变更分析流程示意图。图4是代码与模型对应示意图。图5是开发人员在方法中所扮演角色的示意图。
具体实施例方式本发明所述的基于代码变更的软件模型同步方法具体实施中,首先需要现有的软件模型以及与软件模型相对应的软件代码,可以通过版本控制系统管理同一代码单元的不同版本。本发明根据规则集解析不同的软件模型,可以采用代码检索技术,结合启发式信息,将模型中的元素与代码中的元素之间建立起对应的对应关系。对不同版本的代码进行比较,过滤出较为重要的变更,根据软件模型所适用的规则集,决定如何修改、删除和新增模型,并进行最终更新模型。本发明所述的基于代码变更的软件模型同步方法具体实施流程如图1所示。下面对附图本发明的某些实施例作更详细的描述。1、代码变更分析本发明所述的基于代码变更的软件模型同步方法具体实施中,需要对新旧两个版本的代码进行分析,因为其中的差别就是造成了旧版软件模型与新版代码不一致的因素。在具体实施中,需要准确地弄清楚到底应该将那些变更反映在原来的软件模型中。图2是代码变更示意图,原始代码(图2左)与变更代码(图2右)之间进行存在差异,在具体实施中,可以定制编译器,处理代码的新旧版本,生成特定的代码表示,以过滤一些不需要关心的代码变更,如图3所示。这些不需要关心的代码变更`主要包括非实质代码变更、非本质代码变更、非相关代码变更等三种。
(I)非实质代码变更代码在不断演化过程中,开发人员可能会引入一些格式的调整,比如空白字符、空行,这些变更固然改变了代码文件的存储内容,但是并不能算作真正的代码变更,因为根据代码所得到的软件无论在行为上还是结构上都保持不变,说明这些代码变更没有造成实质上的变化。在对旧版模型进行更新的时候,完全不必考虑此类变更,因此需要在具体实施中将这种变更过滤出去。(2)非本质代码变更代码都是用编程语言来写的,遵照一定的语法和语义。在这种约束下,除了非实质代码变更,还有一些虽然改变了程序的代码内容,但根据代码所得到的软件在行为和结构上仍然保持不变。这是因为程序语言在设计过程中,为了使用方便,往往会为同一种含义加入多种表达方式,比如通常的程序设计语言对于循环会有while组合句和for组合句这两种。那么如果代码中的while完全可能被改成for语句,而代码在本质上并没有语义变化。这种变更也不会影响模型的更新,所以在具体实施中也应该被过滤。
(3)非相关代码变更代码是根据模型编写的,有些代码直接反应了模型中某个组件的语义,有些代码则是对模型更进一步的细化和对平台的适应。如果代码变更发生在与模型无关的代码片段,那么这些变更虽然在本质上改变了软件的行为或者结构,但其具体变更并不在模型所关注的范围内,因此这一类变更在具体实施中也需要排除在外。代码变更分析是对代码进行解析并进行比较的过程,在具体实施时需要手动修改编译器的前段,加入自定义的处理规则,以从有变化的代码中将非实质变更、非本质变更、非相关变更的代码过滤出去,获得软件模型相关的变更代码。2、模型代码匹配本发明所述的基于代码变更的软件模型同步方法具体实施中,模型与代码之间有某种对应关系,将模型分成最简单的组件,如图4所示,以统一建模语言中的活动图为例说明,则分为节点和边,其中节点分为很多细类,边也分为带条件和无条件两类,具体实施步骤如下:步骤1:读入活动图模型,读入模型所适用的规则集;步骤2:读入活动图模型相关的变更代码;步骤3:确定活动图模型中需要对应的节点和边等元素,逐个根据规则在代码中进行搜索,找到可能与之相联系的代码片段,并给出可信度,根据预设定的可信度阈值决定立即匹配或是交由开发人员确认。步骤4:将所获得的对应信息加入代码库中。3、代码变更处理代码变更得到之后,需要根据这些变更以及模型代码之间的对应关系,决定如何修改、删除和新增模型元素。本发明所述的基于代码变更的软件模型同步方法具体实施中,有些不能确定的情况,如匹配情况,修改确认,需要人工干预,如图5所示。
权利要求
1.一种基于代码变更的软件模型同步方法,其特征在于该方法所包含的步骤为: 步骤1、代码变更分析 从有变化的代码中,将非实质变更、非本质变更、非相关变更的代码过滤出去,获得软件模型相关的变更代码, 所述非实质变更是指在不断演化过程中,开发人员可能会引入一些格式的调整,比如空白字符、空行,这些变更只是改变代码文件的存储内容,没有改变根据代码所得到的软件行为和结构, 所述非本质变更是指在代码语法和语义约束下,程序代码内容改变,但根据代码所得到的软件在行为和结构上保持不变, 所述非相关变更是指变更发生在与模型无关的代码片段,但不在模型所关注的范围内; 步骤2、模型代码匹配 给定软件模型,根据模型的类型和元素的名称,对模型与软件模型相关的变更代码进行匹配,建立模型中的元素与代码中的元素之间的对应关系,具体匹配过程如下: 步骤2.1:读入软件模型,读入软件模型所适用的规则集; 步骤2.2:读入软件模型相关的变更代码; 步骤2.3:确定模型中需要对应的元素,逐个根据模型所适用的规则在软件模型相关的变更代码中进行搜索,找到可能与之相联系的代码片段,并给出可信度,根据预设定的可信度阈值决定立即匹配 或是交由开发人员确认; 步骤2.4:将所获得的模型中的元素与代码中的元素之间的对应关系信息加入代码库中; 步骤3、代码变更处理 将得到的代码变更信息、模型中的元素与代码中的元素之间的对应关系翻译为更新操作,产生新模型,具有步骤为: 步骤3.1:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已修改的变更代码,修改对应的模型元素; 步骤3.2:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已删除的变更代码,移除对应的模型元素; 步骤3.3:根据软件模型所适用的规则、模型中的元素与代码中的元素之间的对应关系、已新增的变更代码,判断是否需要在模型中新增新的元素,如果是,则在模型中新增新的元素。
2.根据权利要求1所述的一种基于代码变更的软件模型同步方法,其特征在于步骤I中所述非实质变更是指在不断演化过程中,引入一些格式的调整,这些变更没有改变根据代码所得到的软件行为和结构。
3.根据权利要求1所述的一种基于代码变更的软件模型同步方法,其特征在于步骤I中所述非本质变更是指在语法和语义约束下,代码内容改变,但根据代码所得到的软件在行为和结构上保持不变。
4.根据权利要求1所述的一种基于代码变更的软件模型同步方法,其特征在于步骤I中所述非相关变更是指变更发生在与模型无关的代码片段,但不在模型所关注的范围内。
全文摘要
本发明提出的一种基于代码变更的软件模型同步方法,该方法从有变化的代码中将非实质变更、非本质变更、非相关变更的代码过滤出去,获得软件模型相关的变更代码,对软件模型与其相关的变更代码进行匹配,建立模型中的元素与代码中的元素之间的对应关系,将得到的代码变更信息、模型中的元素与代码中的元素之间的对应关系翻译为更新操作,产生新模型,实现模型同步。本发明可以集成在代码版本管理系统中,能够通过预定义规则,对软件模型进行自动或半自动更新,保证软件模型与代码的一致性。
文档编号G06F9/445GK103235729SQ20131013585
公开日2013年8月7日 申请日期2013年4月18日 优先权日2013年4月18日
发明者王林章, 李袁奎, 李宣东, 陈志 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1