4、测试验证基础理论:V模型开发流程、测试等级、测试策略与计划、测试用例设计方法
各位同学好,我是老张。在航电系统这行摸爬滚打了十几年,今天咱们聊聊测试验证的根基——V模型。说实话,很多新人一上来就问我怎么写测试用例,但如果不理解V模型背后的逻辑,写出来的用例往往就是空中楼阁。
4.1 V模型开发流程:为什么是“V”而不是“瀑布”?
你看这个V字,左边是需求分析、概要设计、详细设计,右边是单元测试、集成测试、系统测试、验收测试。它不像瀑布模型那样从上往下流,而是把测试活动提前到开发阶段就开始了。
我个人的理解是:V模型的核心思想就是“早验证、早发现”。你想想看,如果在需求阶段就写好了验收测试用例,等到开发完再测,是不是能少走很多弯路?
关键点:V模型强调测试活动与开发活动并行开展。左边每个阶段的输出,都是右边对应测试阶段的输入。
举个例子,我在做某型飞机座舱显示系统时,需求文档里写了一句“画面切换时间小于200ms”。如果等到系统集成后再测,发现不达标,那改起来可就费劲了。但如果在详细设计阶段就写好单元测试用例,针对渲染引擎的每个模块单独测,问题就能提前暴露。
4.2 测试等级:从单元到验收,层层递进
测试等级这事儿,说白了就是“从小到大、从内到外”地验证。我习惯把它分成四个层次:
4.2.1 单元测试
这是最底层的测试,针对函数、模块、类。在航电系统中,比如一个ADIRS数据解析函数、一个显示画面的绘制函数,都属于单元测试的范畴。
我建议:单元测试要做到“白盒覆盖”,代码覆盖率至少达到90%以上。我曾经遇到过一个bug,某个条件分支在单元测试时没覆盖到,结果集成测试时画面闪了一下黑屏。嗯,从那以后我再也不敢偷懒了。
4.2.2 集成测试
单元测完了,得把模块拼起来看看能不能协同工作。比如显示系统里的图形引擎和事件处理模块,它们之间的接口对不对?数据传递有没有丢包?
避坑指南:我曾经在集成测试时发现,两个模块对同一个数据结构的定义不一致——一个用大端字节序,另一个用小端。这种问题在单元测试阶段根本发现不了,只有集成时才会暴露。
4.2.3 系统测试
系统测试就是“真刀真枪”地干了。把整个航电显示系统放在仿真环境里,模拟各种飞行场景。比如起飞、巡航、进近、复飞,每个阶段画面显示对不对?告警信息触发了没有?
4.2.4 验收测试
这是最后一道关,通常由客户或第三方来做。说白了,就是验证系统是否满足需求规格说明书里的每一条要求。我参与过一个项目,验收测试时客户发现某个画面的字体颜色和需求文档里写的不一样——虽然功能没问题,但人家就是不签字。
| 测试等级 | 测试对象 | 测试依据 | 典型方法 |
|---|---|---|---|
| 单元测试 | 函数、模块 | 详细设计文档 | 白盒测试、语句覆盖 |
| 集成测试 | 模块接口 | 概要设计文档 | 接口测试、数据流测试 |
| 系统测试 | 完整系统 | 需求规格说明书 | 黑盒测试、场景测试 |
| 验收测试 | 交付产品 | 合同/需求 | 用户验收测试 |
4.3 测试策略与计划:别急着写用例
很多新手一上来就埋头写测试用例,结果写到一半发现需求变了,或者测试环境搭不起来。我个人的习惯是:先定策略,再写计划,最后才是用例。
测试策略回答的是“测什么、怎么测、测多深”。比如对于航电显示系统,哪些功能是安全关键的?哪些模块容错要求高?这些决定了测试的优先级和深度。
测试计划则更具体:谁来做?什么时候做?用什么工具?环境怎么搭?我记得有一次做某型飞机的显示系统测试,计划里没考虑硬件在环(HIL)环境的搭建时间,结果测试周期被压缩了一半,搞得大家天天加班。
注意:测试计划一定要留出缓冲时间。航电系统的测试环境搭建往往比想象中复杂,比如需要模拟ARINC 429总线数据、需要接入真实的显示面板等。我建议至少预留20%的缓冲时间。
4.4 测试用例设计方法:从理论到实践
测试用例设计方法有很多,但航电系统里常用的就那么几种。我挑几个重点说说:
4.4.1 等价类划分
说白了,就是把输入数据分成几个“等价”的类,每个类里选一个代表来测。比如一个高度显示范围是-1000到50000英尺,那我们可以分成:无效低值(<-1000)、正常范围(-1000~50000)、无效高值(>50000)三个等价类。
4.4.2 边界值分析
这个和等价类经常一起用。经验告诉我,很多bug都出在边界上。比如高度显示在-1000英尺和50000英尺这两个边界值,以及它们的邻值(-1001、-999、49999、50001),一定要测。
4.4.3 场景法
航电系统最讲究场景。你不能只测单个功能,得模拟飞行员的操作流程。比如从起飞到巡航,飞行员会依次操作哪些按钮?画面会如何切换?告警信息何时出现?
// 一个简单的场景测试用例示例(伪代码)
场景:起飞阶段显示测试
步骤:
1. 模拟飞机在地面,速度=0,高度=0
2. 设置推力为起飞推力
3. 模拟速度增加到V1(决策速度)
4. 检查:是否显示“V1”提示?
5. 模拟抬轮,高度开始增加
6. 检查:主飞行显示器(PFD)是否切换到起飞模式?
4.4.4 状态迁移法
航电系统有很多状态:待机、正常、降级、故障。每个状态之间的迁移条件是什么?迁移后画面如何变化?这些都需要设计专门的用例来覆盖。
小技巧:我习惯用状态迁移图来梳理这些逻辑。画完图之后,每个迁移路径都写一个测试用例,基本就能覆盖全了。
好了,关于测试验证的基础理论,今天就聊到这儿。记住一句话:V模型不是死板的流程,而是一种思维方式——把测试提前,把问题扼杀在摇篮里。下一章咱们聊聊具体的测试工具和环境搭建,到时候我会分享一些实战中的坑和技巧。