中出什么意思| 6克血是什么概念| 什么不安成语| bolon是什么牌子眼镜| 江诗丹顿属于什么档次| 今天是什么月| buy是什么意思| 胸闷气短挂什么科室| 七宗罪都是什么| 妊娠是什么意思| 结缔组织病是什么病能治愈吗| 什么饮料解渴| 流年是什么| 豪爽是什么意思| 空囊是什么意思| 女属蛇的和什么属相最配| 北肖指什么生肖| 颈部有肿块挂什么科| 什么叫戈壁滩| 完全性右束支传导阻滞是什么意思| 竹鼠吃什么| 什么是正装女士| n是什么牌子的鞋| 小麦什么时候播种| 频繁流鼻血是什么病的前兆| autumn是什么意思| 美国为什么不禁枪| 二大爷是什么意思| 拆封是什么意思| 姓林的女孩取什么名字好| 孕妇为什么不能吃西瓜| 分分钟都妙不可言是什么歌| 舌头肿大是什么原因引起的| 为什么说冬吃萝卜夏吃姜| 结婚28年是什么婚| 三叉神经痛吃什么药好| 静夜思是什么季节| 遨游是什么意思| 沾花惹草是什么生肖| 来例假可以吃什么水果| 死精是什么原因造成的| wuli是什么意思| 人上人是什么意思| 吃什么能让子宫瘤变小| 调养是什么意思| 惰性是什么意思| 胃复安又叫什么| 去三亚需要什么证件| 每逢佳节倍思亲的上一句是什么| 上面一个日下面一个立是什么字| 年检是什么意思| 桂皮是什么| 参乌健脑胶囊适合什么人吃| 1960年是什么年| 闷是什么意思| 狗肉和什么食物相克| 苯磺酸氨氯地平片什么时候吃最好| 快车和专车有什么区别| 吃什么油最健康排行榜| 肢体麻木是什么原因| 病毒是什么生物| 8月开什么花| 宝宝睡觉摇头是什么原因| 免疫力低吃什么好| 庚什么意思| 总胆红素是什么意思| 为什么小便是红色的尿| 心慌心闷是什么原因| 日加华念什么| 声音嘶哑吃什么药好| 萎缩性阴道炎用什么药| 子午相冲是什么生肖| 水丸是什么意思| 寡妇年是什么意思| 黄芪和什么搭配不上火| 脾切除后有什么影响| 枫字五行属什么| 腰疼贴什么膏药| 手足口病是什么原因引起的| 男人下巴有痣代表什么| 喵喵喵是什么意思| 平反是什么意思| 铁达时手表什么档次| 四川古代叫什么| 鱼用什么游泳| 胰腺炎是什么症状| 乳房痛挂什么科| 什么不平| 为什么身上痒一抓就起疙瘩| 抽血化验挂什么科| 怀孕一个月出血是什么情况| 蓝莓什么时候种植| 卧轨是什么意思| 热锅上的蚂蚁是什么意思| 什么耳什么聋| 管教有方是什么意思| 横死是什么意思| 天麻有什么作用| 实名认证是什么意思| 加湿器用什么水| d二聚体偏高说明什么| 梦见蛇在家里是什么意思| 氧气湿化瓶里加什么水| hj是什么意思| 丝鸟读什么| 荔枝有什么作用与功效| 晚饭吃什么好| mcm牌子属于什么档次| 什么是肺大泡| 眉头下方有痣代表什么| 白细胞酯酶阳性是什么意思| 乌鸡蛋是什么颜色| 流理台是什么| 发烧能吃什么食物| 吃炒黑豆有什么好处和坏处| 碳素墨水用什么能洗掉| 屎黄色是什么颜色| samsonite什么牌子| 负压引流器有什么作用| 草缸适合养什么鱼| 皮角是什么病| 南瓜不能和什么一起吃| 天天睡不着觉什么原因| 头发轻轻一拉就掉了是什么原因| mac是什么| 锦衣夜行什么意思| 蒲公英可以和什么一起泡水喝| 百衲衣是什么意思| 什么时间立秋| 大腿出汗是什么原因| 砍是什么生肖| 日落是什么时辰| 生理期吃什么比较好| 湿气到底是什么| 1885年属什么生肖| pc是什么意思| 血常规异常是什么意思| 心脏24小时监测叫什么| 什么人不能吃狗肉| 血压低吃什么食物| 下午3点到5点是什么时辰| 酸菜鱼一般加什么配菜| 大肠在人体什么位置图| 缺钾最忌讳吃什么| 吃什么补胰腺最好| 做梦捡到钱是什么意思| 圣母什么意思| 梦见打老鼠是什么征兆| 吃了避孕药会有什么副作用| 甲是什么生肖| 2月14日是什么星座| 新车上牌需要什么资料| 三角形为什么具有稳定性| 77代表什么意思| 公历是什么| 猪血和鸭血有什么区别| 苏轼是什么朝代的| 沣字五行属什么| 陈宝莲为什么自杀| 吃完桃子不能吃什么| 男属猴和什么属相最配| 大肠在人体什么位置图| 氟哌噻吨美利曲辛片治什么病| 为什么一睡觉就做梦| 百合与什么搭配最好| 腿硬邦邦的是什么原因| 宫颈癌是什么| 冲锋衣是什么意思| 鸭肉煲汤放什么材料好| 吃什么补头发| 5月6号是什么星座| 普洱茶是属于什么茶| 胃糜烂和胃溃疡有什么区别| 射精什么意思| 全血是什么意思| 头孢长什么样| 舌头变肥大什么原因| 治疗结石最好的方法是什么| 芒果有什么功效| 高定是什么意思| 耿耿什么| 尿路感染吃什么药好得快| mlf操作是什么意思| 圆脸适合什么眉形| 什么叫粉丝| 血卡是什么| 纽带是什么意思| 去脚气用什么药最好| 笔走龙蛇是什么生肖| 什么是夹角| 贫血有什么症状表现| 小肚子鼓鼓的什么原因| 用什么药膏能拔去粉瘤| 人是什么结构| 11.9是什么星座| 什么是同比| 无家可归是什么生肖| 手指尖疼是什么原因| 正因数是什么| premier是什么牌子| 优势卵泡是什么意思| 跟着好人学好人下句是什么| 日有所思夜有所梦是什么意思| 谷字五行属什么| 牙龈肿痛看什么科| 头里面有肿瘤有什么症状| 夏季适合喝什么茶| 血糖高的可以吃什么水果| 手不什么| 多核巨细胞是什么意思| jasonwood是什么牌子| 一日三餐是什么生肖| 为什么叫夺命大乌苏| 呲牙咧嘴是什么意思| 韭菜籽配什么壮阳最猛| 忘忧草是什么意思| 白细胞异常是什么原因| 梦见男朋友是什么意思| 眼皮跳是什么原因| 我好想你是什么歌| 牛肉和什么相克| 女性口臭都是什么原因| 手五行属什么| 早上头晕是什么原因| 脚后筋疼是什么原因引起的| 舜字五行属什么| 冰菜是什么菜| 什么是无氧运动| 灰指甲用什么药膏| 高反人群一般是什么人| 钴对人体有什么伤害| 将军是什么生肖| 马后面是什么生肖| 什么叫肺纤维化| hda是什么| 紫癜是一种什么病| mandy英文名什么意思| eis是什么意思| 肾素低说明什么| 睡觉被口水呛醒是什么原因| 下午一点是什么时辰| 增生是什么原因造成的| 赢弱什么意思| 九寨沟什么时候去最好| 椭圆形脸适合什么发型| 小孩呕吐吃什么药| 为什么牙缝里的东西很臭| 什么样的莲蓬| 罄竹难书什么意思| 7年之痒是什么意思| 为什么穿堂风最伤人| 没有料酒用什么去腥| 国家穷为什么不多印钱| 怀孕周期是从什么时候开始算的| 口腔医学专业学什么| 什么叫过渡句| 什么长而去| 册那什么意思| 13岁属什么生肖| 什么血型是熊猫血| 五月十六是什么星座| 十月30号是什么星座| 爆菊什么意思| 外婆菜是什么菜做的| 百度
侵权投诉
订阅
纠错
加入自媒体

汽车软件单元测试的要点与意义

2025-08-07 16:10
水轻言
关注

测试是一个非常基础的概念,这种基础让大家可以随意在它前面添加各种定语。

尽管这种添加的背后多数是不同的分类维度,但让测试本身成为了繁杂概念的集合,这也让我们总有种无法把握的烦躁感。

单元测试就是这堆让人烦躁的繁杂概念之一。

1

3种软件测试分类及单元测试的定义

如前所述,软件测试的分类维度非常多,我们仅从以下常见的3种方式阐释:

·按是否执行软件分类:静态测试和动态测试,单元测试横跨二者。

·按是否关注内部代码分类:白盒测试和黑盒测试,单元测试属于白盒测试。

·按汽车软件集成层次分类:从单元测试到整车验收有各级测试(参考《汽车软件集成的5个层次》),单元测试属于最低一个层级。

当我们去网上搜索单元测试的定义时,往往会看到类似这样的说法,“单元测试是指对软件中的最小可测单元进行测试”。

但这个描述只能是一个正确的定义,仍然很难把握。什么叫最小可测单元?一个函数?一个类?一个.c?还是一个功能模块?

争论一直存在。

搁置争议,我们只看汽车行业。按照惯例或标准,广义上,可以把软件集成测试以下所有测试都看作是单元测试。

2

单元测试的4种类型

进一步地,在汽车软件领域,我们可以将单元测试细分为代码评审、静态分析、单元(代码功能)测试和单元(代码覆盖度)测试。

前两种属于静态测试,后两种属于动态测试。

2.1 代码评审

根据形式或正式程度上的差异,代码评审会分成很多名目,比如:

走查(Walk Through)

同行评审(Peer Review)

代码评审(Code Revew)

结对编程(Pair Programming)

代码审查(Code Inspection)

但简单来说,代码评审就是人看,一个或一组人面对可阅读的源代码(有时也需要结合需求或软件文档),进行随意的或正式会议下的检查。

可能会识别出如下的一些问题:

无注释的代码

不可达的条件路径

太复杂的循环嵌套

无返回值的分支

未初始化的变量

空指针的引用

不规范的命名规则

......

理论上,对于手写代码的合理性与正确性,他人及更有经验的他人去检查一遍,有一定的意义,甚至某些案例下,会胜过后期测试。

比如,开发调用了名称相似的变量,这种错误可能在流到很后期才会被探测到。

实际上,代码评审也同其他评审类似,都是无奈为之而又常常流于形式的手段。

解决这类问题的方法不外乎3个:

• 用更负责且有经验的人

• 提升形式的强制性

• 积累充足的Checklist

其中,在下一节静态分析工具使用后,人的经验就成为了代码评审存在的最大意义。

总之,代码评审不算是典型的测试,但作为编码后的第一道屏障,仍然有必要存在。

2.2 静态分析

相较于人工代码评审的低效,静态分析是依赖于诸如Parasoft、Polyspace、Coverity等工具的自动化分析。

因为不需要执行软件,所以静态分析仍然不需要二进制代码或可执行程序。

静态分析工具通常主要支持以下两种分析类型:

语法分析:主要检查是否符合编程语言的语法规则,如MISRA C。

代码路径分析:主要包括控制流分析(如语句条件分支、循环迭代次数)、数据流分析(如变量值的传递)、代码复杂性(如圈复杂度、路径长度)、依赖关系(如函数之间的调用、模块之间的依赖)等。

当对部分或全部代码进行静态扫描后,会得到基于内置规则集的判定结果,一般会包含分等级的规则违反情况。

如MISRA C: 2012分为强制(Mandatory)、必要(Required)和建议(Advisory)。

通常,强制项必修,必要项需要进行评审。但有时候,涉及到第三方标准库时,就无法按照这个规则执行了,具体还是要看产品类型(如是否涉及信息安全)和公司要求。

此外,由于编译器基本也都具备类似的代码检查作用,静态分析工具也可以理解为编译器的扩展。

因此,我们也会把编译器警告或错误作为要处理的条目。

2.3 单元(代码功能)测试

这部分测试的源头是软件详细设计,测试重点从代码写得漂不漂亮转移到代码写得有没有用,也就是是不是符合了设计。

汽车软件用例的设计,一般有如下两种密切相关的方法:

2.3.1 等价类划分法

等价类划分是将软件单元的输入数据划分为等价数据(即可以导致相同的输出)的分区,而后用测试用例去至少覆盖每个分区一次。

其背后的诉求是,通过划分输入数据的类别来限定测试用例的数量。

举一个例子。

一个函数输入的范围是1~100,如果要穷举式测试,我们需要为输入参数编写100个测试用例。

而使用等价类划分法的话,测试用例就可以分为三类:

有效(1~100)

以下无效(例如0)

以上无效(>100)

于是,用例也就可以缩减为3个。

可能有人很快会有疑问,按照等价输入数据进行测试,会不会有遗漏呢?

没错,尤其是边界值处很容易出错。这就是第二个方法要解决的问题。

2.3.2 边界值法

仍然以上一个案例展开。

使用边界值法的话,我们可为等价类划分法定义的测试用例作如下补充:

刚好在边界(1,100)

刚好在边界以下(0,99)

刚刚越过边界(2,101)

经过两种方法的结合,缺陷发现的能力会进一步提高。

2.4 单元(代码覆盖度)测试

单元(代码功能)测试完成后,够了吗?不够。

我们没测出bug,代表的不是软件没bug,而是没测够。

没测够的典型表现是测试用例对代码的覆盖程度不足,这就是本节要处理的问题。

主要的代码覆盖度测试类型包括以下4种,严格程度从上到下依次增强:

语句覆盖(Statement Coverage):这是最基本的覆盖度类型,它确保每个代码语句至少执行一次,100%的语句覆盖率可以保证没有死代码,属于入门级别的测试。

分支覆盖(Branch Coverage):分支覆盖确保每个分支语句(通常是if语句)都被覆盖到,即每个分支的真和假两种情况都被测试到,有助于揭示一些逻辑错误,如if a and b then...,用例为a真+b真(分支为真)、a真+b假(分支为假,与其他条件组合等价)即可100%。

条件覆盖(Condition Coverage):条件覆盖要求每个分支语句的每个条件都被覆盖,即每个条件的真和假两种情况都被测试到,它比分支覆盖更为严格,因为它会关注条件的组合覆盖,如if a and b then...,用例为a真+b真、a真+b假、a假+b真、a假+b假才可100%。

修改条件/判定组合覆盖(Modified Condition/Decision Combination Coverage):这一级别的覆盖要求同时满足条件覆盖和判定覆盖,以确保条件和判定之间的组合覆盖,是一种更加严格的覆盖度测试。

不同的项目和产品可能需要不同类型的代码覆盖度测试。

通常,基础的覆盖度(如语句覆盖和分支覆盖)是必要的起点,而在需要更高可靠性和安全性的项目中,可能会选择更严格的MC/DC覆盖度,比如,涉及ASIL D的模块。

3

单元测试意义的思考

说意义的话,我们可以很快说出一大堆,bug提前暴露、提升软件质量、软件更加健壮、利于重构、清除技术债务、积累组织资产......

问题在于,在不好言明的价值和巨大的交付压力之下,单元测试太容易被权衡掉了,谁还没有个意义呢?

实际上,管中窥豹,对这类重要但不紧急事情的意义的探讨会折射出很多面的信息,比如下面这个算式。

自动化的程度+对软件的理解+产品的竞争力+公司的文化+行业的生态=单元测试的意义

4

全文小结

本文主要在讲单元测试的一些基本概念和应用场景。

首先,从是否执行软件、是否关注内部代码和汽车软件分层集成这3个方面解释了单元测试的特点。进而,引申出汽车软件单元测试的概念。

接着,将单元测试细分为代码评审、静态分析、代码功能测试、代码覆盖度测试,并分别进行了描述。

由于单元测试离客户需求太远,往往被务实的我们忽略,如何看待其价值需要探讨,第3小节对此做了简单分析。

5

写在最后

不只是单元测试,软件大举进入汽车行业的过程中,未来无形不可见和当下有形可见的价值冲突持续在上演。

如何把握向左向右右分寸始终是一个巨大的决策考验。

       原文标题 : 汽车软件单元测试的要点与意义

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号

    水嘴是什么 依然如故的故是什么意思 谷氨酰转肽酶是指什么 经期适合吃什么 依从性是什么意思
    怎么看自己五行属什么 小月子可以吃什么水果 什么时间吃苹果最好 雨五行属什么 神经性耳鸣吃什么药好
    甲状腺挂什么科 蚊香对人体有什么危害 缺少维生素有什么症状 头疼是什么引起的 出柜是什么意思
    雌激素是什么东西 zero是什么牌子 什么不同成语 乳腺增生什么意思 抽动症是什么原因引起的
    复方北豆根氨酚那敏片是什么药yanzhenzixun.com 叶公好什么hcv7jop9ns1r.cn 例假少吃什么药hcv8jop6ns5r.cn 香砂六君丸治什么病hcv9jop7ns2r.cn c k是什么牌子hcv9jop1ns9r.cn
    肌酐高是什么原因引起的hcv8jop9ns6r.cn 葫芦五行属什么fenrenren.com 头皮痒用什么药bfb118.com 什么血型招蚊子hcv9jop3ns6r.cn 脑腐什么意思hcv9jop4ns9r.cn
    皮脂腺囊肿吃什么消炎药hcv9jop5ns4r.cn 梦见家里发大水了是什么征兆hcv8jop7ns1r.cn 红苋菜不能和什么一起吃hcv9jop0ns4r.cn 应届毕业生是什么意思hcv7jop5ns0r.cn 1997年出生的属什么hcv7jop6ns5r.cn
    世界大战是什么意思hcv8jop5ns4r.cn 生龙活虎是什么意思cj623037.com 脑血栓不能吃什么水果bysq.com 三福是什么hcv7jop4ns7r.cn 拉黑便是什么原因hcv9jop3ns7r.cn
    百度