嵌入式单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。根据理解来说单元测试没有一个明确的范围,一个函数是一个单元,一个模块也可以是一个单元,等等,每个我们像测试的代码功能都可以是一个"单元";
背景
平常在网络环境、工作环境经常听到单元测试这个词,但是自己对这方面了解甚少,本着学习的目的做此次学习笔记,同时也希望能"帮助"同道中人;
什么是单元测试?
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。根据理解来说单元测试没有一个明确的范围,一个函数是一个单元,一个模块也可以是一个单元,等等,每个我们像测试的代码功能都可以是一个"单元";
单元测试谁来做?
个人工作经历较少,只能根据网上的概括作为答案;单元测试一般是有开发人员或测试人员来做。谁来做并没有一个绝对的标准,看公司架构或安排,但是个人理解应该是开发人员内部进行单元测试较多吧;
单元测试怎么进行?
单元测试的实现方式包括:人工静态检查、动态执行跟踪;
人工静态检查:就是通常所说的“代码走读”,主要是保证代码逻辑的正确性;
动态执行跟踪:就是把程序代码运行起来,检查实际的运行结果和预期结果是否一致;
在我工作的公司,其实大家对代码质量关注度一直不高,一直以来代码只有"人工走读"、“整机测试”,这里其实覆盖了第一部分静态检查而缺少动态执行跟踪,在完成这篇笔记后我会探究一下是否有自动化代码走读方法;
补充:静态代码走读可以借助cppcheck、clang等多种开源工具,能检测出例空指针、内存泄漏等错误;
嵌入式单元测试
其实从网上找了很多答案,单元测试多是互联网行业流行,因为其业务一般是基于高度抽象的系统框架而不是像像嵌入式一样高度依赖硬件平台;普通嵌入式行业好像并没有特别推崇单元测试,新能源汽车行业应该算是嵌入式领域开发的天花板,依托已有上百年历史的传统汽车制造业,新能源汽车领域形成了一条完整系统框架,这点普通嵌入式行业无法比较;哪嵌入式是否有进行单元测试的必要?肯定是有必要,单元测试对提高代码健壮性、开发流程规范化、提高自测试效率有很重要的意义;
感悟
其实写到这里,个人是有些失望;其实单元测试与"想象"的单元测试有较大差距,本来我以为单元测试可以通过自动化或半自动化实现代码的测试工作,现在看来单元测试的本质还是通过人对程序执行结果进行提前预期,然后在代码执行过程,可以计时将代码执行、测试结果输出,并包含较为重要的调试信息;
常用单元测试框架
Unity测试框架
链接:https://github.com/ThrowTheSwitch/Unity/releases
Unity 是一个轻量级的测试框架,它使用 C 语言实现, 代码本身很小 。其代码中大多数是宏定义,所以实际编译后的代码会更小, 比较适合在嵌入式测试应用
。
CuTest测试框架
链接:https://sourceforge.net/projects/cutest/
CuTest
是一款微小的C语言单元测试框,只有2个文件,CuTest.c和CuTest.h
,全部代码加起来不到一千行。麻雀虽小,五脏俱全,测试的构建、测试的管理、测试语句,都全部包含在内。
Embedded Unit测试框架
链接:https://sourceforge.net/projects/embunit
Embedded Unit
是个纯标准c构建的单元测试框架,主要用在嵌入式c
的单体测试上,其主要特点是不依赖于任何C的标准库,所有的对象都是静态分配。
gtest 测试框架
链接:https://github.com/google/googletest/releases/tag/release-1.8.0
gtest
是 google
公司开发的一个开源的单元测试框架,基于 C++开发,可以对 C++语言和 C 语言进行单元测试。
Ctest测试框架
ctest
是集成在cmake
工具链下的一个C语言测试框架,配合cmake
使用体验更佳。
Unity
其他大同小异,没有最好的框架只有最适合的框架;
参考
https://blog.csdn.net/zhengnianli/article/details/104036227?fromshare=blogdetail&sharetype=blogdetail&sharerId=104036227&sharerefer=PC&sharesource=weixin_69040552&sharefrom=from_link
使用教程主要参考这位博主
书籍
《软件单元测试入门与实践》周立功,这个暂时没有时间看,后续会学习一下;
成果
源码仓库:gitee
更多推荐
所有评论(0)