论文部分内容阅读
随着信息化时代的来临,软件已经被应用到人们生活的各个不同方面,不断改变着人们的交流和生活方式。而在这个过程中,软件系统的结构也越来越复杂化,多样化。随之带来的软件安全性问题也越来越受到研究者们的重视。研究者们从多个角度多个层次对复杂软件系统的安全性进行度量研究,例如从软件的拓扑结构方面进行分析研究。如何将复杂软件系统的拓扑结构抽象为软件执行网络模型,如何更加快速地发现对软件执行过程影响较大的关键节点,如何更好地区分具有相似结构的关键节点,如何快速地发现软件执行关键路径等问题也成为现今主要研究工作之一。为了解决上述提到的问题,本文对软件网络中关键节点和关键路径挖掘进行了研究,并辅以一些开源的软件作为实验对象进行分析研究。首先,为了更好地度量软件的拓扑结构,现将软件系统的执行转换为软件网络。将软件功能模块定义为节点,模块之间的调用依赖关系抽象为边,并将它们之间的调用次数设为边上的权值,以此来构建软件有向加权网络模型。使用GNU编译工具和pvtrace追踪工具来获得软件的执行路径情况,并将结果转换成三列矩阵,对其进行节点度以及度分布等一系列的特性分析。其次,根据复杂网络中相继故障原理,网络中节点的关键性程度决定其影响软件正常运行的大小。本文在软件有向加权网络模型的基础上,提出了一种基于相继故障原理的关键节点挖掘算法。该算法深度遍历软件执行网络中的各个节点,通过计算故障节点的影响力度来衡量该节点的关键性,并对其进行等级划分和排序操作。再次,使用上述关键节点度量挖掘方法时,可能会出现多个节点处于同一等级的情况。针对这一现象,本文提出了一种基于PageRank和介数度量方法的关键节点挖掘算法。该算法首先使用测试用例形成结果图集合,然后利用频繁子图挖掘方法确定关键节点集合,最后为了获得更准确地软件执行网络中关键节点,将熵运用到PageRank和介数两个方法度量中,并对节点进行排序。最后,为了挖掘软件执行过程中的关键路径,本文提出了一种关键路径挖掘算法。在这一过程中,按照软件执行网络中边出现情况生成对应的0/1边序列,并将形成的边序列存放到有向图矩阵中。利用序列频繁阀值和边重复率大小,去除不符合规则的边,从而获得软件执行网络的关键路径。对于上述提到的算法,本文以多种开源软件进行实验分析,发现能够这些研究方法能够更有效地挖掘软件中起到重要作用的关键节点和关键路径。