一种基于有向加权网络的软件安全性的量化评估方法与流程

文档序号:15462782发布日期:2018-09-18 18:34阅读:178来源:国知局
本发明涉及软件度量
技术领域
,具体涉及一种基于有向加权网络的软件安全性的量化评估方法。
背景技术
:针对目前对于软件的高安全性的要求,需要对软件的安全性进行度量与评估。软件的安全性包括软件的设计安全性、开发安全性、运行安全性等几个方面。软件度量是在把度量的普遍规律具体实际应用到软件工程领域的实践过程中形成的。软件度量几乎涉及到软件生命周期内的每一个环节,占有着十分重要的地位。在软件的开发过程中,软件度量能够量化现有工作中的不足,指导开发人员以更合理的方式来进行软件开发。在软件开发完成后,软件度量能够量化软件的性质特征,指导开发人员进行软件的优化,指导测试人员进行软件的测试等。软件度量对于软件质量的控制和保证,对于软件可靠性,安全性等特性的保证具有十分重要的意义。在软件工程领域中,从提出软件度量至今的40年间,主要是度量软件结构的复杂性。在结构化程序设计时期,研究者们便提出许多软件结构复杂性度量方法,用来描述软件系统的功能性、可靠性、可维护性、效率等软件的质量属性,如McCabe的环形复杂性度量方法、Halstead文本复杂性度量方法等。在90年代以后,面向对象技术迅速发展,针对于面向对象软件系统的度量方法也逐渐被提出,比较经典的度量方法有Chidamber和Kemerer提出的基于继承树的C&K度量方法、Brito和Abreu提出的MOOD度量方法等。相比于结构化程序的度量方法,面向对象的度量方法更能显示出其优越性。随着软件规模越来越大,软件功能越来越复杂和繁琐,传统的软件结构特性度量方法已经越来越不能适用了,比如,Halstead度量方法主要针对文本复杂性;McCabe度量方法主要针对结构化程序的结构复杂性:C&K度量套件和MOOD度量方法主要针对面向对象程序设计的抽象数据类型单元的复杂性。它们更多的考虑了软件内部结构属性的度量,忽略了软件结构的外部特征。随着复杂网络被应用到软件工程领域的研究,很多研究者基于复杂网络进行软件度量。目前的基于复杂网络的度量方法大多数是将软件抽象为有向无权网络或无向无权网络,在无权网络的基础上提取节点的度、节点间距离、聚集系数、相关系数等参数值作为度量指标,实现对软件系统复杂性等的度量。但是,无权网络会忽略掉软件系统的一些重要的结构属性,比如连接关系,连接关系对于软件结构的复杂性影响是比较大的,所以忽略连接关系的度量缺乏准确性。有少数研究者提到将软件抽象成为加权网络,但是并没有将权值应用到软件结构复杂性的度量中。技术实现要素:有鉴于此,本发明提供了一种基于有向加权网络的软件安全性的量化评估方法,除了对软件结构的复杂性进行度量外,还对软件结构的有序性进行了度量,从而实现对复杂软件的设计安全性的综合评估,能贴近复杂网络的真实情况,更为合理。本发明的基于有向加权网络的软件安全性的量化评估方法,对软件结构的复杂性进行度量,同时,还对软件结构的有序性进行度量;其中,软件结构有序性的度量方法如下:首先将软件转化为有向加权网络,然后计算网络中各节点的连接度与抽象度;其中,第i个节点的连接度pi为:与节点i直接相连的所有边的权重之和;第i个节点的抽象度ai为:ai=|DITi|+1,|DITi|为节点i代表的类或对象的继承树深度的值;则软件结构有序性评价系数Rs为Rs=0.5R1+0.5R2,其中,n为网络中节点总个数。进一步的,采用如下方法实现软件结构的复杂性度量:将软件转化为有向加权网络,以有向加权网络的系统平均波及度|T|avg作为软件结构复杂性评价系数;|T|avg的计算方法为:计算有向加权网络中所有节点的波及度的和T;统计有向加权网络中出度为1的节点的个数N,并计算所有出度为1的节点的波及度的和T1,则系统平均波及度为(T-T1)/(|V|-N),其中,|V|为有向加权网络中的节点总个数;其中第i个节点Vi的节点波及度|T(Vi)|的计算方法为:首先,针对节点Vi的可达集中的每个节点,首先计算节点Vi到该可达节点所经过的有向边的个数m及经过的各有向边的权重之和d,再计算d/m,每个可达节点的d/m的值之和即为节点Vi的节点波及度|T(Vi)|。进一步的,采用如下方法将软件转化为有向加权网络:首先获取软件的UML类图,然后将UML类图转化为有向网络图,然后根据类图中类与类之间的关系,对有向网络图的节点之间的边进行加权,从而获得有向加权网络;其中,类之间的关系的耦合性越强,则加权权重越大。有益效果:本发明在对软件安全性进行评估时,除了度量软件结构的复杂性外,还基于软件的有向加权网络模型对软件结构有序性进行了度量,结构有序性影响着软件的整体特性如鲁棒性等,对于软件结构有序性的量化度量能够更为准确的实现对软件设计安全性的评估。本发明对软件结构的复杂性度量方法进行改进,基于软件的有向加权网络模型,改进了节点波及度的计算方法,并提出以系统平均波及度为指标,对软件结构的复杂性进行度量,能够反映系统范围内的类之间依赖关系(即软件静态结构)的复杂度,能够更为准确的刻画软件结构复杂度,从而使得评估结果更为准确。本发明将根据节点(类)之间连接关系的不同对有向网络的边进行加权,得到软件的有向加权网络模型,可以更加全面的描述软件系统的结构属性,能够避免忽略类之间关系等重要属性,在有向加权网络的基础上进行复杂性和有序性度量,能够更为全面、准确的对软件安全性进行评估。具体实施方式下面结合附图并举实施例,对本发明进行详细描述。本发明提供了一种基于有向加权网络的软件安全性的量化评估方法,除了度量软件结构的复杂性外,还对软件结构的有序性进行度量,通过复杂性和有序性两方面的度量,综合量化评估软件的设计安全性。当度量得到软件结构的复杂度和有序度均在安全域内,表示该软件设计合理,产生漏洞的可能性较小,具有较高的安全性。(1)软件结构有序性度量软件结构有序性:有序使系统趋于稳定和确定,结构的有序便于功能的可控可管,利于模块间交互协同实现预定功能。软件网络结构的有序性指系统的组织在空间结构上分布的某种不均匀性(或异质性)和由此产生的一些整体的规律性特征,如鲁棒性,高通信效率(较短的平均最短路径长度)等。因此,对于软件结构有序性的度量有利于对软件系统整体特性的研究,有利于软件质量的管理控制,软件的可靠性和安全性的保证。为度量软件结构的有序性,本发明首先将软件转化为有向加权网络,然后以软件的有向加权网络模型为基础,计算网络各节点的连接度和抽象度,然后利用信息熵的概念对软件结构的有序性进行度量。有向加权网络复杂网络是对复杂系统的拓扑抽象,有向加权网络是指边具有方向和权值的一种复杂网络模型。首先获取到软件系统的源代码,利用工具通过逆向工程得到UML类图,或者在软件设计开发的正向过程中得到软件系统的UML类图。然后利用已有工具将类图转化为有向网络图,最后根据类图中类与类之间关系的不同,对有向网络的节点之间的边进行加权,具体加权规则如表1所示。其中,类之间的关系的耦合性越强,加权权重越大。表1加权规则关系名称权重备注依赖关系A关联关系B聚合关系C-组合关系C+强聚合继承关系Dextends实现关系Eimplements其中,A<B<C-<C+<D<E。节点的连接度节点的连接度是复杂网络研究中的一个重要的参数,刻画出节点在网络中的重要性,反映出网络结构是否均匀分布。在有向图中,节点的连接度定义为节点的出度和入度之和。耦合性是面向对象的软件系统中最重要的内部属性,描述类或对象与其他类或对象关联的紧密程度,耦合度可以用节点的连接度来表示。本发明根据软件有向加权网络中的边的权重重新定义节点的连接度,即为与节点直接相连的所有边的权重之和。这里节点i的连接度用pi表示。节点的抽象度在面向对象的系统中,类的类型与其所处的抽象层次也关系着类的重要性。抽象层次越高,类的抽象程度就越高,更容易被重用;而抽象层次越低,类的实例化程度越高,只能用于解决特定的具体问题。连接度主要用于描述面向对象的系统中类与其相关联的类之间的横向联系,而抽象度则反映类在纵向层次(继承关系)上的有序性,用ai来表示,可以使用C&K度量方法中的DIT指标来计算,即ai=|DITi|+1,这里|DITi|表示节点i代表的类或对象的继承树深度的值。软件网络结构熵香农提出的信息熵很适合度量无序空间中信息的不确定性,反映其有序程度,因此,根据香农提出的信息熵的定义和公式,将其扩展到软件系统结构的度量。假设在拓扑形式、边界条件和作用荷载给定的系统(包含n个组成元素即n个节点)结构中,第i个元素具有的应变能力为qi,那么系统结构的总应变能力为令λi=qi/Q(结构应变能的分布率),则有且λi≥0(完备性和非负性)。得到软件系统(软件网络)结构熵的公式为在有向加权网络中提取的度量指标的基础上,分别用节点的连接度pi和节点的抽象度ai替换这里的qi进行软件网络结构熵的计算。度量方法对于一个给定的软件的有向加权网络,利用节点的连接度和抽象度作为度量指标,可以计算出软件结构有序度的评价系数Rs,下面给出计算结构有序度的算法:为了消除系统规模(类的个数)对结构有序性造成的影响,引入一个新的参数定义如下:R=1-E/Emax(0≤R<0.5)。计算步骤:(1)分别计算连接度和抽象度的总值(2)分别计算最大熵值Emax1=lnP,Emax2=lnA(3)分别计算个体实现概率值λi1=pi/P,λi2=ai/A(4)分别计算个体熵值Ei1=-λi1lnλi1,Ei2=-λi2lnλi2(5)分别计算总熵值(n为网络中节点总个数)(6)分别计算连接度和抽象度对应的评价系数值(7)计算系统结构有序度评价系数Rs=0.5R1+0.5R2如果系统的结构是同构的,即均匀分布的,表现为所有节点具有相同的连接度和抽象度,此时,Rs的值为0,系统的结构的不确定性程度最高,整体呈现出“无序”的状态;如果系统的结构是异构的,非均匀分布的,表现为系统中有少数的“中心”节点即连接度很大的节点存在,而大多数节点只有很小的连接度;另一方面,存在少数抽象度很高的节点,而大多数节点只有较小的抽象度,此时,Rs的值较大,表明结构的不确定性程度较低,整体呈现出一种“有序”状态,便于控制和管理。(2)软件结构的复杂性度量软件复杂性:软件的复杂性是指分析、设计、测试、维护和修改软件的困难程度,软件的复杂性可以分为软件内部结构的复杂性和软件外部特征的复杂性。软件内部结构复杂性是软件的静态复杂性,而软件外部特征复杂性是软件的动态复杂性。在进行软件结构复杂度度量时,可以采用现有的结构复杂度度量方法,如以网络的节点波及度作为复杂度评价指标,也可以采用改进的复杂度度量方法。其中,改进的复杂性度量方法如下:将软件转化为有向加权网络,以有向加权网络的系统平均波及度作为软件结构复杂性的度量指标。具体如下:节点波及度在图论中,定义集合T(v)为节点v的可达集(通过有向路可以到达的节点集合),波及度为T(v)中元素的个数,记为|T(v)|。可达集可通过计算有向图的传递闭包(Warshall算法)或者深度优先遍历算法(有向图以邻接矩阵的方式输入)来求得。本发明将根据有向加权网络中边的权重改进节点波及度的计算方法为,对于节点v的可达集中的每个节点,首先计算节点v到该节点所经过的有向边的个数m及其权重之和d,再计算d除以m即d/m,最后每个节点的d/m的值相加即可得到有向加权网络中节点的波及度|T(v)|。节点的连接度表示直接关联节点的数目,与连接度不同,波及度反映给定类或模块直接和间接依赖的类或模块的总数,刻画了节点对整个网络的影响程度。从软件缺陷追踪的角度来看,如果是在类或模块v中发现缺陷,却不知道该缺陷的源点,那么|T(v)|就是最坏的情况下检测类或模块所需要花费的代价。因此,如果一个类或模块具有较大的波及度,那么其潜在出错的概率也比较大。另一方面,类或模块的波及度也反映了构造它所需要花费的代价,因为功能较复杂的类或模块一般要依赖已经构造好的且相对简单易重用的类或模块,波及度越大说明其依赖的类或模块越多,构造代价(构造复杂度)越大,出错概率越高。系统平均波及度对于整个软件网络来说,系统的构造复杂度可以用系统的平均波及度来度量,定义如下V为节点集合,表示波及度为1的节点(出度为0)的个数,|V|为节点总个数,Vi表示第i个节点。波及度能够描述类之间直接和间接的依赖关系,反映结构的复杂程度,因此,系统的平均波及度可以表征系统范围内的类之间依赖关系(静态结构)的复杂度。度量方法通过计算有向加权网络中节点的波及度,进而得到系统的平均波及度,系统的平均波及度即可直接作为量化度量软件结构复杂性的依据。(3)软件安全性度量通过对于软件结构的有序性和复杂性的度量,得到量化的值,即软件结构的有序度和复杂度的值,通过具体的实验和反复的测试,将得到软件结构有序度和复杂度的安全域,通过该值域实现对于软件设计安全性的量化评估。因此,对于一个给定的软件系统,根据以上方法计算其结构的有序度和复杂度,若得到的值在安全域内,便可以认为该软件的设计比较合理,具有较高的安全性,否则,说明软件的设计需要优化,可能产生缺陷漏洞。综上,本发明将软件抽象为有向加权网络模型作为度量基础,通过有向加权网络,改进节点的连接度的计算方法,并提出节点的抽象度作为度量指标,扩展信息熵得到软件网络结构熵,根据度量指标结合软件网络结构熵计算方法得到软件结构有序性的度量方法;同时,还改进了节点波及度的计算方法,以系统平均波及度为指标,量化软件的结构复杂性。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1