CN105045574A - 一种基于复杂网络故障传播的软件关键函数辨识方法 - Google Patents
一种基于复杂网络故障传播的软件关键函数辨识方法 Download PDFInfo
- Publication number
- CN105045574A CN105045574A CN201510355506.9A CN201510355506A CN105045574A CN 105045574 A CN105045574 A CN 105045574A CN 201510355506 A CN201510355506 A CN 201510355506A CN 105045574 A CN105045574 A CN 105045574A
- Authority
- CN
- China
- Prior art keywords
- node
- software
- function
- network
- subfunction
- 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.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种基于复杂网络的软件关键函数辨识方法:步骤一、根据源代码将程序进行子函数和调用关系提取,抽象成软件结构的网络图;步骤二、根据每个子函数被调用执行的概率赋予每条边一定的权重w,此权重为函数间级联故障的失效概率;步骤三、分析软件的拓扑结构特征,统计每个节点的入度和出度值;所述的节点的入度值是指此函数被其他函数调用的次数、出度值是指此函数调用其他函数的次数;步骤四、对软件网络的每个节点进行级联失效仿真实验,统计每个节点失效稳定后软件网络的最大连通子图的节点数目G,即关键度;步骤五、将G进行从小到大进行排序,得到各函数关键度。本发明简单可行,相比传统方法能够精确识别软件的关键函数。
Description
技术领域
本发明涉及一种软件关键函数辨识方法,尤其是涉及一种基于复杂网络故障传播的软件关键函数辨识方法。
背景技术
缺陷存在于软件全生命周期的各个阶段,会产生错误和冗余,导致系统或设备故障,甚至造成经济损失。随着信息和电子技术的不断发展,软件系统的复杂度越来越高,一个极小的错误就可能引发灾难性的后果。因此,提高软件质量,保证软件的可靠稳定运行成为软件工程面临的亟待解决的问题之一。
自1998和1999年小世界效应和无标度特征被发现以来,复杂网络科学在近十年里迅速发展,掀起了认识现实世界规律和本质的研究热潮。软件系统是由多个功能实体相互关联、共同作用构成的一类复杂系统。相关研究表明,软件系统内部结构并不是随机的,也具有小世界效应和无标度特性。因此,认识和控制软件复杂性就成为极其重要且具挑战性的问题。根据不同的粒度单元(如类、包、库、函数等)与单元之间不同的交互关系(调用、继承、聚合等),可将软件系统抽象成复杂网络,并运用复杂网络的相关理论对软件系统进行特征和结构分析,如通过软件结构度量其复杂度(C&K度量方法和MOOD度量方法);通过减少测试用例数量提高测试效率等。函数作为软件重要的粒度实体,其可靠性直接影响着整个软件系统的稳定运行。某个函数失效,则会导致其上层调用函数的失效,由此产生级联故障,甚至导致整个软件系统的崩溃。因此,寻找软件系统的关键函数,并对关键函数进行优化和监测,能在一定程度上保证软件系统的可靠运行。
目前,基于复杂网络理论的关键节点辨识方法主要是针对系统的静态结构进行的,如节点的度数、介数等指标。这种静态指标并不能表征系统的动力学过程,且评判标准过于简单,并不适合软件系统的动态执行过程。软件系统的函数与函数之间存在着调用与被调用的相互联系,若某个函数A失效,调用其的函数B亦会受到影响,有可能失效;函数B的失效又可能导致调用其的函数C失效;如此的失效传播过程会产生级联失效,有可能导致整个软件系统的崩溃。因此,根据动力学传播过程辨识关键函数更符合实际软件系统的特点,能更有效地控制失效源头。
对于函数级的粒度实体,将软件函数看做节点,函数之间的调用关系看做有向边,最终可得到一个有向无权网络。但是,对于真实的软件系统,函数内部往往含有选择结构的程序,如if判断语句和switch分支语句等。这些选择语句内部调用的函数需要满足一定条件才能被执行,若某个被调用的函数失效,其上层函数未必会失效。因此,采用故障传播方法辨识关键函数时,需要考虑一种新的概率失效复杂网络模型。
发明内容
本发明所要解决的技术问题,就是提供一种基于复杂网络故障传播的软件关键函数辨识方法,提出一种更符合实际软件系统的概率失效网络模型,利用复杂网络的故障动力学过程对软件网络进行可靠性评价,分析不同节点失效对整个软件系统的影响,得到关键函数列表,从而为提升软件系统的可靠和稳定运行提供依据。
解决上述技术问题,本发明采用如下的技术方案:
一种基于复杂网络的软件关键函数辨识方法,其特征是包括如下步骤:
步骤一、根据源代码将软件系统(程序)进行子函数和调用关系提取,抽象成软件结构的网络图;其中,子函数代表节点,子函数间的调用关系代表边;
步骤二、根据每个子函数被调用执行的概率赋予每条边一定的权重w,此权重为函数间级联故障的失效概率;
步骤三、分析软件的拓扑结构特征,统计相关静态结构指标,包括每个节点的入度和出度值;
所述的节点的入度值是指此函数被其他函数调用的次数、出度值是指此函数调用其他函数的次数;
步骤四、对软件网络的每个节点进行级联失效仿真实验,统计每个节点失效稳定后软件网络的最大连通子图的节点数目G,即关键度;
步骤五、针对每个节点在步骤四产生的最大连通子图节点数目G进行从小到大进行排序,得到软件各个函数的关键度;其中,G越小,则说明此函数失效对整个软件的影响越大,即此函数越重要,应重点保护与控制,以保证软件系统的高可靠运行。
所述的步骤二具体如下:
若被调用子函数不在选择语句中,则边权为1;若被调用子函数在选择语句中,则根据所在分支被执行的概率分配权重w;
(以往抽象出的软件结构网络中,边的权重往往代表子函数被调用的次数,但这种网络模型仅能分析软件系统的静态结构和特征;软件系统的子函数多含有if判断语句和switch分支语句,若子函数位于这些选择语句中,则这些子函数不一定被调用,因此这些被调用的子函数失效未必会导致上层子函数失效;为考虑子函数之间的级联失效过程,本发明提出了一种新的加权网络:网络的节点仍为子函数,边为子函数之间的调用关系,而边权则根据子函数被调用的概率确定,如上所述)
所述的步骤四具体如下:
级联失效仿真实验:采用计算机模拟的方法对软件网络的故障传播过程进行模拟:
首先移除一个网络节点i,以模拟函数i的失效;此时,调用函数i的上层函数j会以概率1/wij失效,wij表示节点i和节点j之间连边的权重;进而,调用函数j的各上层函数k会以概率1/wjk失效……;直至整个网络中再无节点失效,则整个级联失效过程结束;
计算此时整个网络的最大连通子图的节点数目G;
网络遭受攻击后,往往会产生多个子图,这些子图之间没有任何连边,这些子图中具有的节点数目最多的一个子图称为最大连通子图;
为保证结果的可信性,对每个节点重复100次故障实验,取效率平均值作为其关键度评价指标。
本发明的基本思想是:将软件系统的函数抽象为网络的节点,将函数之间的调用关系抽象为节点之间的连边,建立软件复杂网络模型。基于此模型,采用故障传播过程统计网络每个节点失效对整个系统的影响程度(用最终网络的最大连通子图的节点数目G来衡量),实现对系统各个函数的关键度进行排序,得到关键函数列表,为保证软件系统的稳定可靠运行提供依据。
本发明具有以下优点和积极效果:
1)本发明提供了一种更加符合实际软件系统的网络模型,为分析软件系统的动力学过程提供新的思路;
2)本发明基于故障传播原理对软件系统的关键子函数进行辨识,充分考虑了软件的动态过程,更符合实际软件系统的特点。
3)本发明对软件系统的子函数进行关键度排序,为软件的可靠稳定运行提供了保障和依据。
附图说明
图1是本发明所述方法的流程图;
图2是本发明所述的级联失效仿真实验流程图;
图3是本发明实施例的某简单嵌入式源代码;
图4是本发明实施例应用于某简单嵌入式代码所抽象的软件结构网络图;
图5(a)是本发明实施例所抽象的软件结构网络的每个节点入度值;
图5(b)是本发明实施例所抽象的软件结构网络的每个节点出度值;
图6(a)是本发明应用于某简单嵌入式软件所得的网络各节点关键度排序;
图6(b)是失效概率都为1时应用于某简单嵌入式软件所得的网络各节点关键度排序。
具体实施方式
下面将结合附图和具体实施例对本发明做进一步的详细说明。
本发明实施例所应用的具体例子是某简单的嵌入式程序,为方便使用,只列出了程序中只包含子函数的语句,如图3所示。
本发明的基于复杂网络的软件关键函数辨识方法,包括如下步骤:
步骤1,根据源代码对程序进行子函数和调用关系提取,抽象成软件系统的结构网络图,如图4所示。
图4中包含15个节点和17有向边,其中节点代表嵌入式软件程序中的子函数,有向边代表子函数之间的调用关系,其中箭头指向的函数是被调用的子函数。
步骤2,根据每个子函数被调用执行的概率赋予网络有向边一定的权重值w,此权重值表示调用函数之间的失效概率。
若两函数间是直接调用,这权值为1;若两函数间的调用是包含在选择语句中,即if判断语句或switch分支语句,则权值根据选择分支的多少确定。
如RS_232函数直接调用RS232_init、Trans和Rece等函数,则RS_232函数指向RS232_init、Trans和Rece函数的边权均为1,即RS232_init、Trans和Rece三个函数中的一个失效,一定会导致RS_232函数失效。
又如,RS_232函数通过if判断语句调用Led_on和Led_off函数,则RS_232函数指向Led_on和Led_off函数的权值为0.5,即Led_on函数失效,RS_232函数不一定失效(失效概率定为0.5)。
再如,Led_on函数通过switch分支语句调用Led1_on、Led2_on、Led3_on和Led4_on函数,且有4个分支,则Led_on函数指向Led1_on、Led2_on、Led3_on和Led4_on函数的边权为0.25。
整个网络边权值如图4中的数字所示,未标示的边权默认为1。
步骤3,分析软件的拓扑结构特征,统计相关静态结构指标,对软件网络进行静态特征分析,即每个节点的出度和入度值,如图5(a)和5(b)所示。
节点的入度值是指此函数被其他函数调用的次数,出度值是指此函数调用其他函数的次数。一般来说,入度值越大的函数在整个软件系统中越重要,这是因为入度值越大的函数,被调用的次数越多,若失效则会对调用它的函数产生较大的影响。如本实施例中的RS_232函数是片段程序的主函数,具有最高的出度值6,即调用了近半数的函数;而Delay、Led1_on和Led1_off函数则具有较高的入度值,说明这些函数被调用的次数较多,若失效则会对整个网络产生较大的影响。
步骤4,对软件网络进行基于故障传播的关键子函数辨识
对软件网络的每个节点进行级联失效仿真实验,统计每个节点失效稳定后软件网络的最大连通子图的节点数目G,即关键度;
级联失效仿真实验:采用计算机模拟的方法对软件网络的故障传播过程进行模拟:
按照节点的编号依次从网络中移除,且每次只移除一个节点;节点失效后,指向失效节点的节点会以概率w(边权值)失效,从而产生新的失效节点;新的失效节点又会导致指向其的节点以概率w失效,……;直到整个网络中不再产生失效节点为止。
此时的网络达到稳定状态,即1次仿真实验结束;记录此时网络中最大连通子图的剩余节点数G。
G表示某节点失效导致的网络最终剩余的有效节点的规模,可以表征此节点的重要性,即G越小说明节点带来的级联故障越严重,节点越重要,更需要加强保护和控制。
为保证结果的可信性,对每个节点进行100次实验,最终求取G的平均值。
步骤五,对每个节点所得的G值进行从小到大进行排序,即可得到软件的子函数关键度排序表,如图6(a)所示。
为展示本发明方法的优越性,对比了传统结构网络所得的关键子函数排序结果。首先令所有的节点间失效概率权为1,即某函数失效,则调用此函数的上层函数也一定失效;然后按照本发明的步骤四、步骤五以及附图2所示的方法进行实验,得到的结果如图6(b)所示。从图6(a)和图6(b)可知,传统方法虽然能识别出排名较前的关键子函数,但排名中间的函数关键度无法区分;而本发明方法所得到的函数的关键度具有明显的大小之分,能够更好地实现软件的关键子函数识别。
Claims (4)
1.一种基于复杂网络的软件关键函数辨识方法,其特征是包括如下步骤:
步骤一、根据源代码将软件系统进行子函数和调用关系提取,抽象成软件结构的网络图,其中,子函数代表节点,子函数间的调用关系代表边;
步骤二、根据每个子函数被调用执行的概率赋予每条边一定的权重w,此权重为函数间级联故障的失效概率;
步骤三、分析软件的拓扑结构特征,统计相关静态结构指标,包括每个节点的入度和出度值;
所述的节点的入度值是指此函数被其他函数调用的次数、出度值是指此函数调用其他函数的次数;
步骤四、对软件网络的每个节点进行级联失效仿真实验,统计每个节点失效稳定后软件网络的最大连通子图的节点数目G,即关键度;
步骤五、针对每个节点在步骤四产生的最大连通子图节点数目G进行从小到大进行排序,得到软件各个函数的关键度;其中,G最小者即为软件关键函数。
2.根据权利要求1所述的基于复杂网络的软件关键函数辨识方法,其特征是:所述的步骤二具体如下:
若被调用子函数不在选择语句中,则边权为1;若被调用子函数在选择语句中,则根据所在分支被执行的概率分配权重w。
3.根据权利要求1所述的基于复杂网络的软件关键函数辨识方法,其特征是:所述的步骤四具体如下:
级联失效仿真实验:采用计算机模拟的方法对软件网络的故障传播过程进行模拟:
首先移除一个网络节点i,以模拟函数i的失效;此时,调用函数i的上层函数j会以概率1/wij失效,wij表示节点i和节点j之间连边的权重;进而,调用函数j的各上层函数k会以概率1/wjk失效……;直至整个网络中再无节点失效,则整个级联失效过程结束;
计算此时整个网络的最大连通子图的节点数目G。
4.根据权利要求3所述的基于复杂网络的软件关键函数辨识方法,其特征是:所述的级联失效仿真实验对每个节点重复100次故障实验,取效率平均值作为其关键度评价指标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510355506.9A CN105045574A (zh) | 2015-06-24 | 2015-06-24 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510355506.9A CN105045574A (zh) | 2015-06-24 | 2015-06-24 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105045574A true CN105045574A (zh) | 2015-11-11 |
Family
ID=54452139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510355506.9A Pending CN105045574A (zh) | 2015-06-24 | 2015-06-24 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105045574A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106127306A (zh) * | 2016-06-17 | 2016-11-16 | 北京理工大学 | 一种高共享性Rete网络构建方法 |
CN106775695A (zh) * | 2016-12-08 | 2017-05-31 | 北京航空航天大学 | 一种基于边不稳定性的软件函数变更预测系统及方法 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN109597752A (zh) * | 2018-10-19 | 2019-04-09 | 中国船舶重工集团公司第七六研究所 | 基于复杂网络模型的故障传播路径仿真方法 |
CN109656615A (zh) * | 2018-12-28 | 2019-04-19 | 四川新网银行股份有限公司 | 一种基于代码方法重要程度进行权限预警的方法 |
CN109918129A (zh) * | 2019-01-14 | 2019-06-21 | 浙江工商大学 | 一种基于g核分解的软件关键函数识别方法 |
CN110147309A (zh) * | 2018-02-11 | 2019-08-20 | 北京京东尚科信息技术有限公司 | 信息生成方法和装置 |
CN110147245A (zh) * | 2019-05-23 | 2019-08-20 | 广东电网有限责任公司 | 软件模块的运维管理方法、装置、设备及可读存储介质 |
CN111913702A (zh) * | 2020-08-11 | 2020-11-10 | 湖北大学 | 一种基于图神经网络的软件系统中关键类的识别方法 |
CN112231175A (zh) * | 2020-10-14 | 2021-01-15 | 北京航空航天大学 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
CN115860486A (zh) * | 2023-02-22 | 2023-03-28 | 中国民用航空总局第二研究所 | 机场运行重要程度的确定方法、装置、电子设备及介质 |
CN117311806A (zh) * | 2023-11-30 | 2023-12-29 | 南昌航空大学 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007093960A2 (en) * | 2006-02-13 | 2007-08-23 | Kovacs Istvan | Method for analyzing the fine structure of networks |
CN104298593A (zh) * | 2014-09-23 | 2015-01-21 | 北京航空航天大学 | 一种基于复杂网络理论的soa系统可靠性评价方法 |
-
2015
- 2015-06-24 CN CN201510355506.9A patent/CN105045574A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007093960A2 (en) * | 2006-02-13 | 2007-08-23 | Kovacs Istvan | Method for analyzing the fine structure of networks |
CN104298593A (zh) * | 2014-09-23 | 2015-01-21 | 北京航空航天大学 | 一种基于复杂网络理论的soa系统可靠性评价方法 |
Non-Patent Citations (2)
Title |
---|
刘建国等: "《复杂网络中节点重要性排序的研究进展》", 《物理学报》 * |
王健等: "《复杂软件的级联故障建模》", 《计算机学报》 * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106127306A (zh) * | 2016-06-17 | 2016-11-16 | 北京理工大学 | 一种高共享性Rete网络构建方法 |
CN106775695B (zh) * | 2016-12-08 | 2020-11-10 | 北京航空航天大学 | 一种基于边不稳定性的软件函数变更预测系统及方法 |
CN106775695A (zh) * | 2016-12-08 | 2017-05-31 | 北京航空航天大学 | 一种基于边不稳定性的软件函数变更预测系统及方法 |
CN110147309A (zh) * | 2018-02-11 | 2019-08-20 | 北京京东尚科信息技术有限公司 | 信息生成方法和装置 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN108628600B (zh) * | 2018-05-08 | 2020-12-15 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN109597752A (zh) * | 2018-10-19 | 2019-04-09 | 中国船舶重工集团公司第七六研究所 | 基于复杂网络模型的故障传播路径仿真方法 |
CN109656615A (zh) * | 2018-12-28 | 2019-04-19 | 四川新网银行股份有限公司 | 一种基于代码方法重要程度进行权限预警的方法 |
CN109918129A (zh) * | 2019-01-14 | 2019-06-21 | 浙江工商大学 | 一种基于g核分解的软件关键函数识别方法 |
CN109918129B (zh) * | 2019-01-14 | 2022-12-23 | 深圳市准数科技有限公司 | 一种基于g核分解的软件关键函数识别方法 |
CN110147245A (zh) * | 2019-05-23 | 2019-08-20 | 广东电网有限责任公司 | 软件模块的运维管理方法、装置、设备及可读存储介质 |
CN111913702A (zh) * | 2020-08-11 | 2020-11-10 | 湖北大学 | 一种基于图神经网络的软件系统中关键类的识别方法 |
CN111913702B (zh) * | 2020-08-11 | 2022-04-01 | 湖北大学 | 一种基于图神经网络的软件系统中关键类的识别方法 |
CN112231175A (zh) * | 2020-10-14 | 2021-01-15 | 北京航空航天大学 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
CN112231175B (zh) * | 2020-10-14 | 2022-05-13 | 北京航空航天大学 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
CN115860486A (zh) * | 2023-02-22 | 2023-03-28 | 中国民用航空总局第二研究所 | 机场运行重要程度的确定方法、装置、电子设备及介质 |
CN117311806A (zh) * | 2023-11-30 | 2023-12-29 | 南昌航空大学 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
CN117311806B (zh) * | 2023-11-30 | 2024-03-29 | 南昌航空大学 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105045574A (zh) | 一种基于复杂网络故障传播的软件关键函数辨识方法 | |
EP1899876B1 (en) | System and method for using model analysis to generate directed test vectors | |
CN104794049B (zh) | 应用程序测试方法和装置 | |
CN110618924B (zh) | 一种web应用系统的链路压力测试方法 | |
CN102768641B (zh) | 网页测试要素选择装置和网页测试要素选择方法 | |
CN105955878A (zh) | 服务器端的测试方法及系统 | |
CN102799822A (zh) | 基于网络环境软件运行安全性度量与评估方法 | |
CN102035667A (zh) | 网络可靠性评估方法、装置和系统 | |
CN105224460A (zh) | 一种基于插装技术统计测试覆盖率的方法 | |
CN103605787A (zh) | 继电保护评价分析方法及系统 | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
Garmabaki et al. | Multi up-gradation software reliability growth model with faults of different severity | |
CN106682507A (zh) | 病毒库的获取方法及装置、设备、服务器、系统 | |
Bell et al. | On effectiveness of pairwise methodology for testing network-centric software | |
Vanciu et al. | Hidden dependencies in software systems | |
CN104898039B (zh) | 基于故障传播概率模型的故障模式优选方法 | |
CN109684734A (zh) | 一种检查模型矩阵的方法 | |
CN103455672B (zh) | 一种fpga仿真测试用例自动化回归方法 | |
CN106021113A (zh) | 一种精准测试的实现方法 | |
KR102166116B1 (ko) | 원자력발전소의 지진사건 확률론적안전성평가를 위한 부분상관성을 갖는 기기들의 고장조합확률들로부터 기기고장사건들의 확률 산출 방법 및 장치 | |
CN111782532A (zh) | 一种基于网络异常节点分析的软件故障定位方法及系统 | |
CN110287700A (zh) | 一种iOS应用安全分析方法及装置 | |
CN110297778A (zh) | 一种软件测试方法和软件测试装置 | |
CN111176253A (zh) | 一种基于蒙特卡洛的飞行控制律自动评估方法 | |
CN110597726A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20151111 |