当前位置: 首页 > news >正文

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

目录

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 的缩写&#xff0c;是标准的输⼊、输出流库&#xff0c;定义了标准的输⼊、输 出对象 2.std::cin 是 istream 类的对象&#xff0c;它主要⾯向窄字符&#xff08;narrow characters (of type char)&#xff09;的标准输 ⼊流。 3…...

卡码网KamaCoder 117. 软件构建

题目来源&#xff1a;117. 软件构建 C题解&#xff08;来源代码随想录&#xff09;&#xff1a;拓扑排序&#xff1a;给出一个 有向图&#xff0c;把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法。 拓扑排序的过程&#xff0c;其实就两步&#xff1…...

Acwing 线性DP

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

Docker面试-24年

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

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 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世界的隐秘防线

在这个数字时代&#xff0c;网络安全无处不在。了解Web安全的基本知识&#xff0c;不仅能保护我们自己&#xff0c;也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界&#xff0c;掌握那些必备的安全知识&#xff01; 1. 客户端与WEB应用安全 前端漏洞&#xff1…...

spring揭秘24-springmvc02-5个重要组件

文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller&#xff08;二级控制器&#xff09;【2.1】AbstractController抽象控制器&#xff08;控制器基类&#xff09; 【3】ModelAndView(模型与视…...

关键字:register

1.铺垫 1.1 计算集中具有存储能力的硬件&#xff1a;cpu中的寄存器、cache&#xff0c;内存&#xff0c;硬盘等 1.2离cpu越近的存储硬件&#xff0c;效率越高&#xff0c;单价成本越贵&#xff1b;离cpu越远的存储硬件&#xff0c;效率越低&#xff0c;单价成本越便宜&#x…...

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…...

基于深度学习的代码优化

基于深度学习的代码优化是一种使用深度学习技术来提升编程代码性能、减少运行时间或资源消耗的方式。通过模型学习大量代码的特征和结构&#xff0c;深度学习可以帮助自动化地识别和应用优化策略。以下是一些关键应用领域&#xff1a; 编译器优化&#xff1a;深度学习模型可以用…...

汽车电气系统中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) 在汽车电气系统中&#xff0c;KL系列的术语起源于德国&a…...

随笔(四)——代码优化

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

安装管理K8S的开源项目KubeClipper介绍

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

北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术

北交大研究&#xff1a;探索无摄像头低成本AR/VR眼动追踪新路径 在AR/VR技术领域&#xff0c;眼动追踪作为一项关键技术&#xff0c;对于提升用户体验、优化渲染效率具有重要意义。然而&#xff0c;传统的眼动追踪方案多依赖于高成本的摄像头&#xff0c;这不仅增加了设备的制造…...

算法题总结(七)——哈希表

当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法 242、有效地字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t…...

PS批量执行动作,ps批量修改图片大小,并修改文件的类型

PS批量执行动作&#xff0c;ps批量修改图片大小&#xff0c;并修改文件的类型 修改格式&#xff0c;文件类型为&#xff1a;jpg&#xff0c;psd&#xff0c;tiff&#xff0c;并修改大小 打开文件&#xff08;也可以不打开&#xff0c;&#xff09; 点击文件>脚本>文件…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...