专利名称:软件产品线开发中特征可变性的逆向工程分析方法
技术领域:
本发明属于软件开发技术领域,具体涉及领域特征的可变性识别与分析方法。
背景技术:
软件产品线是共享一组受控的公共特征并且在一系列预定义的公共核心资产基 础上开发而成的一系列软件应用系统。这一系列相似的软件应用系统被称为领域,例如电 子商务、电子政务等典型的业务领域。可变性是软件产品线的核心概念,它表示领域内各个 应用系统之间的差异之处。一般而言,可变性由特征描述,转变为系统所包含特征列表的差 异性。特征是用户可见的系统功能与特性,表述了系统被期望实现的功能与品质,因此特征 能够有效地表示领域内的需求,并且作为表达领域内共性与可变性的基本单元。特征的可变性分析是软件产品线领域分析中的关键环节。在正向的产品线领域工 程活动中,特征的建立与可变性识别均是从无到有的过程,这要求领域分析人员能够前摄 式地获取全部领域知识,包括特征所代表的需求在不同应用系统中的存在情况。实践证明, 这是一种理想化的产品线开发模式。其原因在于大多数领域(除去具有固定需求规范的领 域)的范围及其需求变化性难以在需求分析的初期阶段就被确定。因此,现实情况中的软件 产品线更适合于在多个已存在的遗留系统基础上,通过软件产品线改造的手段得来。在此思想的指导下,领域特征的可变性可从各类遗留资产的逆向分析中得来。一 般而言,遗留资产包括各个应用系统的源代码、文档或其他模型、文本等。其中,针对源代码 的逆向分析方法已被研究界广泛关注,主要工作包括基于文本的潜在语义分析方法(LSA) 与代码差异性比较方法。因此,本发明利用半自动的遗留系统代码的逆向分析与人工识别 结果,进一步分析领域特征的可变性。
发明内容
本发明的目的是提供一种半自动的遗留系统代码逆向工程分析方法,辅助支持软 件产品线开发中的特征可变性分析,支持目标领域的产品线改造活动,为其中的领域分析 提供更为准确、全面的特征可变性结论。本发明的核心思想是以遗留系统代码和初始的领域特征列表为基础,通过特征定 位的技术,获取每个特征在不同应用系统中的涵盖情况,由此判定特征在需求层面上的可 变性(特征所代表的需求被全部涵盖或部分涵盖)。另外,通过对相关实现代码的差异性分 析,获取特征在实现层次(特征的实现方式、代码结构等)上的差异性。本发明提出的软件产品线开发中特征可变性的逆向工程分析方法,其流程如图1 所示。该方法的输入包括三个部分
(1)具有产品线改造潜质的多个遗留系统的代码。虽然在单个遗留系统开发过程中不 涉及领域的概念,但软件组织能够根据已有软件的开发目标判断其是否同属于一个领域范 围内。(2)领域特征列表。领域特征列表可作为领域内的通用需求字典,以便统一领域的需求命名与描述。该列表作为本方法的输入,是由领域专家、用户等产品线相关人员通过座 谈、阅读遗留系统文档等方法建立。(3)领域词典。该词典描述了特征在代码级别上的各种同义词。引入领域词典的 原因在于第一,特征以文本的方式描述需求,而不一定符合编程语言的编码规范;第二, 由于遗留系统在开发过程中的无关性,代码在类、方法、参数等命名上可能产生不一致的情 况。因此,领域的同义词词典是执行特征定位的必要前提。另一方面,领域词典可以有不同 的实现方式,这包括以参照表形式存在的词典,每一个特征对应多个代码级别的同义词; WordNet,它是通用的包含语义信息同义词的词典。在以上输入完全具备的情况下,本发明方法的具体步骤如下
(1)领域逆向分析人员针对每个应用系统的遗留代码,使用特征定位技术,建立多个 ‘特征-方法矩阵’,该矩阵以特征列表为行标题,以代码中的方法名为列标题,矩阵元素描 述特征与系统实现单元的相关性。(2)领域逆向分析人员对所有的‘特征-方法矩阵’进行整合,得到针对领域的‘特 征-产品矩阵’,该矩阵以特征列表为行标题,以领域应用系统为列标题,矩阵元素代表特征 在应用系统中的实现情况,其反映出特征在需求层面上的可变性结论。(3)领域逆向分析人员以‘特征-产品矩阵’为基础,针对每一个特征,对涉及的系 统实现代码进行差异性比较,比较的结果表示为特征在实现层面上的可变性结论。本发明方法中,步骤(1)中的‘特征-方法矩阵’建立过程分为如下两步
(1)通过LSA (潜在语义分析)特征定位技术,得到以百分比为单位的特征-方法相关 程度的数值,如图2所示。在该矩阵表格中,行标签代表领域内的ρ个特征及其集合{特征 1,特征2,···,特征ρ},列标签代表应用系统m中的η个方法集合{方法ml,方法m2,…, 方法mn}。在每一个单元格的左半部分,列举了特定特征与方法的相关程序数值。(2)由领域逆向分析人员确定阈值,若特征-方法相关程度数值高于此阈值,则表 示该特征与该方法具有相关性。在图2所示矩阵中,可以假设阈值为80%。(3)重新整理‘特征-方法矩阵’,并以是或否表示其相关性。如图2所示,在单元 格的右半部分以0表示特征与方法存在相关性,而X表示不存在相关性。本发明方法中,步骤(2)中的‘特征-产品矩阵’如图3所示。在该矩阵表格中,行 标签代表领域内的P个特征及其集合{特征1,特征2,···,特征ρ},列标签代表领域内已有 的q个遗留应用系统或产品集合{产品1,产品2,..,产品q}。在每一个单元格的左半部 分,列举出特征在特定应用产品中的实现情况,表现为与相应特征具有相关性的方法集合, 若产品中不包含对此特征的实现,则用’ 一’表示。因此,可以从中分析得到特征在需求层 面上的可变性类型如果特征在所有的产品中均有对应实现(具有不为空的方法集合),则 该特征为需求共性特征,将图3矩阵最后一列的左半部分标记为‘共性’;如果特征并非被 所有产品实现,则该特征为需求可变性特征,将图3矩阵最后一列的左半部分标记为‘可变 性,。本发明方法中,步骤(3)中的代码差异性比较与实现层面特征可变性的识别过程 如下
(1)针对特征1,过滤得到与其具有相关性的各个产品中的方法集合;
(2)将具有对应方法的第一个产品代码作为比较基准,与剩余的产品对应代码进行差异性比较,得到代码之间的相似性程度,在图3相应单元格的右半部分列出;
(3)由领域逆向分析人员确定比较阈值;
(4)基于比较阈值分析代码差异性比较结果,若针对同一个特征,所有的代码相似程度 均大于该阈值,则该特征为实现共性特征,将图3矩阵最后一列的右半部分标记为‘共性’; 若存在一个代码的相似程度小于阈值,则该特征为实现可变性特征,将图3矩阵最后一列 的右半部分标记为‘可变性’。本发明可以实现领域特征的可变性识别与分析,支持含有遗留应用系统代码的软 件产品线改造过程。本方法将代码逆向分析的结果与正向的特征识别相结合,为软件产品 线的领域分析活动提供更为准确、全面的需求可变性知识。此外,本方法能够得到两个层次 的特征可变性结论,其一为需求层次上的特征可变性,表示特征所代表的需求在各个应用 系统中的涵盖情况,其二为实现层次上的特征可变性,表示特征在不同应用系统中的不同 实现技术。尤其是第二种类型的可变性,是正向的领域需求活动无法获取的,而它为后续的 产品线设计与实现阶段带来了益处。本方法的积极效果在于为领域产品线的改造提供了更加完善的方案。由于在现实 情况中,一个软件组织往往首先开发多个独立的、但具有相似需求的产品,为了降低开发成 本、提高产品质量,软件组织将使用产品线的概念搭建领域平台。这一过程中,已有的遗留 系统代码是可被看作为重要的产品线资产,其中包括了需求及实现方面的可变性,因此如 何将这些可变性知识加以挖掘和利用成为了其中的关键。使用本发明,可以通过半自动的 手段辅助领域需求可变性的分析,同时激励并促进了软件组织的产品线改造进程。
图1为本发明的方法流程图。图2为本发明的‘特征_方法矩阵’模板及其实例。图3为本发明的‘特征_产品矩阵’模板及其实例。
具体实施例方式下面进一步给出软件产品线开发中特征可变性的逆向工程分析方法的具体实施 过程,图1给出了该方法的流程图。它以遗留系统代码和初始的领域特征列表为基础,通过 特征定位与代码差异性比较的技术获取每个特征在不同应用系统中的涵盖与实现情况,由 此判定特征在需求层面以及实现层面上的可变性。针对一次特定的特征可变性分析活动,使用该发明包含如下具体实施过程
(1)从领域专家或用户处,通过座谈或读取遗留系统文档等方法获取初始的领域特征 列表。(2)针对一个应用产品,领域逆向分析人员使用特征定位技术(例如LSA),以领域 词典所标注的同义词为匹配字段,获得特征与该产品中各个方法之间的相关程度数值,建 立初始的‘特征-方法矩阵’,如图2所示。(3)重复执行步骤(2),直至对所有的遗留系统均处理完毕。(4)领域逆向分析人员指定特征_方法的相关性阈值。然后重新整理‘特征_方 法矩阵’,得到以0或X标记的特征与方法的二值相关性,如图3所示。
(5)领域逆向分析人员整合所有的‘特征_方法矩阵’,建立初始的‘特征_产品矩 阵’,列出特征在对应产品中的相关方法集合,同时得到需求层面的特征可变性结论,如图3 所示。(6)针对‘特征-产品矩阵’中的一个特征,领域逆向分析人员识别与其相关的 所有应用产品方法集合,以最先的产品为比较基准,使用代码差异性比较工具(例如使用 CloneMiner工具)得到剩余系统代码与基准代码的相似性程度。(7)重复执行步骤(6),直至所有的特征均处理完毕。(8)领域逆向分析人员制定代码相似的阈值。然后分析与每一行特征的代码相似 性程度进行比较,得到特征在实现层面上的可变性结论。
权利要求
一种软件产品线开发中特征可变性的逆向工程分析方法,其特征在于包括以下步骤(1)领域逆向分析人员针对每个应用系统的遗留代码,使用特征定位技术,建立多个‘特征 方法矩阵’,该矩阵以特征列表为行标题,以代码中的方法名为列标题,矩阵元素描述特征与系统实现单元的相关性;(2)领域逆向分析人员对所有的‘特征 方法矩阵’进行整合,得到针对领域的‘特征 产品矩阵’,该矩阵以特征列表为行标题,以领域应用系统为列标题,矩阵元素代表特征在应用系统中的实现情况,其反映出特征在需求层面上的可变性结论;(3)领域逆向分析人员以‘特征 产品矩阵’为基础,针对每一个特征,对涉及的系统实现代码进行差异性比较,比较的结果表示为特征在实现层面上的可变性结论。
2.如权利要求1所述的特征可变性的逆向工程分析方法,其特征在于,步骤(1)中所述 的特征列表由领域专家、用户等相关人员通过座谈、阅读遗留系统文档等方法建立,该过程 是正向、主观的初始特征获取过程。
3.如权利要求1所述的特征可变性的逆向工程分析方法,其特征在于,步骤(1)中所述 建立‘特征_方法矩阵’的步骤如下(1)通过LSA特征定位技术,得到以百分比为单位的特征_方法相关程度的数值;(2)由领域逆向分析人员确定阈值,若特征-方法相关程度数值高于此阈值,则表示该 特征与该方法具有相关性;(3)重新整理‘特征_方法矩阵’,并以是或否表示其相关性。
4.如权利要求1所述的特征可变性的逆向工程分析方法,其特征在于,步骤(2)中所述 需求层面上的特征可变性分为两类需求共性,即该特征在所有的应用系统中被实现;需 求可变性,即该特征并非在所有应用系统中被实现。
5.如权利要求1所述的特征可变性的逆向工程分析方法,其特征在于,步骤(3)中所述 实现层面上的特征可变性分为两类实现共性,即该特征在所有相关系统中具有高度相似 性的实现方式或代码;实现可变性,即该特征在不同的系统中具有较为不同的实现方式。
全文摘要
本发明属于软件开发技术领域,具体为一种软件产品线开发中特征可变性的逆向工程分析方法。该方法以遗留系统代码和领域特征列表作为输入,经过逆向分析,获取领域特征的可变性分析结果,体现为需求层面及实现层面上的可变性描述。其步骤包含使用特征定位技术建立‘特征-类矩阵’集合;进行特征-产品整合,建立‘特征-产品矩阵’,获取需求层面上可变性;针对每个特征,进行遗留代码差异性比较,获取实现层面上可变性。本发明将代码中的领域知识与正向过程中的知识相结合,由此获得更为准确、全面的领域可变性结论。同时,特征实现层面上的可变性分析也为产品线的设计与实现活动带来益处。
文档编号G06F9/45GK101894038SQ20101024246
公开日2010年11月24日 申请日期2010年8月2日 优先权日2010年8月2日
发明者彭鑫, 沈立炜, 赵文耘 申请人:复旦大学