CN102541592A - 一种通信设备及其软件升级的方法 - Google Patents

一种通信设备及其软件升级的方法 Download PDF

Info

Publication number
CN102541592A
CN102541592A CN2011104246295A CN201110424629A CN102541592A CN 102541592 A CN102541592 A CN 102541592A CN 2011104246295 A CN2011104246295 A CN 2011104246295A CN 201110424629 A CN201110424629 A CN 201110424629A CN 102541592 A CN102541592 A CN 102541592A
Authority
CN
China
Prior art keywords
node
program
statement
limit
focus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011104246295A
Other languages
English (en)
Other versions
CN102541592B (zh
Inventor
张重峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Datang Mobile Communications Equipment Co Ltd
Original Assignee
Datang Mobile Communications Equipment Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Datang Mobile Communications Equipment Co Ltd filed Critical Datang Mobile Communications Equipment Co Ltd
Priority to CN201110424629.5A priority Critical patent/CN102541592B/zh
Publication of CN102541592A publication Critical patent/CN102541592A/zh
Application granted granted Critical
Publication of CN102541592B publication Critical patent/CN102541592B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种通信设备及其软件升级的方法,该方法包括:确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点;以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图;根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到对应关注点的切片后的程序依赖图;根据切片后的程序依赖图,识别需要进行重构的程序元素。本发明以耦合度为切入点构造依赖图,与内聚度相比,耦合度更能反映程序中元素间的交互关系,从而更有利于分析类之间的重构,引入切片技术增加了度量的准确性。

Description

一种通信设备及其软件升级的方法
技术领域
本发明涉及重构识别技术领域,尤其涉及一种通信设备及其软件升级的方法。
背景技术
在通信设备软件的生命周期中,需要不断对软件进行升级、更改,以适应新的需求。而对软件的更改往往都是在一些外部压力下进行的,如客户或行业竞争。这些更改势必会破坏程序原有的结构,提高程序复杂度,降低代码的质量。结果导致软件的维护成本显著提高,对软件的升级将变得更加困难。
任何软件开发方法和工具都不能避免这个问题,为了解决这个难题,需要一种技术能够降低软件复杂度,提高软件的内部质量。重构就是解决该问题的一项重要技术手段,识别程序中哪些地方存在坏味道Bad Smells(如重复的代码、过长的函数、过长的类等)、哪些代码需要被重构是重构的难点。目前采用的重构技术主要有以下几种:
1)静态分析技术
静态分析技术是Kamiya首先提出的一种自动识别克隆代码的技术,这是自动化识别重构对象的雏形。主要是通过一些规则,把源程序转换成token序列,然后分析这些token,从中找出克隆的代码。根据这种静态分析的思想,开发出能够自动识别克隆代码的工具一CCFinder,这是一种早期的自动识别重构对象的工具。
静态分析只能静态的对现有代码进行分析,而不能分析程序运行流的状态,故能识别出一些克隆代码或不合理的代码,而不能直接支持重构。这需要加入经验分析,进一步识别出可利用何种重构技术来对现有代码进行调整。
2)动态分析技术
Kataoka利用动态分析技术,开发出能够自动检测程序中不变量的工具-Daikon。它指导目标程序去跟踪一些兴趣变量(包括方法、类、变量等程序元素),然后在这些变量上运行一些测试套件,最后推断出哪些变量是不变量。
动态分析技术虽然加入程序运行时信息,但它限于识别不变量的重构,对其他重构没有很好的支持。而这种重构技术在应用过程,对于降低软件复杂度,提高软件的内部质量的支持不是很理想,对软件的改善效果不明显。
3)可视化技术
可视化技术可以辅助维护人员识别程序中哪些地方应该被重构。具体为根据不同需求,把程序在不同层次进行抽象,然后在这个抽象层次上发现潜在的“坏味道”,但它不能直接识别重构对象,而仅能向维护人员提供一种特殊的程序表示。Simon利用基于度量的可视化技术,把程序的内聚度在2D图上抽象出来,辅助维护人员识别重构对象。Bohnet把组件之间的交互(如调用关系)可视化在3D空间,在不同的抽象层次(从函数间的交互到系统间的交互)上分析组件之间的交互,维护人员可以在这个三维空间观察组件间的交互,从而识别不合理的调用关系。
可视化技术能够直观的识别不良代码,给维护人员重构建议,但使用该技术的条件比较严格,需要较高的硬件配置,而且欠缺实时性,需要大量的分析时间。
发明内容
本发明提供一种通信设备及其软件升级的方法,用以在自动化优化程序结构的基础上实现软件升级,降低软件升级的复杂度及提高软件升级效率。
本发明提供一种通信设备软件升级的方法,包括:
确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点;
以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图;
根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到每个关注点的切片后的程序依赖图;
根据切片后的程序依赖图,识别需要进行重构的程序元素,并对需要进行重构的程序元素进行重构;
对完成程序元素重构的目标程序进行升级。
本发明还提供一种通信设备,包括:
关注点确定单元,用于确定耦合度高于设定值的一对程序元素分别作为关注点;
依赖图构造单元,用于根据确定的每个关注点,按照自底向上的顺序,构造出面向所述关注点的程序依赖图;
切片单元,用于根据构造的程序依赖图,以确定的每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到切片后的程序依赖图;
识别单元,用于根据切片后的程序依赖图,识别需要进行重构的重构对象,并对需要进行重构的程序元素进行重构;
升级单元,用于对完成程序元素重构的目标程序进行升级。
利用本发明提供的通信设备及其软件升级方法具有以下有益效果:
1)以耦合度高的程序元素为关注点进行分析,与内聚度相比,耦合度更能反映程序中元素间的交互关系,从而更有利于分析类之间的重构,因此为从整体上提高了软件升级效率提供了基础;
2)通过程序依赖图的构造,根据不同的依赖关系,可以识别出不同的重构对象,从而使得该方法具有很大的可扩展性,从而使重构应用的程序元素类型多,重构效果好,则可以全面提高软件升级效率;
3)因为引入了程序切片技术,所以提高了度量的准确性,使得度量结果更准确,从而优化程序结构的准确度高,克服软件升级过程中的兼容性问题。
附图说明
图1为本发明实施例通信设备软件升级方法流程图;
图2为本发明实施例目标程序中方法内依赖图;
图3为本发明实施例目标程序中方法间依赖图;
图4为本发明实施例目标程序中类依赖图;
图5为本发明实施例中目标程序后向切片结果图;
图6为本发明实施例中目标程序前向切片结果图;
图7为本发明实施例中通信设备结构图。
具体实施方式
下面结合附图和实施例对本发明提供的通信设备及其软件升级方法和进行更详细地说明。
识别通信设备程序中哪些地方存在坏味道、哪些代码需要被重构是重构的难点,因为对于坏味道的理解取决于很多因素,在很大程度上存在主观性。因此,如何自动识别重构对象是限制重构技术发展的瓶颈,也就使得软件升级的兼容性差及升级效率低。本文在一些简单重构识别的基础上,提供了一种基于识别重构对象的通信设备软件升级方法,在构建依赖图的基础上,定义了基于切片的重构识别技术,进而来识别程序中的“坏味道”。如图1所示,本发明提供的通信设备软件升级方法包括以下步骤:
步骤101,确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点;
具体地,耦合度通过交互次数来衡量,可以通过执行程序代码,统计程序元素同其他程序元素间的交互次数,如果两个程序元素间的交互次数超过设定值,则说明耦合度高于设定值,可以将这两个程序元素作为关注点。
步骤102,以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图;
具体地,程序依赖图程序依赖图由节点和边组成,节点代表程序中的程序元素,边代表程序元素间的关系,通过箭头指示依赖关系,程序元素可以程序中变量、方法、类等,程序元素间的关系包括数据依赖关系和控制依赖关系。
步骤103,根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到每个关注点的切片后的程序依赖图;
进行前向切片和后向切片,可以删除一些不影响程序执行轨迹的节点和边,从而得到影响程序执行轨迹的程序依赖图。
步骤104,根据每个关注点切片后的程序依赖图,识别需要进行重构的程序元素,并对需要进行重构的程序元素进行重构;
步骤105,对完成程序元素重构的目标程序进行升级。
本发明实施例提供的通信设备软件升级方法,重构过程中以耦合度高的程序元素为关注点进行分析,与内聚度相比,耦合度更能反映程序中元素间的交互关系,从而更有利于分析类之间的重构,因此为从整体上提高了软件升级效率提供了基础;通过程序依赖图的构造,根据不同的依赖关系,可以识别出不同的重构对象,从而使得该方法具有很大的可扩展性,从而使重构应用的程序元素类型多,重构效果好,则可以全面提高软件升级效率;因为引入了程序切片技术,所以提高了度量的准确性,使得度量结果更准确,从而优化程序结构的准确度高,克服软件升级过程中的兼容性问题。
下面给实例代码为例给出本发明通信设备软件升级方法优选实施方式,该代码示例包含了本发明实施例处理对象的各种特征,可辅助对相关概念的理解。该实例代码如下:
Figure BDA0000121352000000061
(a)类ASTNode
(b)类NodeInfo
Figure BDA0000121352000000071
(c)类Perdication
上述实例代码中,对于(a)ASTNode类,包含四个属性(activeNode,type,astRoot,fatherNode)和五个方法(构造方法,start方法,refreshStart方法,isLeafNode方法,propertyDelete方法);对于(b)NodeInfo类,包含三个属性(nodeProperty,number,id)和三个方法(构造方法,getProperty方法,getNumber方法);对于(c)Perdication类,包含两个属性(nInfo,label)和两个方法(构造方法,equals方法)。
在这些类和方法之间产生了许多交互关系,其中一些使交互双方产生不必要的耦合关系。需要将不合理的交互识别出来,并实施重构,具体过程如下:
步骤1)确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点
实施中,可以选定目标程序中一些可读性低且具有高耦合度的代码块,代码块的程序实体(即程序元素)为关注点。
具体地,可以在目标程序中代码执行过程中,统计不同代码块间的交互次数,交互次数越多,说明耦合度越高。对于上述实例代码,通过执行程序代码,发现方法propertyDelete和方法isLeafNode间的交互次数比较多,因此选取方法propertyDelete和方法isLeafNode作为关注点。
步骤2)以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图
构造程序依赖图是将程序元素间的依赖关系以图形方式表示出来,确定过程为:确定关注点涉及的程序元素,及所涉及的程序元素间的依赖关系;以所涉及的程序元素为节点,以所涉及的程序元素间的依赖关系为边,按照自底向上的顺序,构造出面向所述目标程序的程序依赖图。
可见,程序依赖图是在抽象语法树的基础上,确定关注点(为程序元素,可以是类、方法、变量等),在关注节点之间加入了一些额外的节点边,来表示节点之间的依赖关系。
按照自底向上的顺序构造时,首先构造每个方法的依赖图,然后构造方法之间的依赖图,直到构造出整个面向目标程序的程序依赖图。
设方法propertyDelete为关注点,图2表示其简化程序依赖图,图中的实线表示控制依赖关系,虚线表示数据依赖关系,一些程序元素用代码行号来替代,如S26代表if语句,P26代表条件语句中的谓词语句。
现有的数学模型已经定义了一些数据依赖关系和控制依赖关系,控制关系如参数输出边、实例化边和多态调用边等,除了数学模型中已定义好的数据依赖关系和控制依赖关系,本发明实施例中还定义了一种新的数据依赖和控制依赖关系,具体如下:
数据依赖:设变量v和语句节点ni为关注点,那么变量v在语句节点ni的定义是语句节点nj的一个可到达定义,则语句节点nj数据依赖于语句节点ni,所述程序依赖图中语句节点nj和语句节点ni间的箭头方向是从语句节点nj指向语句节点ni
变量v在语句节点ni的定义是语句节点nj的一个可到达定义,也就是说,语句节点nj的执行结果,会确定出变量v在语句节点ni的定义。
控制依赖:在条件语句内部,条件语句的条件体内的语句S对判断谓词语句P具有控制依赖关系,程序依赖图中语句S节点和语句P节点之间的箭头方向从判断谓词语句P指向语句S;
控制依赖:在循环语句内部,循环语句的循环体内的语句S对判断谓词语句P具有控制依赖关系,程序依赖图中语句S节点和语句P节点之间的箭头方向从判断谓词语句P指向语句S。
以上述实例代码为例,首先构造每个方法的依赖图,得到方法间依赖图,即分别以方法propertyDelete和方法isLeafNode为起点,确定执行该方法过程中涉及的程序元素,根据数据依赖关系和控制依赖关系的定义输出每个方法的依赖图,如图3所示,表示propertyDelete方法和isLeafNode方法之间的依赖图,图中实线表示控制依赖关系,虚线表示数据依赖关系。
方法间简化依赖图是在方法内的简化依赖图基础上,加入一些节点和边,用于表示方法和方法间的依赖关系。其中新加入的节点包括调用节点(callvertex)(即存在调用关系的节点称为调用节点),参数传递节点(actual_in,actual_out,formal_in,formal_out)(即存在传输参数传递关系的节点);新加入的边包括调用边(调用关系),参数输入边(参数输入关系),参数输出边(参数输出关系)。
完成方法间依赖图后,再构造类间之间的依赖图,直至构造出目标程序的程序依赖图。
类间简化依赖图在方法间简化依赖图的基础上,加入一些节点和边,用于表示类与方法成员和数据成员之间的依赖关系。新加入的节点包括类首部节点、属性节点;新加入的边包括数据成员边、方法成员边、抽象成员边,实例化边、多态调用边等。图4表示类ASTNode的一部分成员构成的类依赖图。
面向对象程序的简化依赖图在类间简化依赖图基础上,引入继承边来表示类之间的层次关系。至此,本实施例已经建立整个面向对象程序依赖图的过程,在对象程序的各个元素之间建立起一个完整的依赖关系体系。
步骤3)根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到每个关注点的切片后的程序依赖图
程序P关于切片准则C=<n,E>的切片S是一个满足如下条件的可执行序列:I.切片S是从程序P中删除零条或多条语句得到的序列;II.对于程序P中的语句n中的元素E来说,删减后的程序(即切片S)与原程序P相对元素E具有相同的执行轨迹,其中元素E是关注点,可以是变量、方法或者类等程序实体。上述程序P为目标程序,语句n位于程序P中。
后向切片过程具体为:从语句n中的元素E开始,沿着除参数输出边以外的依赖关系边反向遍历,并标记所有达到的节点和边;然后从这些被标记的节点和边开始沿着除参数输入边以外的依赖关系边反向遍历,标记到达的节点的边。所有被标记的节点和边的集合就组成了元素E的后向切片。图5是以<18,isLeafNode>为准则的后向切片,其中,18表示目标程序的第18条语句,即isLeafNode所在的语句,isLeafNode为关注点,为了简洁性,仅表示出准则在ASTNode和NodeInfo两个类中的关注点的后向切片。
上述参数输出边为表示参数输出关系的边,上述反向遍历,具体是指沿着程序依赖图中边的箭头的反方向进行遍历。
前向切片过程具体为:从语句n中的元素E开始,沿着除参数输出边以外的依赖关系边正向遍历,并标记所有达到的节点和边;然后从这些被标记的节点和边开始沿着除参数输入边以外的依赖关系边正向遍历,标记到达的节点的边。所有被标记的节点和边的集合就组成了元素E的前向切片。其中图6是以<35,id>为准则的后向切片,其中,35表示目标程序的第35条语句,即isLeafNode所在的语句,id为关注点,为了简洁性,仅表示出准则在Predication和NodeInfo两个类中的关注点的前向切片。
上述正向遍历,具体是指沿着程序依赖图中边的箭头正方向进行遍历。
步骤4)识别重构
本发明实施例在简化程序依赖图的基础上,对关注点进行程序切片,识别作为关注点的程序元素间不合理的耦合关系,从而自动识别出程序中的“坏味道”。具体为根据每个关注点切片后的程序依赖图,确定该关注点对应的程序元素对;确定以该对程序元素分别作为关注点的切片后的程序依赖图中,该对程序元素间的交互所经历的节点和边数,在所经历的节点和边数超过设定数量时,确定该对程序元素需要重构。例如如果A依赖于B,但A与B不在同一个模块中,说明A与B的关系导致软件产生高耦合度,则A具有“坏味道”;对具有“坏味道”的元素A实施重构,把元素A移动到B所属的模块中。
本发明实施例可以自动分析源代码,在关注点上构造程序依赖图PDG;根据给定的切片准则,在PDG上运用图可达性算法;本实施例初步建立程序依赖图后,有时需要得到<n,E>所依赖其他程序元素的集合,有时需要得到程序里依赖于<n,E>的程序元素集合。这两个集合分别是后向切片集和前向切片集。通过后向切片集和前向切片集自动识别程序中不合理的地方,改变了以往手动重构识别所带来的主观性和效率问题,解决了重构的瓶颈。
步骤5)对完成程序元素重构的目标程序进行升级
由于经重构过程,克服了不合理的耦合关系,从而避免了软件升级过程中一些不必要的交互,提高了软件升级的效率并且有利于后续维护。
基于同一发明构思,本发明实施例中还提供了一种通信设备,由于该设备解决问题的原理与一种识别重构对象的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
一种通信设备,如图7所示,包括:
关注点确定单元701,用于确定耦合度高于设定值的一对程序元素分别作为关注点;
依赖图构造单元702,用于根据确定的每个关注点,按照自底向上的顺序,构造出面向所述关注点的程序依赖图;
切片单元703,用于根据构造的程序依赖图,以确定的每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到切片后的程序依赖图;
识别单元704,用于根据切片后的程序依赖图,识别需要进行重构的重构对象,并对需要进行重构的程序元素进行重构;
升级单元705,用于对完成程序元素重构的目标程序进行升级。
优选地,依赖图构造单元702构造出面向所述关注点的程序依赖图,具体包括:
确定所述关注点涉及的程序元素,及所涉及的程序元素间的依赖关系;
以所涉及的程序元素为节点,以所涉及的程序元素间的依赖关系为边,按照自底向上的顺序,构造出面向所述关注点的程序依赖图。
优选地,依赖图构造单元702确定的所述涉及到的程序元素间的依赖关系包括数据依赖关系,所述数据依赖关系包括:
设变量v和语句节点ni为关注点,若变量v在语句节点ni的定义是语句节点nj的一个可到达定义,则语句节点nj数据依赖于语句节点ni,箭头是从语句节点nj指向语句节点ni
优选地,依赖图构造单元702确定的所述涉及到的程序元素间的依赖关系包括控制依赖关系,所述控制依赖关系包括:
在条件语句内部,语句S对判断谓词语句P具有控制依赖关系,箭头从判断谓词语句P指向语句S;
在循环语句内部,语句S对判断谓词语句P具有控制依赖关系,箭头从判断谓词语句P指向语句S。
优选地,切片单元703以确定的每个关注点为起点,分别按照切片准则进行后向切片,具体包括:
从关注点开始,沿着除参数输出边以外的依赖关系边反向遍历,并标记所有达到的节点和边;
从这些被标记的节点和边开始沿着除参数输入边以外的依赖关系边反向遍历,标记到达的节点的边;
所有被标记的节点和边的集合就组成了关注点的后向切片;
以确定的每个关注点为起点,分别按照切片准则进行前向切片,具体包括:
从关注点开始,沿着除参数输出边以外的依赖关系边正向遍历,并标记所有达到的节点和边;
从这些被标记的节点和边开始沿着除参数输入边以外的依赖关系边正向遍历,标记到达的节点的边;
所有被标记的节点和边的集合就组成了关注点的前向切片。
优选地,识别单元704根据切片后的程序依赖图,识别需要进行重构的重构对象,具体包括:
确定切片后的程序依赖图中耦合度高于设定值的所有对程序元素;
分别确定每一对程序元素间的交互所经历的节点和边数,在所经历的节点和边数超过设定数量时,确定该对程序元素需要重构。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (11)

1.一种通信设备软件升级的方法,其特征在于,包括:
确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点;
以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图;
根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到每个关注点的切片后的程序依赖图;
根据切片后的程序依赖图,识别需要进行重构的程序元素,并对需要进行重构的程序元素进行重构;
对完成程序元素重构的目标程序进行升级。
2.如权利要求1所述的方法,其特征在于,所述涉及到的程序元素间的依赖关系包括数据依赖关系,所述数据依赖关系包括:
设变量v和语句节点ni为关注点,若变量v在语句节点ni的定义是语句节点nj的一个可到达定义,则语句节点nj数据依赖于语句节点ni,所述程序依赖图中语句节点nj和语句节点ni间的箭头方向是从语句节点nj指向语句节点ni
3.如权利要求1所述的方法,其特征在于,所述涉及到的程序元素间的依赖关系包括控制依赖关系,所述控制依赖关系包括:
在条件语句的条件体内,语句S对判断谓词语句P具有控制依赖关系,所述程序依赖图中语句S节点和语句P节点之间的箭头从判断谓词语句P指向语句S;
在循环语句的循环体内,语句S对判断谓词语句P具有控制依赖关系,所述程序依赖图中语句S节点和语句P节点之间的箭头从判断谓词语句P指向语句S。
4.如权利要求1所述的方法,其特征在于,以每个关注点为起点,分别按照切片准则进行后向切片,具体包括:
从关注点开始,在所述程序依赖图中沿着除参数输出边以外的边反向遍历,并标记所有达到的节点和边;
从反向遍历被标记的节点和边开始,沿着除参数输入边以外的边反向遍历,标记到达的节点的边;
所有被标记的节点和边的集合组成所述关注点的后向切片;
以每个关注点为起点,分别按照切片准则进行前向切片,具体包括:
从关注点开始,沿着除参数输出边以外的边正向遍历,并标记所有达到的节点和边;
从正向遍历被标记的节点和边开始,沿着除参数输入边以外的边正向遍历,标记到达的节点的边;
所有被标记的节点和边的集合组成所述关注点的前向切片。
5.如权利要求1所述的方法,其特征在于,根据切片后的程序依赖图,识别需要进行重构的程序元素,具体包括:
根据每个关注点切片后的程序依赖图,确定该关注点对应的程序元素对;
确定该对程序元素分别作为关注点的切片后的程序依赖图中,该对程序元素间的交互所经历的节点和边数,在所经历的节点和边数超过设定数量时,确定该对程序元素需要重构。
6.如权利要求1所述的方法,其特征在于,所述作为关注点的程序元素为变量、方法或类。
7.一种通信设备,其特征在于,包括:
关注点确定单元,用于确定目标程序中耦合度高于设定值的各对程序元素分别作为关注点;
依赖图构造单元,用于以任一对关注点涉及的程序元素为节点,根据所涉及的程序元素间的依赖关系确定出节点之间的带方向箭头的边,由所述节点及边构造出程序依赖图;
切片单元,用于根据构造的程序依赖图,以每个关注点为起点,分别按照切片准则进行前向切片和后向切片,得到每个关注点的切片后的程序依赖图;
识别单元,用于根据根据切片后的程序依赖图,识别需要进行重构的程序元素,并对需要进行重构的程序元素进行重构;
升级单元,用于对完成程序元素重构的目标程序进行升级。
8.如权利要求7所述的通信设备,其特征在于,依赖图构造单元确定的所述涉及到的程序元素间的依赖关系包括数据依赖关系,所述数据依赖关系包括:
设变量v和语句节点ni为关注点,若变量v在语句节点ni的定义是语句节点nj的一个可到达定义,则语句节点nj数据依赖于语句节点ni,所述程序依赖图中语句节点nj和语句节点ni间的箭头方向是从语句节点nj指向语句节点ni
9.如权利要求7所述的通信设备,其特征在于,依赖图构造单元确定的所述涉及到的程序元素间的依赖关系包括控制依赖关系,所述控制依赖关系包括:
在条件语句的条件体内,语句S对判断谓词语句P具有控制依赖关系,所述程序依赖图中语句S节点和语句P节点之间的箭头从判断谓词语句P指向语句S;
在循环语句的循环体内,语句S对判断谓词语句P具有控制依赖关系,所述程序依赖图中语句S节点和语句P节点之间的箭头从判断谓词语句P指向语句S。
10.如权利要求7所述的通信设备,其特征在于,切片单元以每个关注点为起点,分别按照切片准则进行后向切片,具体包括:
从关注点开始,在所述程序依赖图中沿着除参数输出边以外的边反向遍历,并标记所有达到的节点和边;
从反向遍历被标记的节点和边开始,沿着除参数输入边以外的边反向遍历,标记到达的节点的边;
所有被标记的节点和边的集合组成所述关注点的后向切片;
以每个关注点为起点,分别按照切片准则进行前向切片,具体包括:
从关注点开始,沿着除参数输出边以外的边正向遍历,并标记所有达到的节点和边;
从正向遍历被标记的节点和边开始,沿着除参数输入边以外的边正向遍历,标记到达的节点的边;
所有被标记的节点和边的集合组成所述关注点的前向切片。
11.如权利要求7所述的通信设备,其特征在于,识别单元根据切片后的程序依赖图,识别需要进行重构的程序元素,具体包括:
根据每个关注点切片后的程序依赖图,确定该关注点对应的程序元素对;
确定该对程序元素分别作为关注点的切片后的程序依赖图中,该对程序元素间的交互所经历的节点和边数,在所经历的节点和边数超过设定数量时,确定该对程序元素需要重构。
CN201110424629.5A 2011-12-16 2011-12-16 一种通信设备及其软件升级的方法 Active CN102541592B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110424629.5A CN102541592B (zh) 2011-12-16 2011-12-16 一种通信设备及其软件升级的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110424629.5A CN102541592B (zh) 2011-12-16 2011-12-16 一种通信设备及其软件升级的方法

Publications (2)

Publication Number Publication Date
CN102541592A true CN102541592A (zh) 2012-07-04
CN102541592B CN102541592B (zh) 2015-02-04

Family

ID=46348561

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110424629.5A Active CN102541592B (zh) 2011-12-16 2011-12-16 一种通信设备及其软件升级的方法

Country Status (1)

Country Link
CN (1) CN102541592B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103853554A (zh) * 2014-02-20 2014-06-11 上海大唐移动通信设备有限公司 一种软件重构位置确定方法及装置
CN104298677A (zh) * 2013-07-16 2015-01-21 中国移动通信集团浙江有限公司 一种关注点依赖关系识别方法及系统
CN105933155A (zh) * 2016-05-26 2016-09-07 华为软件技术有限公司 控制服务器升级的装置及方法
CN106557859A (zh) * 2015-09-29 2017-04-05 阿里巴巴集团控股有限公司 一种验证方法和设备
CN107256167A (zh) * 2017-05-27 2017-10-17 中国科学院深圳先进技术研究院 应用于应用系统迁移的升级控制方法及升级控制设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873323A (zh) * 2010-06-21 2010-10-27 南京邮电大学 基于程序切片技术的Web服务平台

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873323A (zh) * 2010-06-21 2010-10-27 南京邮电大学 基于程序切片技术的Web服务平台

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李必信等: "一种分析和理解程序的方法——程序切片", 《计算机研究与发展》 *
马瑟: "《软件测试基础教程》", 31 July 2011, 机械工业出版社 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104298677A (zh) * 2013-07-16 2015-01-21 中国移动通信集团浙江有限公司 一种关注点依赖关系识别方法及系统
CN104298677B (zh) * 2013-07-16 2017-10-10 中国移动通信集团浙江有限公司 一种关注点依赖关系识别方法及系统
CN103853554A (zh) * 2014-02-20 2014-06-11 上海大唐移动通信设备有限公司 一种软件重构位置确定方法及装置
CN106557859A (zh) * 2015-09-29 2017-04-05 阿里巴巴集团控股有限公司 一种验证方法和设备
CN106557859B (zh) * 2015-09-29 2020-12-11 阿里巴巴集团控股有限公司 一种验证方法和设备
CN105933155A (zh) * 2016-05-26 2016-09-07 华为软件技术有限公司 控制服务器升级的装置及方法
CN105933155B (zh) * 2016-05-26 2019-06-11 华为软件技术有限公司 控制服务器升级的装置及方法
CN107256167A (zh) * 2017-05-27 2017-10-17 中国科学院深圳先进技术研究院 应用于应用系统迁移的升级控制方法及升级控制设备
CN107256167B (zh) * 2017-05-27 2020-07-03 中国科学院深圳先进技术研究院 应用于应用系统迁移的升级控制方法及升级控制设备

Also Published As

Publication number Publication date
CN102541592B (zh) 2015-02-04

Similar Documents

Publication Publication Date Title
CN107273286B (zh) 针对任务应用的场景自动化测试平台及方法
KR20210142784A (ko) 데이터 처리방법 및 관련제품
US20220318945A1 (en) Optimizing compilation of shaders
CN108073400A (zh) 软件自动化构建方法、服务器及存储介质
US8527452B2 (en) Construction of rules for use in a complex event processing system
CN108345532A (zh) 一种自动化测试用例生成方法和装置
CN102541592A (zh) 一种通信设备及其软件升级的方法
JP2007012003A (ja) フィーチャ指向ソフトウェア製品ラインの開発環境を提供するシステム
CN103744684B (zh) 一种异构软硬件协同开发的方法及系统
JP4001286B2 (ja) プログラム保守支援装置、プログラム保守支援方法、およびプログラム
US9304838B1 (en) Scheduling and executing model components in response to un-modeled events detected during an execution of the model
CN109558316A (zh) 一种测试策略自动化配置的http接口动态化参数测试方法
US9117020B2 (en) Determining control flow divergence due to variable value difference
EP1548581A2 (en) Methods, apparatus and programs for system development
CN111459490B (zh) 一种自动适配硬件平台的语音识别引擎移植方法及装置
CN109522005A (zh) 跨平台图形化程序设计方法
CN105700893A (zh) 基于改进系统依赖图的llvm ir程序切片方法
CN104572474A (zh) 一种基于动态切片的轻量级错误定位技术实现方法
CN114968817A (zh) 代码改动影响范围的评估方法、装置、设备及存储介质
CN114826768A (zh) 应用大数据和ai技术的云端漏洞处理方法及ai分析系统
CN114185874A (zh) 一种基于大数据的建模方法、装置、开发框架及设备
Brenner et al. ScenarioTools real-time play-out for test sequence validation in an automotive case study
CN110928761B (zh) 需求链及其应用的系统和方法
CN109766125B (zh) 批次间追平冲突的识别方法及装置
CN111767316A (zh) 目标任务处理方法、装置及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant