软件验证与确认实验一:静态分析

目录

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”提供了一个优秀的算法实现库,支持日常学习和应用。有效的测试策略可以帮助项目保持高质量并降低维护成本。综合所述,项目质量良好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值