软件验证与确认实验一:静态分析
目录
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”提供了一个优秀的算法实现库,支持日常学习和应用。有效的测试策略可以帮助项目保持高质量并降低维护成本。综合所述,项目质量良好。
相关文章:

软件验证与确认实验一:静态分析
目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …...

基于SpringBoot+Vue的高校运动会管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
什么东西可以当做GC Root,跨代引用如何处理?
引言 在Java的垃圾回收机制中,GC Root(Garbage Collection Root,垃圾回收根)是垃圾回收器判断哪些对象是可达的,哪些对象可以被回收的起点。GC Root通过遍历对象图,标记所有可达的对象,而那些不…...
Python深度学习:从神经网络到循环神经网络
Python深度学习:从神经网络到循环神经网络 目录 ✨ 神经网络基础 1.1 🔍 前向传播与反向传播🎨 卷积神经网络(CNN) 2.1 🖼️ 图像分类任务的实现 2.2 🚀 常用架构(LeNet、VGG、Res…...

C++输⼊输出
1.<iostream> 是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象 2.std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输 ⼊流。 3…...

卡码网KamaCoder 117. 软件构建
题目来源:117. 软件构建 C题解(来源代码随想录):拓扑排序:给出一个 有向图,把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法。 拓扑排序的过程,其实就两步࿱…...

Acwing 线性DP
状态转移方程呈现出一种线性的递推形式的DP,我们将其称为线性DP。 Acwing 898.数字三角形 实现思路: 对这个三角形的数字进行编号,状态表示依然可以用二维表示,即f(i,j),i表示横坐标(横线),j表…...

Docker面试-24年
1、Docker 是什么? Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像:Docker的…...

ubuntu 安装k8s
#关闭 Swap 内存,配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…...

No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线
在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞࿱…...

spring揭秘24-springmvc02-5个重要组件
文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller(二级控制器)【2.1】AbstractController抽象控制器(控制器基类) 【3】ModelAndView(模型与视…...
关键字:register
1.铺垫 1.1 计算集中具有存储能力的硬件:cpu中的寄存器、cache,内存,硬盘等 1.2离cpu越近的存储硬件,效率越高,单价成本越贵;离cpu越远的存储硬件,效率越低,单价成本越便宜&#x…...

力扣 简单 110.平衡二叉树
文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…...
基于深度学习的代码优化
基于深度学习的代码优化是一种使用深度学习技术来提升编程代码性能、减少运行时间或资源消耗的方式。通过模型学习大量代码的特征和结构,深度学习可以帮助自动化地识别和应用优化策略。以下是一些关键应用领域: 编译器优化:深度学习模型可以用…...
汽车电气系统中KL30、KL15、KL50、KLR、KL31、KL87、KL75的作用
目录 1、KL30 (Battery Positive Terminal) 2、KL15 (Ignition Switch, Positive) 3、KL50 (Starter Motor Terminal) 4、KLR (Ignition-Off Draw) 5、KL31 (Ground) 6、KL87 (Relay Output) 7、KL75 (Accessory) 在汽车电气系统中,KL系列的术语起源于德国&a…...

随笔(四)——代码优化
文章目录 前言1.原本代码2.新增逻辑3.优化逻辑 前言 原逻辑:后端data数据中返回数组,数组中有两个对象,一个是属性指标,一个是应用指标,根据这两个指标展示不同的多选框 1.原本代码 getIndicatorRange(indexReportLi…...

安装管理K8S的开源项目KubeClipper介绍
安装管理K8S的开源项目KubeClipper介绍 1. 概述 KubeClipper是九州云开源的一个图形化界面 Kubernetes 多集群管理工具,旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群全生命周期管理服务。让运维工程师从繁复的配置和晦涩的命令行中解放出来&#…...

北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术
北交大研究:探索无摄像头低成本AR/VR眼动追踪新路径 在AR/VR技术领域,眼动追踪作为一项关键技术,对于提升用户体验、优化渲染效率具有重要意义。然而,传统的眼动追踪方案多依赖于高成本的摄像头,这不仅增加了设备的制造…...
算法题总结(七)——哈希表
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法 242、有效地字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t…...

PS批量执行动作,ps批量修改图片大小,并修改文件的类型
PS批量执行动作,ps批量修改图片大小,并修改文件的类型 修改格式,文件类型为:jpg,psd,tiff,并修改大小 打开文件(也可以不打开,) 点击文件>脚本>文件…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...