目录
1. 实验目的及要求.................................................................................................... 3
2. 实验软硬件环境.................................................................................................... 3
3. 实验原理................................................................................................................ 3
4. 实验过程................................................................................................................ 3
4.1. 方法.............................................................................................................. 3
4.2. 步骤.............................................................................................................. 3
5. 实验结果................................................................................................................ 4
5.1. 分析与讨论.................................................................................................. 4
5.2. 总结.............................................................................................................. 4
一、实验目的及要求
理解静态分析目标与主要活动。
通过understand获取被测程序(Program under test,PUT)的注释率、最大圈复杂度等主要指标,绘制函数的butterfly图、control flow图,使用code check对PUT实施代码规范检测。
二、实验软硬件环境
软件环境:操作系统OS为windows 10,understand 6.2.1112。
硬件环境:CPU为11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz 2.42 GHz,内存为16G,硬盘为512GB,显卡为Intel(R) lris(R) Xe Graphics.
三、实验原理
静态分析可以在不执行PUT的前提下,获取PUT的主要指标,检查其对编码规范的违例程度,快速建立软件质量初步评价结果。
四、实验过程
4.1方法
使用静态分析工具,掌握PUT的概况,了解指定函数的依赖关系、控制流图,以及编码规范的遵从程度。
4.2 步骤
创建项目。
Overview。
Butterfly。
Control flow。
Code check。
五、实验结果
(1)根据图1描述圈复杂度最大的10个函数的统计信息,包括:总行数、代码行、注释行、循环nesting深度,并在表1中设计相关统计信息表格。

图1 代码质量报表↑
表 1 主要统计信息↓
|   序号  |   函数  |   总行数  |   代码行  |   注释行  |   最大nesting  | 
|   1  |   Others.Graph.Vertex  |   62  |   50  |   2  |   1  | 
|   2  |   Sorts.CycleSort  |   66  |   41  |   11  |   4  | 
|   3  |   DataStructures.Graphs.FloydWarshall  |   72  |   66  |   6  |   4  | 
|   4  |   DataStructures.Trees.TrieImp  |   125  |   109  |   6  |   4  | 
|   5  |   DataStructures.Graphs.BellmanFord  |   157  |   125  |   44  |   3  | 
|   6  |   Others.CRCAlgorithm  |   187  |   112  |   55  |   4  | 
|   7  |   DataStructures.Trees.BinaryTree  |   256  |   143  |   89  |   3  | 
|   8  |   BSTIterative  |   285  |   199  |   84  |   4  | 
|   9  |   DataStructures.Trees.RedBlackBST  |   327  |   302  |   1  |   4  | 
|   10  |   divideconquer.ClosestPair  |   336  |   210  |   130  | 
(2)选取较复杂函数DataStructures.Trees.RedBlackBST.insert,生成butterfly图与control flow图,如图2、图3所示。

图 2 butterfly图

图 3 control flow图
(3)选取HIS规则集进行编码规范检测,冲突项753个,根据图5可知违例数量最多的五条规则分别是:
·规则1:Language scope(VOCF)-HIS_11,如AES.keyExpansion函数违例是因为该函数维护/修改的成本较高。
·规则2:Comment Density(COMF)-HIS_01,如ciphers.Vigenere函数违例是因为注释行相对于指令行比例较低。
·规则3:Number of call levels(LEVEL)-HIS 09,如BellmanFord.printPath函数违例是因为该函数内的嵌套深度过高。
·规则4:Called Functions(CALLS)-HIS_06,如RSA.generateKeys函数违例是因为该函数调用了太多其他函数。
·规则5:Recursion(AP_CG_CYCLE)-HIS_12,如QuickSort.doSort函数违例是因为该函数采用直接递归,违反安全规范。
|   规则  |   规则含义  |   违例数量  |   违例实例  | 
|   Number of call levels(LEVEL)-HIS 09  |   函数调用了太多其他函数  |   52  |   BellmanFord.printPath  | 
|   Called Functions(CALLS)-HIS_06  |   函数调用了太多其他函数  |   65  |   RSA.generateKeys  | 
|   Language scope(VOCF)-HIS_11  |   维护/修改函数的成本较高  |   82  |   AES.keyExpansion  | 
|   Recursion(AP_CG_CYCLE)-HIS_12  |   某个函数采用直接递归,违反安全规范  |   84  |   QuickSort.doSort  | 
|   Comment Density(COMF)-HIS_01  |   注释行相对于指令行比例较低  |   451  |   ciphers.Vigenere  | 
表 2 HIS规则集违例信息

图4 规则集下的冲突项
5.1分析与讨论
如图5可知,最大圈复杂度为15,对应函数是DataStructures.Trees.BinaryTree.remove

图5 最大圈复杂函数
六、总结
项目概况: “项目TheAlgorithms”是一个开源算法和数据结构库,包含用不同编程语言实现的常见算法。
“项目TheAlgorithms”共有228个文件、296个类、1047个函数,最大圈复杂度为15,超过14的函数有1个,注释率26%,编码规范HIS的违例项753个,通过系统的测试流程,“项目TheAlgorithms”提供了一个优秀的算法实现库,支持日常学习和应用。有效的测试策略可以帮助项目保持高质量并降低维护成本。综合所述,项目质量良好。













![[Go语言快速上手]初识Go语言](https://i-blog.csdnimg.cn/direct/4f8f65315de74021b6520bcac49affca.png)





