基于SkyEye的覆盖率测试

article/2025/9/26 9:37:04

目录

01.覆盖率测试概念

02.覆盖率测试方法

03.嵌入式软件覆盖率测试原理

04.SkyEye的重大突破


01.覆盖率测试概念

覆盖率测试是一种白盒测试手段,通常会在软件测试的早期阶段进行,也就是单元测试过程中。覆盖率测试这种测试方式需要对测试代码本身进行访问同时对代码进行插桩处理,再根据程序的内部结构完成测试工作。

覆盖率测试的过程中需要做到有效覆盖程序的语句以及分支结构,尽量在测试过程中发现隐藏的软件缺陷从而保证软件的质量。覆盖率测试的基本准则是要求测试用例要尽可能多的覆盖程序的内部逻辑结构,并发现其中存在的问题,为保证测试工作的充分性和全面性,必要时应该进行补充测试,保证测试效果。

02.覆盖率测试方法

覆盖率指的是已经测试的对象在可测对象中所占用的比例,覆盖率越高证明测试的效果越好。在具体嵌入式软件测试中,应该根据具体情况制定相应的方法和策略。覆盖率测试常用到的几种典型的覆盖策略有以下几种:

语句覆盖

软件开发过程中相关的逻辑单位以及函数、文件等都是由语句构成的,并且不同的语句类型表示不同的含义,这种语句的标识具有一定的专一性。使用语句覆盖是测试覆盖率最基础的方式,具体语句的覆盖率指的是被测语句在整个可测语句中执行的百分比,程序中的每个语句至少执行一次,但语句覆盖本身具有一定的局限性,即便覆盖率达到100%,也不能保证程序完全被覆盖这种测试只看语句的执行情况,难以发现其中的逻辑错误。

判定覆盖

程序在编写的过程中通常可以分为三种结构:顺序,分支和循环。判定覆盖又称分支覆盖,程序的逻辑越复杂,证明程序的分支越多,因此使用分支覆盖进行测试可以取得较充分的效果。在具体的测试中分支测试覆盖率指的是至少执行了一次的分支总数与可执行的分支总数的比值。分支覆盖本身的逻辑性较强,是一种比较可靠的测试方式,但由于程序的分支数量庞大,使用分支覆盖测试方式无疑增加了测试成本通常情况下,为提高软件的测试质量,对重点分支结构语句进行分支覆盖测试。

条件覆盖

条件覆盖与分支覆盖的测试类似,主要也是基于程序中的特定表达式即条件表达式中每一个条件表达式可以取真值或者假值。若每一个条件语句都能获得一次真值或者假值相当于形成了足够多的测试用例,测试结果的覆盖性较好。条件发生变化时,不一定会引起分支发生变化,因此条件覆盖情况不能保证分支覆盖的充分性,在实际测试中可以通过覆盖关键的条件语句完成测试。条件覆盖率指的是至少执行了一次的条件布尔值总数与条件总的布尔值的比值。

判定条件覆盖

判定条件覆盖就是给出的条件组合里面的每个子条件的真、假都出现过,需要执行足够的测试用例,使得判定条件中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。判定条件覆盖同时满足判定覆盖和条件覆盖,但未考虑条件的组合情况。

路径覆盖

路径覆盖指选取足够多的测试用例,使程序中的每条可能的路径都至少执行一次,在白盒测试中,覆盖程度最高的就是路径覆盖,因为其覆盖了程序中所有可能的路径,路径覆盖被广泛应用于单元测试。

举例

针对如下程序:

If((a>1) and (b==0)) then x=x/a;If((a>2) or (x>1)) then x=x+1;

语句覆盖

满足语句覆盖,可设计如下测试用例:

Testcase1:a=2,b=0,x=3

判定覆盖

满足判定覆盖,可设计如下测试用例:​​​​​​​

Testcase1:a=2,b=0,x=3Testcase2:a=1,b=0,x=1

条件覆盖

满足条件覆盖,可设计如下测试用例:​​​​​​​

Testcase1:a=2,b=0,x=3Testcase2:a=1,b=0,x=1Testcase3:a=2,b=1,x=1

判定条件覆盖

满足判定条件覆盖,可以设计如下测试用例:​​​​​​​

Testcase1:a=2,b=0,x=3Testcase2:a=2,b=1,x=1Testcase3:a=1,b=0,x=3Testcase4:a=1,b=1,x=1

路径覆盖

满足路径覆盖,可以设计如下测试用例:​​​​​​​

Testcase1:a=2,b=0,x=3Testcase2;a=1,b=0,x=1Testcase3:a=2,b=1,x=1Testcase4:a=3,b=0,x=1

几种覆盖率测试策略的强弱程度如下:

路径覆盖>判定条件覆盖>条件覆盖>判定覆盖>语句覆盖

03.嵌入式软件覆盖率测试原理

嵌入式软件指的是嵌入到计算机系统中的软件,一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序四个部分组成。嵌入式软件的一些特点主要体现在:与硬件紧密联系,嵌入式软件的测试与硬件具有一定的不可分割性;软件的测试效果以及质量确定跟硬件性能和测试环境有较大关联;实时性较强,嵌入式软件通常情况下为实时控制软件,需要在特定的时间内完成任务的处理工作。时间也是处理过程中的重要因素,因此,嵌入式软件的测试对处理时序有着较高要求。

对嵌入式软件进行覆盖测试,较传统的方法是需要对代码插桩,但嵌入式软件与普通软件不同,嵌入式软件的系统资源有限,插桩会增加代码量,过大的代码量将使得程序不能在嵌入式系统中运行,同时嵌入式软件具有很强的实时性,程序的输出只在有限的时间内有效,插桩会破坏程序的时间特性,导致软件执行的错误。

04.SkyEye的重大突破

为避免这些缺陷,迪捷软件的SkyEye作为一个全数字实时仿真平台,实现了零插桩目标码覆盖率统计,在不插桩的情况下,使用反汇编工具生成嵌入式软件目标码的反汇编文件,分析反汇编文件获取需要的基础信息,如函数指令信息、地址对应源码行号等,再与仿真验证工具配合获取执行PC地址信息,分析嵌入式软件的执行覆盖情况,实现零插桩分析覆盖率的目的,无需修改被测件代码进行代码覆盖率测试,可以计算出语句覆盖和分支覆盖情况,并支持融合前面的统计结果然后生成报告,具体如下:

SkyEye可以做到指令覆盖率、指令分支覆盖率、源码分支覆盖率的分析:

▲图1 覆盖率信息统计

SkyEye支持通过函数对应的目标码文件及源码文件来查看详细的执行情况

▲图2 函数uart_printf目标码详情

▲图3 函数uart_printf源码执行情况

SkyEye支持融合各统计结果生成覆盖率统计分析报告,包括指令覆盖率统计结果、源码覆盖率统计结果、函数覆盖率统计结果、目标覆盖率统计结果

▲图4 指令覆盖率统计结果

▲图5 源码覆盖率统计结果

▲图6 函数覆盖率统计结果

▲图7 目标覆盖率统计结果


http://chatgpt.dhexx.cn/article/eF0FFH8X.shtml

相关文章

SkyEye 仿真

http://www.cnitblog.com/schkui/default.html?page4 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。 以下操作均在Fedora Core 1.0里通过。 Skyeye项目资源列表 http://gro.clinux.org/projects/skyeye/ …

SkyEye的使用

转载:http://blog.csdn.net/htttw/article/details/7226754 对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购买ARM开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。…

SkyEye安装与使用

一. SkyEye配置选项 SkyEye模拟的硬件配置和模拟执行行为由配置文件skyeye.conf中的选项确定。根据选项的功能,skyeye.conf的选项分为硬件配置选项和模拟执行选项。根据参数的个数,skyeye.conf的选项主要由两种组成: 单参数选项…

use skyeye

操作系统 :LINUX ES3 版本 :2.4.21-9ELSKYEYE 版本 : V0.8.0http://gro.clinux.org/projects/skyeye 下载最新的SkyEy软件 1、下载SKYEYE的原代码包skyeye-v0.x.x.tar.bz2 这里就不写怎样配置安装SKYEYE了,因为我编译没成功&…

SkyEye助力飞控软件Debug

​01.Debug是什么? 1947年9月9日,美国著名科学家格蕾丝.霍普(Grace Hopper)与其同伴在对Mark II计算机进行研究时发现,导致计算机无法正常工作的罪魁祸首居然是一只粘在继电器上的小飞蛾。格蕾丝用镊子将飞蛾夹出&…

手把手教你搭建国产嵌入式模拟器SkyEye开发环境

SkyEye介绍 SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"…

【基于CentOS 7 的NFS服务】

目录 一、概述 二、应用场景 三、安装 四、启动服务 五、目录结构 1.nfs的主配置文件 2.存储配置文件 六、命令解析 1.共享存储管理命令 2.共享目录查看 七、配置 八、客户端访问 1.查看nfs服务器的共享目录 2.挂载 九、实际案例 一、概述 network filesystemt…

Linux——nfs服务配置

启动nfs,一定要先启动rpc Systemctl start rpcbind Systemctl start nfs 停止nfs Systemctl stop nfs 开机自启nfs Systemctl enable rpcbind Systemctl enable nfs 配置网络环境 服务端ens36,配置为192.168.100.254 客户端ens33,配…

安装NFS服务

NFS服务 mhcwz 已于 2022-04-29 19:43:54 修改 68 收藏 1 分类专栏: Linux 文章标签: 运维 linux 服务器 于 2022-03-17 19:33:17 首次发布 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文…

Linux-NFS服务器搭建

一、理论知识 1.NFS概念 NFS是Network File System(网络文件系统)。 主要功能是通过网络让不同的服务器之间可以共享文件或者 目录。 NFS客户端一般是应用服务器(比如web,负载均衡等),可以通…

Linux NFS服务

NFS服务 一、NFS简介 NFS(Network File System)即网络文件系统,它允许网络中的不同计算机相互之间共享资源。NFS客户端可以透明地读写远程NFS服务器上的文件,就像访问本地文件一样。 二、NFS服务概述 NFS是1980年由SUN发展出来在…

NFS服务

文章目录 一,NFS共享存储服务1.NFS网络文件系统2.NAS存储3.端口号4.特点 二,NFS配置实验步骤总结 三,ssh服务1.SSH远程登陆方式登陆方法一登录方法二 四,SSHD 服务支持两种验证方式1.密码验证2.密钥对验证3.公钥和私钥的关系4.构建…

NFS服务器原理、搭建、配置

目录 NFS服务简介 什么是NFS? NFS挂载原理: RPC与NFS通讯原理: NFS客户端和NFS服务器通讯过程: Linux下NFS服务器部署 NFS服务所需软件及主要配置文件: 服务端安装NFS服务步骤: NFS客户端挂载配置…

CentOS——nfs服务

一.在服务器端的操作(IP地址:192.168.2.200) 1.下载nfs服务 yum -y install rpcbind nfs-utils 2.关闭防火墙 systemctl stop firewalldc setenforce 0 ; 3. 编辑配置文件 vim /etc/exports 添加内容为: /data/…

NFS服务的搭建

NFS 目的是让不同计算机不同操作系统之间可以彼此共享文件。 采用服务器/客户端工作模式 在NFS服务器上将目录设置为输出目录(共享目录)后,客户端就可以将这个目录挂载到自己系统中的某个目录下。 什么是RPC守护进程 使用NFS服务&#xf…

NFS服务配置

1. 服务器端 (1)查看ip地址为192.168.1.103。 (2)先查找一下系统是否安装了nfs的软件包,使用rpm-qa来查看。 rpm –qa |grep nfs (3)编辑/etc/exports文件来设置服务器端的共享目录&#xff0…

NFS服务介绍

1. NFS服务介绍 1.1什么是NFS服务 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问…

【ubuntu】nfs服务搭建

一、开篇 在嵌入式linux开发过程中,由于目标平台的资源限制,开发环境一般都不会放到目标板卡上(需要放在开发宿主机上),如果需要宿主机与目标板卡之间进行文件传输,该怎么办呢。这时候nfs就派生用场了。nf…

linux上搭建nfs服务

NFS(Network File System):它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看&…

Linux的nfs服务

目录 一、NFS 1、介绍NFS 2、NFS服务的实现 3、NFS服务的特点 4、NFS服务的作用 二、NFS案例 1、安装RPC依赖和nfs服务(rpcbind、nfs-utils) 2、修改配置文件( /etc/exports ) 3、开启服务并查看端口 4、挂载查看共享 …