CN117311806B - 基于加权有向耦合网络的软件结构风险识别方法与装置 - Google Patents
基于加权有向耦合网络的软件结构风险识别方法与装置 Download PDFInfo
- Publication number
- CN117311806B CN117311806B CN202311616552.0A CN202311616552A CN117311806B CN 117311806 B CN117311806 B CN 117311806B CN 202311616552 A CN202311616552 A CN 202311616552A CN 117311806 B CN117311806 B CN 117311806B
- Authority
- CN
- China
- Prior art keywords
- node
- coupling
- complexity
- software
- nodes
- 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.)
- Active
Links
- 230000008878 coupling Effects 0.000 title claims abstract description 245
- 238000010168 coupling process Methods 0.000 title claims abstract description 245
- 238000005859 coupling reaction Methods 0.000 title claims abstract description 245
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000013139 quantization Methods 0.000 claims abstract description 26
- 238000012163 sequencing technique Methods 0.000 claims abstract description 9
- 238000012216 screening Methods 0.000 claims abstract description 6
- 230000006870 function Effects 0.000 claims description 92
- 238000004364 calculation method Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 claims description 19
- 238000004458 analytical method Methods 0.000 claims description 12
- 239000002243 precursor Substances 0.000 claims description 9
- 230000001186 cumulative effect Effects 0.000 claims description 7
- 238000005315 distribution function Methods 0.000 claims description 7
- 238000013016 damping Methods 0.000 claims description 4
- 238000010276 construction Methods 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 3
- 238000013507 mapping Methods 0.000 claims 2
- 230000001939 inductive effect Effects 0.000 claims 1
- 238000013461 design Methods 0.000 abstract description 5
- 238000012545 processing Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000011002 quantification Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种基于加权有向耦合网络的软件结构风险识别方法与装置,该方法包括:根据软件结构的源代码中的全局数据结构和软件函数进行节点建模;根据软件函数的复杂度量化指标计算出节点复杂度权值;利用网络节点之间的有向耦合关系边计算出节点耦合度权值;基于节点复杂度权值和节点耦合度权值分析节点的网络结构,并根据节点的关联结构计算出对应的结构风险度指标;将结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现软件结构的风险识别。本发明采用节点耦合度与节点复杂度评价节点的结构风险性,为提升软件可靠性与安全性设计水平提供必要技术方法。
Description
技术领域
本发明涉及程序分析与软件工程技术领域,特别涉及一种基于加权有向耦合网络的软件结构风险识别方法与装置。
背景技术
随着软件技术的迅猛发展,软件的形态呈现出规模化、复杂化、开放式的发展。巨型软件、复杂软件的出现,导致软件结构已由传统的线性简单网络结构向着非线性的复杂网络结构转变。软件工程人员发现,软件复杂度与耦合度与软件结构风险存在显著正相关性,随着软件结构越是复杂,耦合度越紧密,一旦这些高度耦合的组件发生失效,软件稳定性将受到灾难性的打击,甚至导致软件程序整体崩溃。软件模块的高复杂和高耦合导致软件结构更为脆弱和不安全成为当前行业面临的一大挑战。
因此,如何有效地识别出软件结构中高风险的模块,成为行业研究人员关注的一个热点。如果能够在软件编码阶段获取软件模块中关于风险的先验知识,这种信息一方面能够为软件开发人员提供软件结构风险的预警,为软件设计人员优化软件架构和调整软件结构提供了重要参考依据。另一方面,该信息可被作为缺陷预测的关键信息源,可以有效地指导软件测试人员对软件模块测试的优先级进行决策,帮助软件测试以较小的代价尽早地发现软件缺陷。
传统软件关键模块识别方法主要采用软件度量指标评价方法,如统计软件模块的复杂度,扇入/扇出度等指标。但是,这些度量指标仅对软件结构的粗粒度统计,不能细粒度地体现软件模块与其他模块的耦合关系。对软件模块之间的耦合性未有充分考虑,难以适用复杂软件的结构风险度的评价。一些学者针对该问题采用复杂网络的思想,试图利用软件结构网络模型,通过分析复杂网络的“小世界”和“无标度”特性,以准确识别软件结构中关键的模块。但在当前的软件结构网络模型更多偏向考虑网络的连通性以确定软件结构中关键的模块节点或关键路径。对自身节点的复杂度却考虑不足,存在软件节点复杂度风险识别不精确问题。
因此,如何同时考虑模块自身复杂度与模块影响其他模块的耦合性两个方面,提供一种高效、准确的软件结构风险定量识别的技术,成为了当前软件开发和软件测试行业均存在的迫切需求。
发明内容
基于此,本发明的目的是提供一种基于加权有向耦合网络的软件结构风险识别方法与装置,以至少解决上述技术中的不足。
本发明提出一种基于加权有向耦合网络的软件结构风险识别方法,包括:
提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模;
提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值;
建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值;
基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标;
将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
进一步的,提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行节点建模的步骤包括:
识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模。
进一步的,提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值的步骤包括:
从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
按照以下公式计算出所述节点的节点复杂度权值,并将/>节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间。
进一步的,建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值的步骤包括:
以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
构建加权有向耦合网络模型,将所述节点与有向耦合关系边组合,实现节点的关联边的构建,完成加权有向耦合网络模型,以得到对应的节点耦合度权值。
进一步的,所述综合耦合强度的表达式为:
;
式中,、/>、/>、/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的耦合强度,/>、/>、/>以及/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的权重系数,且满足/>的约束。
进一步的,基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标的步骤包括:
基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度;
将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标。
进一步的,所述节点影响度的计算公式为:
;
式中,为第i个节点的前驱节点集合,/>为节点i与前驱节点k的综合耦合权值,/>为节点k与该节点的后继节点集合/>的所有边的权值总和;
所述结构风险度指标的计算公式为:
;
式中,d为阻尼因子,取值为0.85,为所有节点复杂度的总和,/>表示节点复杂度权值。
本发明还提出一种基于加权有向耦合网络的软件结构风险识别装置,包括:
代码解析模块,用于提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模;
节点复杂度计算模块,用于提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值;
节点耦合度计算模块,用于建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值;
结构风险识别模块,用于基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标;
风险排序模块,用于将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
进一步的,所述代码解析模块包括:
代码解析单元,用于识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
节点建模单元,用于抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模。
进一步的,所述节点复杂度计算模块包括:
指标提取单元,用于从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
节点复杂度计算单元,用于按照以下公式计算出所述节点的节点复杂度权值,并将/>节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间。
进一步的,所述节点耦合度计算模块包括:
数据统计单元,用于以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
强度计算单元,用于将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
节点耦合度计算单元,用于构建加权有向耦合网络模型,并将所述节点与有向耦合关系边组合构建网络,以得到对应的节点耦合度权值。
进一步的,所述结构风险识别模块包括:
节点影响度计算单元,用于基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度;
结构风险识别单元,用于将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标。
本发明当中的基于加权有向耦合网络的软件结构风险识别方法与装置,以软件函数的耦合性和复杂度作为关注点,将软件源代码抽象为加权有向耦合网络模型;采用节点耦合度与节点复杂度评价节点的结构风险性,以识别出软件结构中存在潜在风险的函数,为优化软件结构设计,为提升软件可靠性与安全性设计水平提供必要技术方法。
附图说明
图1为本发明第一实施例中的基于加权有向耦合网络的软件结构风险识别方法的流程图;
图2为图1中步骤S101的详细流程图;
图3为图1中步骤S103的详细流程图;
图4为图1中步骤S104详细流程图;
图5为本发明第二实施例中的基于加权有向耦合网络的软件结构风险识别装置的结构框图;
图6为本发明第三实施例中的计算机的结构框图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的若干实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
实施例一
请参阅图1,所示为本发明第一实施例中的基于加权有向耦合网络的软件结构风险识别方法,所述方法具体包括步骤S101至S105:
S101,提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模;
进一步的,请参阅图2,所述步骤S101具体包括步骤S1011~S1012:
S1011,识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
S1012,抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模。
在具体实施时,本实施例以网络开源的轻量级服务器Nginx软件为实施对象,实施对象信息如下表。
具体的,利用对应的代码解析模块识别Nginx源代码中的全局数据结构、变量与软件函数模块,以软件函数作为节点,函数包括的代码写入FunNode属性中,共标记出Nginx软件/>节点2662个;
进一步的,以全局数据结构作为节点,全局数据结构和变量对应的代码写入DataNode属性中。共标记出实施例Nginx软件/>节点4548个。
S102,提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值;
进一步的,所述步骤S102具体包括步骤S1021~S1022:
S1021,从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
S1022,按照以下公式计算出所述节点的节点复杂度权值,并将节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间。
在具体实施时,从节点的源代码中提取节点对应的5类函数的复杂度量化指标,包括代码规模、圈复杂度、嵌套深度、扇入、扇出度量,以作为加权有向耦合网络中节点的属性,如下表所示:
具体的, 计算出节点的节点复杂度权值,即为/>,并将节点的节点复杂度权值设为恒定值(在本实施例中,该恒定值为0),计算如下公式所示:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间,以ngx_http_grpc_eval节点为例,根据以上计算公式得到的Comp(ngx_http_grpc_eval)为0.6532。
依次对所有的节点进行Comp计算,得到实施例的节点复杂度,写入有向耦合网络模型的节点属性中,部分数据如下表所示:
S103,建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值;
进一步的,请参阅图3,所述步骤S103具体包括步骤S1031~S1033:
S1031,以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
S1032,将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
S1033,构建加权有向耦合网络模型,将所述节点与有向耦合关系边组合,实现节点的关联边的构建,完成加权有向耦合网络模型,以得到对应的节点耦合度权值。
在具体实施时,建立网络节点之间的有向耦合关系边,记为Edge。耦合反映软件结构中不同软件模块之间相互依赖的强弱程度,通过提取函数之间的控制耦合关系(CC)、数据耦合关系(DC)、公共耦合关系(PC)以及调用耦合关系(CR),确定节点之间的综合耦合度权值。
进一步的,通过软件结构建模模块扫描Nginx程序,实行数据流和控制流分析,从数据依赖关系图和控制依赖关系图分别获取,分析程序的控制遍历所有节点,以节点为对象,分别统计节点与其他节点之间的CC、DC、PC以及CR数据。其中,控制耦合关系通过分析程序的控制流图获得。如果控制依赖关系中的控制函数与函数中的控制流程的数据属于不同的函数模块,则在两个函数节点之间建立一条有向的控制耦合依赖。每次存在一次控制耦合,则控制耦合强度值增一;数据耦合关系通过分析程序的数据流图获得。如果数据依赖关系中的数据函数与函数中的数据流程的数据属于不同的函数模块,则在两个函数节点之间建立一条有向的数据耦合依赖。每存在一次数据耦合,则数据耦合强度值/>增一;公共耦合关系通过分析全程数据结构在程序中的共享信息获得。如果一个函数使用了一个全局变量或结构体,则在函数节点与数据节点之间建立一条有向的公共耦合依赖。每存在一次公共耦合,则公共耦合强度值/>增一;调用耦合关系通过分析函数在程序中内调用其他函数的信息获得。如果一个函数调用了另一个函数,则在两个函数表征的节点之间建立一条有向的调用耦合依赖。每存在一次调用耦合,则调用耦合强度值/>增一。
进一步的,计算综合耦合强度作为有向耦合边的权值。综合耦合强度,记为,融合四类耦合关系,所述综合耦合强度的表达式为:
;
式中,、/>、/>、/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的耦合强度,/>、/>、/>以及/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的权重系数,且满足/>的约束,设置为0.3,/>设置为0.2,/>设置为0.4,以及/>设置为0.1,部分数据如下表所示:
具体的,通过上述步骤获得软件结构对应图节点数据和边数据,通过软件结构建模模块输出加权有向耦合网络模型文件,以构建加权有向耦合网络模型。将上述步骤获取的节点与加权有向耦合边组合构建网络,可用表示,/>表示网络的函数节点,/>表示网络中的数据节点,/>表示边。
S104,基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标;
进一步的,请参阅图4,所述步骤S104具体包括步骤S1041~S1042:
S1041,基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度;
S1042,将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标。
在具体实施时,获取模型中所有节点结构风险性参数NRD。NRD为衡量加权有向耦合网络中各个节点对软件网络整体结构风险的贡献程度参数,NRD参数的计算基于节点耦合度与节点复杂度/>来综合考虑。
进一步的,定义节点影响度。在加权有向耦合网络中,一个节点通常会与多个其他节点存在耦合关系。为了将单个节点的多个耦合边进一步归纳,采用节点影响度,记为Nid,描述节点的耦合性产生的影响程度,计算如以下公式所示:
所述节点影响度的计算公式为:
;
式中,为第i个节点的前驱节点集合,/>为节点i与前驱节点k的综合耦合权值,/>为节点k与该节点的后继节点集合/>的所有边的权值总和,Nid强调从节点的前驱节点对节点产生的影响出发,体现节点在软件结构影响中的关键程度;
本实施例中一个典型节点的Nid数据计算结果如下表:
进一步的,遍历模型的节点,计算节点的结构风险性NSR,体现节点在加权有向耦合网络中节点自身复杂风险以及耦合关联风险的综合结构风险程度。NSR采用了PageRank衡量网页在搜索引擎中重要性排序的思路,将节点影响度Nid和节点复杂度Comp作为计算因子,实现节点风险重要度的量化,计算过程如下:
所述结构风险度指标的计算公式为:
;
式中,d为阻尼因子,取值为0.85,为所有节点复杂度的总和,/>表示节点复杂度权值,部分数据如下表所示:
S105,将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
在具体实施时,根据计算得到Nginx软件所有7210个节点的结构风险性NSR值,启动风险排序对所有节点按NSR值从大到小进行排序。
确定需要进行分析的软件结构风险较高的前K个软件函数。实施例中展示分析得到前20个结构风险最高的函数,如下表所示。
综上,本发明上述实施例当中的基于加权有向耦合网络的软件结构风险识别方法,以软件函数的耦合性和复杂度作为关注点,将软件源代码抽象为加权有向耦合网络模型;采用节点耦合度与节点复杂度评价节点的结构风险性,以识别出软件结构中存在潜在风险的函数,为优化软件结构设计,为提升软件可靠性与安全性设计水平提供必要技术方法。
实施例二
本发明另一方面还提出一种基于加权有向耦合网络的软件结构风险识别装置,请参阅图5,所示为本发明第二实施例中的基于加权有向耦合网络的软件结构风险识别装置,所述装置包括:
代码解析模块11,用于提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模;
进一步的,所述代码解析模块11包括:
代码解析单元,用于识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
节点建模单元,用于抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模。
节点复杂度计算模块12,用于提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值;
进一步的,所述节点复杂度计算模块12包括:
指标提取单元,用于从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
节点复杂度计算单元,用于按照以下公式计算出所述节点的节点复杂度权值,并将/>节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间。
节点耦合度计算模块13,用于建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值;
进一步的,所述节点耦合度计算模块13包括:
数据统计单元,用于以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
强度计算单元,用于将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
节点耦合度计算单元,用于构建加权有向耦合网络模型,将所述节点与有向耦合关系边组合,实现节点的关联边的构建,完成加权有向耦合网络模型,以得到对应的节点耦合度权值。
结构风险识别模块14,用于基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标;
进一步的,所述结构风险识别模块14包括:
节点影响度计算单元,用于基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度;
结构风险识别单元,用于将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标。
风险排序模块15,用于将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
上述各模块、单元被执行时所实现的功能或操作步骤与上述方法实施例大体相同,在此不再赘述。
本发明实施例所提供的基于加权有向耦合网络的软件结构风险识别装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
实施例三
本发明还提出一种计算机,请参阅图6,所示为本发明第三实施例中的计算机,包括存储器10、处理器20以及存储在所述存储器10上并可在所述处理器20上运行的计算机程序30,所述处理器20执行所述计算机程序30时实现上述的基于加权有向耦合网络的软件结构风险识别方法。
其中,存储器10至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器10在一些实施例中可以是计算机的内部存储单元,例如该计算机的硬盘。存储器10在另一些实施例中也可以是外部存储装置,例如插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital, SD)卡,闪存卡(Flash Card)等。进一步地,存储器10还可以既包括计算机的内部存储单元也包括外部存储装置。存储器10不仅可以用于存储安装于计算机的应用软件及各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。
其中,处理器20在一些实施例中可以是电子控制单元 (Electronic ControlUnit,简称ECU,又称行车电脑)、中央处理器(Central Processing Unit, CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器10中存储的程序代码或处理数据,例如执行访问限制程序等。
需要指出的是,图6示出的结构并不构成对计算机的限定,在其它实施例当中,该计算机可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明实施例还提出一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述的基于加权有向耦合网络的软件结构风险识别方法。
本领域技术人员可以理解,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或它们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (3)
1.一种基于加权有向耦合网络的软件结构风险识别方法,其特征在于,包括:
提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模,其中,提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行节点建模的步骤包括:
识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模;
提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值,其中,提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值的步骤包括:
从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
按照以下公式计算出所述节点的节点复杂度权值,并将/>节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间;
建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值,其中,建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值的步骤包括:
以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
构建加权有向耦合网络模型,将所述节点与有向耦合关系边组合,实现节点的关联边的构建,完成加权有向耦合网络模型,以得到对应的节点耦合度权值;
基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标,其中,基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标的步骤包括:
基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度,其中,所述节点影响度的计算公式为:
;
式中,为第i个节点的前驱节点集合,/>为节点i与前驱节点k的综合耦合权值,/>为节点k与该节点的后继节点集合/>的所有边的权值总和;
将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标,其中,所述结构风险度指标的计算公式为:
;
式中,d为阻尼因子,取值为0.85,为所有节点复杂度的总和,/>表示节点复杂度权值;
将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
2.根据权利要求1所述的基于加权有向耦合网络的软件结构风险识别方法,其特征在于,所述综合耦合强度的表达式为:
;
式中,、/>、/>、/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的耦合强度,/>、/>、/>以及/>分别为控制耦合、数据耦合、公共耦合以及调用耦合的权重系数,且满足/>的约束。
3.一种基于加权有向耦合网络的软件结构风险识别装置,其特征在于,包括:
代码解析模块,用于提取软件结构的源代码中的全局数据结构和软件函数,并根据所述全局数据结构和所述软件函数进行加权有向耦合网络中的节点建模,其中,所述代码解析模块包括:
代码解析单元,用于识别软件结构的源代码中的全局数据结构和软件函数,并以所述软件函数作为节点;
节点建模单元,用于抽取所述软件函数中存在的源代码信息,并以所述全局数据结构作为节点,以完成对应的节点建模;
节点复杂度计算模块,用于提取所述软件函数的复杂度量化指标,并根据所述复杂度量化指标计算出节点复杂度权值,其中,节点复杂度计算模块包括:
指标提取单元,用于从所述节点的源代码中提取函数的复杂度量化指标,以作为加权有向耦合网络中/>节点的属性;
节点复杂度计算单元,用于按照以下公式计算出所述节点的节点复杂度权值,并将/>节点的节点复杂度权值设为恒定值:
;
式中,、/>、/>、/>以及/>分别为节点Node代码函数、圈复杂度、嵌套深度、扇出与扇入5个复杂度指标参数标准化后的结果,Cdf为正态分布的累积分布函数,该函数将度量值映射到0-1区间;
节点耦合度计算模块,用于建立网络节点之间的有向耦合关系边,并利用所述有向耦合关系边计算出节点耦合度权值,其中,所述节点耦合度计算模块包括:
数据统计单元,用于以节点为对象,分别统计所述节点与其他节点之间的控制耦合关系数据、数据耦合关系数据、公共耦合关系数据以及调用耦合关系数据;
强度计算单元,用于将所述控制耦合关系数据、所述数据耦合关系数据、所述公共耦合关系数据以及所述调用耦合关系数据进行融合,以得到综合耦合强度;
节点耦合度计算单元,用于构建加权有向耦合网络模型,将所述节点与有向耦合关系边组合,实现节点的关联边的构建,完成加权有向耦合网络模型,以得到对应的节点耦合度权值;
结构风险识别模块,用于基于所述节点复杂度权值和所述节点耦合度权值分析节点的网络结构,并根据所述节点的关联结构计算出对应的结构风险度指标,其中,所述结构风险识别模块包括:
节点影响度计算单元,用于基于节点之间的耦合关系对单个节点的多个耦合边进行归纳,以得到对应的节点影响度,其中,所述节点影响度的计算公式为:
;
式中,为第i个节点的前驱节点集合,/>为节点i与前驱节点k的综合耦合权值,/>为节点k与该节点的后继节点集合/>的所有边的权值总和;
结构风险识别单元,用于将所述节点影响度和所述节点复杂度权值作为计算因子,以计算出对应的结构风险度指标,其中,所述结构风险度指标的计算公式为:
;
式中,d为阻尼因子,取值为0.85,为所有节点复杂度的总和,/>表示节点复杂度权值;
风险排序模块,用于将所述结构风险度指标按照预设排序规则进行排序,并从排序结果中筛选出目标软件函数,以实现所述软件结构的风险识别。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311616552.0A CN117311806B (zh) | 2023-11-30 | 2023-11-30 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311616552.0A CN117311806B (zh) | 2023-11-30 | 2023-11-30 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117311806A CN117311806A (zh) | 2023-12-29 |
CN117311806B true CN117311806B (zh) | 2024-03-29 |
Family
ID=89281555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311616552.0A Active CN117311806B (zh) | 2023-11-30 | 2023-11-30 | 基于加权有向耦合网络的软件结构风险识别方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117311806B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866893A (zh) * | 2012-09-24 | 2013-01-09 | 南京工业大学 | 基于中间语言il的遗产软件结构析取方法 |
CN105045574A (zh) * | 2015-06-24 | 2015-11-11 | 广东电网有限责任公司电力科学研究院 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
CN108536471A (zh) * | 2018-03-21 | 2018-09-14 | 北京航空航天大学 | 一种基于复杂网络的软件结构重要模块识别方法 |
CN108549816A (zh) * | 2018-03-30 | 2018-09-18 | 北京理工大学 | 一种基于有向加权网络的软件安全性的量化评估方法 |
CN109828925A (zh) * | 2018-06-25 | 2019-05-31 | 北京航空航天大学 | 一种基于软件网络结构特征的软件可靠性度量方法 |
CN110322122A (zh) * | 2019-06-13 | 2019-10-11 | 大连理工大学 | 基于类图的软件结构风险评估方法 |
CN110647412A (zh) * | 2019-09-17 | 2020-01-03 | 华东师范大学 | 空间飞行器控制系统软件可信性评估系统 |
CN110991805A (zh) * | 2019-11-05 | 2020-04-10 | 中国电力科学研究院有限公司 | 一种配电网风险薄弱点辨识方法和系统 |
CN111913702A (zh) * | 2020-08-11 | 2020-11-10 | 湖北大学 | 一种基于图神经网络的软件系统中关键类的识别方法 |
CN113490920A (zh) * | 2019-03-26 | 2021-10-08 | 西门子股份公司 | 一种评估代码设计质量的方法、装置和系统 |
CN115795475A (zh) * | 2022-11-11 | 2023-03-14 | 中国工商银行股份有限公司 | 软件系统风险的确定方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8769515B2 (en) * | 2009-03-23 | 2014-07-01 | International Business Machines Corporation | Semantic intensity based decomposition of software systems |
-
2023
- 2023-11-30 CN CN202311616552.0A patent/CN117311806B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866893A (zh) * | 2012-09-24 | 2013-01-09 | 南京工业大学 | 基于中间语言il的遗产软件结构析取方法 |
CN105045574A (zh) * | 2015-06-24 | 2015-11-11 | 广东电网有限责任公司电力科学研究院 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
CN108536471A (zh) * | 2018-03-21 | 2018-09-14 | 北京航空航天大学 | 一种基于复杂网络的软件结构重要模块识别方法 |
CN108549816A (zh) * | 2018-03-30 | 2018-09-18 | 北京理工大学 | 一种基于有向加权网络的软件安全性的量化评估方法 |
CN109828925A (zh) * | 2018-06-25 | 2019-05-31 | 北京航空航天大学 | 一种基于软件网络结构特征的软件可靠性度量方法 |
CN113490920A (zh) * | 2019-03-26 | 2021-10-08 | 西门子股份公司 | 一种评估代码设计质量的方法、装置和系统 |
CN110322122A (zh) * | 2019-06-13 | 2019-10-11 | 大连理工大学 | 基于类图的软件结构风险评估方法 |
CN110647412A (zh) * | 2019-09-17 | 2020-01-03 | 华东师范大学 | 空间飞行器控制系统软件可信性评估系统 |
CN110991805A (zh) * | 2019-11-05 | 2020-04-10 | 中国电力科学研究院有限公司 | 一种配电网风险薄弱点辨识方法和系统 |
CN111913702A (zh) * | 2020-08-11 | 2020-11-10 | 湖北大学 | 一种基于图神经网络的软件系统中关键类的识别方法 |
CN115795475A (zh) * | 2022-11-11 | 2023-03-14 | 中国工商银行股份有限公司 | 软件系统风险的确定方法、装置及电子设备 |
Non-Patent Citations (3)
Title |
---|
Uncertainty quantification and software risk analysis for digital twins in the nearly autonomous management and control systems: A review;Linyu Lin;Annals of Nuclear Energy;第160卷;全文 * |
关于面向对象的软件耦合性度量方法设计;顾爱华;周晓峰;李宗花;李勤丰;;计算机仿真(第11期);全文 * |
基于软件加权网络的软件结构复杂性度量;田鹤;赵海;;计算机科学(第S2期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117311806A (zh) | 2023-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105701008B (zh) | 用于测试用例生成的系统和方法 | |
Polyvyanyy et al. | The 4C spectrum of fundamental behavioral relations for concurrent systems | |
CN110389896A (zh) | 代码自动化分析和测试方法、装置及计算机可读存储介质 | |
WO2019055378A1 (en) | METHOD AND APPARATUS FOR FINDING LONG PROCESSES IN A CODE | |
US20240086165A1 (en) | Systems and methods for building and deploying machine learning applications | |
CN111859047A (zh) | 一种故障解决方法及装置 | |
CN109002712B (zh) | 一种基于值依赖图的污染数据分析方法、系统与电子设备 | |
CN115098389B (zh) | 一种基于依赖模型的rest接口测试用例生成方法 | |
CN111338622B (zh) | 供应链代码识别方法、装置、服务器及可读存储介质 | |
CN112434009A (zh) | 端到端的数据探查方法、装置、计算机设备和存储介质 | |
CN115827436A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN117311806B (zh) | 基于加权有向耦合网络的软件结构风险识别方法与装置 | |
CN115099922B (zh) | 财务数据查询方法、系统、可读存储介质及计算机设备 | |
CN112906824B (zh) | 车辆聚类方法、系统、设备及存储介质 | |
JP5075695B2 (ja) | プロパティ記述のカバレッジ測定装置及びプログラム | |
US8010477B2 (en) | Integrated problem solving system | |
CN113806205A (zh) | 软件性能测试方法、装置、电子设备及可读存储介质 | |
US7562055B2 (en) | Resolve trace minimization | |
Xiong et al. | A Multi-code Representation Fusion Smart Contract Vulnerability Line Detection Method Based on Graph Neural Network | |
Tian et al. | Bbreglocator: A vulnerability detection system based on bounding box regression | |
CN117176459A (zh) | 一种安全规则生成方法及装置 | |
CN117556425B (zh) | 基于图神经网络的智能合约漏洞检测方法、系统和设备 | |
CN118095919B (zh) | 一种进行业务数据质量检核的方法及系统 | |
CN118196567B (zh) | 基于大语言模型的数据评价方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |