常用C语言单元测试工具介绍

常用C语言单元测试工具介绍

单元测试准则

C/C++怎么做好单元测试

最完整的自动化测试流程

软件测试用例自动生成技术研究 论文

单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发,这个里面提到的测试驱动更多的就是指单元测试驱动。但一般开发团队还是很少的系统化的执行单元测试,针对应用软件的测试更多是由专业测试团队来执行黑盒测试。单元测试的最大的难点不在于无法确定输入输出,这毕竟是模块开发阶段就已经定好的,而在于单元测试用例的编写会耗费开发人员大量的工时,按照相关统计单元测试用例的时间甚至会远超过功能本身开发的时间。

制约测试用例采用程序自动生成,最关键的底层技术是复杂的参数解析技术。即:能够在编译器层面对于任意复杂的类型,任意定义嵌套层级的递归解析。如果没有这个关键技术的突破,那么测试用例自动生成系统要么无法商用,要么将以极低的效率来演化、产生合规的测试数据。例如著名的模糊测试工具American Fuzzy Lop,它并不能够识别用户的程序所需要的结构类型,需要从最外层进行基于搜索算法的演化。程序的特性是接口层面的输入和内部某个模块的数据要求距离很远,外部数据通常是经过层层复杂转换才可以成为内部模块所需要的数据结构类型,因此从外层探索所需要的计算量和时间将是难以想象的。基于American Fuzzy Lop,为了能够生成一个合法的SQL 语句,让程序内部模块能够通过外围数据校验需要探索时间以天数计,远非分钟或者小时可以生成。另外一个制约性条件是:每个程序能够接手的输入都是经过精心结构编制、含有大量规则的数据,而这些数据通过随机+探索的方式生成是非常不现实和极其耗时的。所以,从黑盒以及最外层输入产生自动产生用例是不可行的。

如果从软件内部结构分析产生用例驱动,就需要对软件的编译结构进行深度理解。可行的测试用例生成系统,应该是基于程序的中间(关键入口)作为测试切入最为合适。这些模块的输入,已经将模糊的输入转化为高度结构化的参数。只要能够识别这些复杂结构,将复杂数据类型一步步降解为简单数据类型,同时完成参数构造,就可以自动完成驱动用例的生成。

基于模块的测试,可以划归为传统的单元测试,它是将缺陷发现并遏制在研发阶段最好的方法。但受限于单元测试需要开发大量的驱动程序,在行业内的推广和应用受到了极大的限制。当然单元测试也可以在系统集成完毕后执行,避免构建虚拟的桩程序。

1.PC-Lint(代码检查工具)

1)简介

PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它 不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如 Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公司和个人往往 不能拿出很多很全面的测试,这时候,PC-Lint的强劲功能可以很好地提高软件的质量.

2)功能特性

PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件。
辑环境和编译器,比如PC-lint支持几乎所有流行的编Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,VC.net、watcom C/C++、Sourceinsight、intel C/C++等等,也支持16/32/64的平台环境。
支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。

2.VcTester

1)简介

VcTester是与VC(注:Visual C++及Visual Studio开发套件是微软发布的产品)配套使用的新一代单元测试工具,分共享版与商用版两大系列,其主要功能包括:脚本化测试驱动(包括修改变量与调用 函数)、脚本桩、支持持续集成测试、测试覆盖率统计(仅商用版本)、生成测试报告(仅商用版本)、测试消息编辑器(仅商用版本)等。

2)功能特性

脚本化测试驱动
脚本桩
在线测试
即时调测
测试工程管理http://www.cse-soft.org/VcTester/

3.Visual Unit

1)简介

VU是新一代单元测试工具,功能强大,使用简单,完全可视化,不需编写测试代码。VU的测试结果使程序行为一目了然,有助于整理编程思路和提高编程效率和 正确性,并能快速排错;VU还增强调试器功能(如实现后退等功能),提高调试的效率;VU能达到空前的测试完整性,轻松实现语句覆盖、条件覆盖、分支覆 盖、路径覆盖;VU提供详尽的测试报告,VU不仅是单元测试工具,更是一种使程序开发变得更高质更高效更舒适的工具。

2)功能特性

自动生成测试代码
测试用例可视化编辑
程序行为一目了然
空前的测试完整性
高效设计白盒覆盖测试用例
快速排错,高效调试http://www.unitware.cn

4.C++Test

1)简介

C++Test是一个功能强大的自动化C/C++单元级测试工具,可以自动测试任何C/C++函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的环境下极其容易快速的将单元级的测试覆盖率达到100%。

2)功能特性

即时测试类/函数
支持极端编程模式下的代码测试
自动建立类/函数的测试驱动程序和桩调用
自动建立和执行类/函数的测试用例
提供快速加入和执行说明和功能性测试的框架
执行自动回归测试
执行部件测试(COM)http://www.parasoft.com

5. CuTest

CuTest(Cute Test)是一个非常简单的C语言单元测试工具。在使用它的时候,只需要包含两个文件“CuTest.c CuTest.h”,然后就可以写测试用例,进行测试了。它对用例几乎没有管理功能,报表输出也非常简单,可以用来试验单元测试的基本想法。

6. CUnit

CUnit是一个轻型的C语言单元测试框架。它提供了设计、管理、运行测试用例的功能。它的报表功能比较强大,但是比较麻烦,更适合于较大一些的项目。

7.Wings

Wings与parasoft c++ test在单元测试用例自动生成能力的比对

星云测试日前全球首发的Wings产品,是一个智能的、全自动的单元测试用例生成系统,研究并解决了如下难点。

(1) 程序参数深度分析问题

Wings通过编译器底层技术,将输入的源文件,按照函数为单位,形成模块对象。对象中包含函数的输入参数,返回值类型等信息,供驱动函数模块和测试用例模块使用。每个文件作为一个单元,针对其中的每个函数的每个参数进行深度解析,对于嵌套类型,复杂类型等都可以实现精确的解析和分解,将复杂类型逐层讲解为基础数据类型,并产生参数结构的描述文件(PSD)。

(2) 函数驱动自动生成模块

依据PSD文件的格式信息,自动生成被测源程序的所有驱动函数,单元测试过程不再依赖开发人员手动编写测试函数,只需将生成的驱动函数和被测源文件一起编译,即可执行测试并查看测试结果。测试驱动自动生成程序基于PSD描述,全自动构建驱动被测程序运行的所有参数,必须的全局变量,并可根据复杂变量的层级结构产生结构化的测试驱动程序,可以节省大量的单元测试用例的编写时间。

(3) 测试数据自动生成与管理

用于自动生成测试数据,测试数据与被测函数提取的信息相互对应,数据以一定的层次逻辑关系存储在json文件中。数据和经过分解和展开后的数据类型是一一对应的。这些数据用户可以根据业务要求随意边际,并且用json文件进行结构化,层次化展示,非常的清晰。其中的测试数据包括全局变量值、被测函数调用时的参数值。

被测程序信息提取----> 驱动程序(单元测试程序)的自动生成------> 测试数据自动生成 -----> 执行单元测试

8. PICT组合测试 Allpairs/ACTS正交测试 生成测试用例集

组合分析方法

依据的是多因素组合测试可以生成测试用例集,以覆盖任意N个因素的所有取值组合,在理论上可以发现由N个因素共同作用引发的缺陷。简单的理解就是每一个参数的每一个值只需要和其他参数至少配对一次就够了。

PICT工具就是在微软公司出品一款成对组合的命令行生成工具。PICT 可以有效地按照两两测试的原理,进行测试用例设计。在使用PICT时,需要输入与测试用例相关的所有参数,以达到全面覆盖的效果。

我们知道成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的。Cohen等人应用成对组合覆盖测试技术对Unix中的“Sort”命令进行测试。测试结果表明覆盖率高达90%以上。可见成对组合覆盖是一种非常有效的测试用例设计方法。
但是实际工作过程中有成对组合量太大,PICT就很好的解决了这一难题。

以下面的参数组合为例

  帐户名: 空,不存在,超长,超短,正常密码: 空,超长,超短,不匹配,正常 验证码: 空,超长,超短,不匹配,正常 会话: 保存一个月,保存三个月,保存一年,不保存 按钮: 确定,取消

有1000多种组合。对其做测试,非常困难的。用PICT的话就非常方便,测试用例的数量将大大降低;同时,也可保证很高的测试覆盖率。

PICT

正交分析方法设计(又称为两两组合)测试用例

所谓正交试验法,就是从大量的试验点中挑选出适量的,有代表性的点,合理的安排试验。

如果我们直接在上例中运用正交试验法,可能仍然达不到我们可以接受的范围,即测试用例还是很多。这时我们可以计算各因子和状态的权值,删去一部分权值较小,即重要性较小的因子或者状态,使最后生成的测试用例集缩减到我们可以接受的范围。

allpairspy

  1. 正交分析方法强调两两组合覆盖会覆盖到所有单参数、所有参数两两组合以及部分参数多组合的场景,会抛弃一些多组合场景。正交设计方法有利于确定各个因素对实验结果的贡献,但是对于组合测试提高错误检测能力并没有帮助。组合分析是随机生成的,它的原则是覆盖即可,多考虑覆盖多组合情况。

  2. 组合分析法是一种基于每对参数组合的测试技术,考虑参数之间的影响是主要的错误来源,并且大多数的错误起源于简单的参数组合。但是对于单参数以及两两组合覆盖率不如正交设计方法。

  3. 正交设计方法由于是基于两两组合,故对同一对象多次设计用例变化不是太大,而组合分析运用PICT可以很方便的获取一组测试数据,而且每组测试数据均不同,在回归测试中,可以很方便的运用另一组组合分析数据,提高测试覆盖率。

  4. 运用正交试验分析和组合测试都需要对要测试的因子及因子状态有清楚的了解,并对其加权,哪些权值较重,哪些较轻,可以删减因子,减少测试用例数。具体运用哪种方法,要看具体测试对象,也要看测试人员自己的喜好。

  5. 正交设计是组合设计的一个具体特例,也是组合测试的一种方案选择。

response判断

执行用例有了,那如何对用例结果判断呢?要实现自动化做好的解决办法,就是规范用例的response判断,什么场景用什么状态码,响应内容去哪个值可以做到对结果的校验,这些肯定要后端写清楚,难道要让我们看代码啊,那要后端干什么呢。

总结下接口文档或者是mockAPI需要规定的东东吧:参数是否可选、参数的类型|长度|特殊字符的response、参数的限制是在哪里(尽量是后端限制参数的所有东西)、是否需要token、response信息(不要只是code,还有具体的那个json值)…

比如:查询用户信息,我们除了校验code,还要对查询的内容是否正确啊。

9. calltree/callflow生成函数调用书

静态分析C语言代码的工具,通过它可以生成函数的调用关系

静态分析C语言生成函数调用关系的利器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/34390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HICP学习--BGP综合小实验

需要完善 一、实验拓扑 二、实验需求 1、R2-7每台路由器均存在一个环回接口用于建立邻居,同时还存在一个环回来代表连接用户的接口;最终这些连接用户的接口网络需要可以和R1/8的环回通讯 2、AS2网段地址172.16.0.0/16 减路由条目数量 三、实验步骤 首先配置IP R…

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速 说明 Tensorflow-GPU 已被移除。请安装 tensorflow 。 tensorflow 通过 Nvidia CUDA 支持 GPU 加速操作。 自 2019 年 9月发布 的 TensorFlow2.1 以来,tensorFlow 和 tensorflow-GPU 一直是同…

智慧城市美术效果Unity实现笔记流程

智慧城市美术效果Unity实现笔记流程: 参考 对标 效果图: 参考资料: 方案一: fBlender GIS 获取城市 房屋道路等数据 安装BlenderGIS插件 落叶大师智慧城市效果解析 方案二: CityEngine2022地块生成 写实类-参考图&…

Springboot定时执行任务

定时任务 TaskScheduler 任务调度者 TaskExecutor 任务执行者 EnableScheduling//开启定时功能的注释 Scheduled(cron"* * * * * * *")//什么时候执行~ cron表达式(秒 分 时 日 月 星期 ) Cron表达式 主启动类加上注解开启任务调度 package com.qf.sping09te…

c语言每日一练(6)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

华为运动健康,十年创新天地宽

我听一位朋友讲过这样一个故事。某天早上,急诊科的医生迎来了一位患者,患者进来后直接说:“大夫,我房颤了。” 这位医生非常诧异,因为心脏房颤确实非常危急,但很多时候并没有明显的生理体征,患者…

Hive加密,PostgreSQL解密还原

当前公司数据平台使用的处理架构,由Hive进行大数据处理,然后将应用数据同步到PostgreSQL中做各类外围应用。由于部分数据涉及敏感信息,必须在Hive进行加密,然后在PG使用时再进行单个数据解密,并监控应用的数据调用事情…

使用前缀树实现敏感词过滤

在一些论坛或者博客类的项目需要对内容进行敏感词的匹配以及脱敏操作,像这类的功能就可以使用前缀树实现,接下来我们就使用哈希去实现前缀树。(gin框架的路由树也是基于前缀树实现的) 什么是前缀树? 前缀树&#xff…

JavaScript之BOM+window对象+定时器+location,navigator,history对象

一.BOM概述 BOM即浏览器对象模型,它提供了独立于内容而与窗口进行交互的对象 BOM的顶级对象是window 二.window对象的常见事件 1.窗口加载事件window.onload window.onload function(){} 或者 window.addEventListener("onload" , function(){}); window.onlo…

Mybatis-plus动态条件查询QueryWrapper的使用

Mybatis-plus动态条件查询QueryWrapper的使用 一:queryWrapper介绍 queryWrapper是mybatis plus中实现查询的对象封装操作类,可以封装sql对象,包括where条件,order by排序,select哪些字段等等,他的层级关…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS ;需要设置快捷键,这里原来是save all操作时上传文件到服务器; ** 设置好快捷键后按 CtrlS就会同步文件(添加删除文件后保存,服务器也会同步) ** 搜索出save all 后&#xf…

NPM与外部服务的集成(上)

目录 1、关于访问令牌 1.1 关于传统令牌 1.2 关于粒度访问令牌 2、创建和查看访问令牌 2.1 创建访问令牌 在网站上创建传统令牌 在网站上创建粒度访问令牌 使用CLI创建令牌 CIDR限制令牌错误 查看访问令牌 在网站上查看令牌 在CLI上查看令牌 令牌属性 1、关于访问令…

报错注入(主键重复)攻击原理

基本原理 利用数据表中主键不能重复的特点,通过构造重复的主键,使得数据库报错,并将报错结果返回到前端。 SQL说明函数 以pet数据表为例进行说明 rond(): 返回[0,1)区间内的任意浮点数。 count(): 返回每个组的列行数。 如&#xff0…

SWIG使用方法

安装 下载 swigwin软件包,解压到合适的位置,然后将路径添加到环境变量即可。 编写C代码 //vector.hpp class Vector { private:int x;int y; public:Vector(int,int);double abs();void display(); };//vector.cpp #include "vector.hpp" …

CI/CD—K8S 基本理解与部署

1 K8S 是什么 Kubernetes 是一款容器的编排调度工具,来源于 Google 开源的 Brog 系统。Kubernetes简称K8S,是用8代替8个字符 “ubernete” 而成的缩写,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化…

解决createRoot is not a function

报错: 出现的原因:在于把react18使用的vite构建,在开发中因react版本太高与其他库不兼容,而在降级的时候,出现以上dom渲染出现报错。 解决:将 src/index.j文件改成如下 import React from react; import…

【数据结构与算法】十大经典排序算法-冒泡排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌴掘金:HelloCode 🌞知乎:HelloCode ⚡如有问题,欢迎指正&#…

form 表单恢复初始数据

form 表单恢复初始数据 在现代的 Web 开发中,表单是不可或缺的组件之一。用户可以通过表单输入和提交数据,而开发者则需要对这些数据进行处理和存储。然而,在某些情况下,我们可能需要重置表单并恢复到最初的状态。 本文介绍了如…

MATLAB计算连续月份的不同栅格数据间的相关系数(输出为tif影像)

%先导入投影信息,某个影像的路径就行(最好是你分析的数据中的一个) [a,R]readgeoraster(G:\SIF\Global-AI_monthly_v3\bi\199001.tif); infogeotiffinfo(G:\SIF\Global-AI_monthly_v3\bi\199001.tif); [m,n]size(a); i1;gwzeros(m*n,24); %此…