软考中级-嵌入式系统设计师-案例题考点-嵌入式系统测试篇
人体的红外辐射特性与它的表面温度有着十分密切的关系,门式测温仪通过对人体自身辐射红外能量的测量,便能准确地测定人体表面温度。由于门式测温仪最大的优点是非接触、快速测量,一般小于1秒钟,所以被广泛应用于机场、车站、码头、学校等人流量大的地方。该设备中软件主要完成A/D数据采集,并通过数学运算将红外数据转换为温度值,自动将额头表面温度结果换算为人体腋下温度,在显示终端显示。软件主要包括主程序模块、红外
【问题】
人体的红外辐射特性与它的表面温度有着十分密切的关系,门式测温仪通过对人体自身辐射红外能量的测量,便能准确地测定人体表面温度。由于门式测温仪最大的优点是非接触、快速测量,一般小于1秒钟,所以被广泛应用于机场、车站、码头、学校等人流量大的地方。
该设备中软件主要完成A/D数据采集,并通过数学运算将红外数据转换为温度值,自动将额头表面温度结果换算为人体腋下温度,在显示终端显示。软件主要包括主程序模块、红外测温程序模块、温度转换模块、显示程序模块、报警程序模块、环境温度补偿模块等。
程序的主要功能说明如下:
(1)如果按下“高温报警设置”键,则通过“+”键每次增加0.1"C或通过“-”键每次减少0.1"C,设置最高温度报警值(默认值为40C),按下“确认”键进行确认;
(2)如果按下“低温报警设置”键,则通过“+”键每次增加0.1"C或通过“-”键每次减少0.1"C,设置最低温度报警值(默认值为35"C),按下“确认”键进行确认;
(3)主程序模块判断是否在30厘米范围内存在红外能量,如果没有,继续执行(3);否则执行(4);
(4)读取红外测温程序模块送回的目标表面温度信息,并调用温度转换模块和环境温度补偿模块进行温度转换和补偿,并形成最终人体温度;
(5)将读取的温度信息与设定的最大值与最小值比较,如果大于等于最大值或小于等于最小值,则执行(6);否则向显示程序模块发送显示的温度值,并执行(7);
(6)调用报警处理程序,发出蜂鸣声提醒检测人员,并向显示程序模块发送报警信息;
(7)显示程序模块显示高温报警或低温报警或者温度信息。
考点:根据题意补全测试用例
【问题1】(7 分)
为了测试软件功能,测试人员设计了表3-1所示的测试用例,请填写该表中的空白(1)~(7)。
【问题1】
(1) 37.5℃
(2) 35.5℃
(3)被测目标物体温度为37.4℃
(4)高温报警信息
(5)大于37.5℃
(6) 35.6℃
(7)低温报警信息
考点:白盒测试的覆盖率问题
【问题2】(6分)
软件的结构覆盖率是度量测试充分性和有效性的一种手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。
采用以下处理过程实现“判断温度是否在正常范围”的功能:
if ((目标物体温度<高温报警值)&& (目标物体温度>低温报警值) )
{
显示目标物体温度;
}
else{
if (目标物体温度≥高温报警值)
{显示高温报警信息;}
else{
显示低温报警信息;
}
发出蜂鸣报警声音;
}
针对上述处理过程:
(1)若要求达到100%的语句覆盖,则所需的最少用例数是多少?
(2)若要求达到100%的分支覆盖,则所需的最少用例数是多少?
(3)若要求达到100%的MC/DC覆盖,则所需的最少用例数是多少?
【问题2】
(1) 3
(2) 3
(3) 3
语句覆盖、分支覆盖、MC/DC覆盖
以下以一个简单的 C 语言代码示例来分析语句覆盖、分支覆盖和 MC/DC 覆盖所需的最少用例数。
示例代码
#include <stdio.h>
// 一个简单的函数,根据条件返回不同结果
int check_condition(int a, int b, int c) {
int result = 0;
if (a > 0 && (b < 10 || c == 5)) {
result = 1;
}
return result;
}
1. 语句覆盖
语句覆盖要求程序中的每条语句至少执行一次。在这个函数里,只要让 if 条件为真,就能执行到 result = 1; 语句。
当 a = 1, b = 5, c = 0 时,a > 0 为真,b < 10 为真,所以 a > 0 && (b < 10 || c == 5) 为真,result = 1; 会被执行,同时 return result; 也会执行。
所以达到 100% 语句覆盖所需的最少用例数是 1 个。
2. 分支覆盖
分支覆盖要求程序中每个判定的 true 分支和 false 分支至少执行一次。
当 a = 1, b = 5, c = 0 时,a > 0 && (b < 10 || c == 5) 为真,走 true 分支。
当 a = -1, b = 15, c = 2 时,a > 0 为假,所以 a > 0 && (b < 10 || c == 5) 为假,走 false 分支。
因此,达到 100% 分支覆盖所需的最少用例数是 2 个。
3. MC/DC 覆盖
MC/DC 覆盖要求每个输入输出至少被改变一次,且每个条件必须能够独立影响判定结果。
对于 a > 0 && (b < 10 || c == 5) 这个判定,有三个条件:a > 0、b < 10、c == 5。
让 a > 0 独立影响结果:
用例 1:a = 1, b = 5, c = 0,判定结果为 true。
用例 2:a = -1, b = 5, c = 0,判定结果为 false,a 的改变独立影响了判定结果。
让 b < 10 独立影响结果:
用例 3:a = 1, b = 5, c = 0,判定结果为 true。
用例 4:a = 1, b = 15, c = 0,此时 b < 10 为假,若 c != 5,判定结果为 false,b 的改变独立影响了判定结果。
让 c == 5 独立影响结果:
用例 5:a = 1, b = 15, c = 5,判定结果为 true。
用例 6:a = 1, b = 15, c = 0,判定结果为 false,c 的改变独立影响了判定结果。
经过去重后,最少用例数为 4 个可以达到 100% 的 MC/DC 覆盖。
(三个独立影响的都为false,所以还需要一个用例来true)
总结如下:
(1) 若要求达到 100% 的语句覆盖,则所需的最少用例数是 1。
(2) 若要求达到 100% 的分支覆盖,则所需的最少用例数是 2。
(3) 若要求达到 100% 的 MC/DC 覆盖,则所需的最少用例数是 4。
考点:黑盒测试用例设计方法
【问题3】 (2 分)
常见的黑盒测试的测试用例设计方法包括:①等价类划分;②边界值分析;③因果图;
④决策表等。测试人员在表3-1中针对本题设计测试用例时,使用了其中的哪种方法?
【问题3】
边界值分析法或②
#include <stdio.h>
// 一个简单的函数,根据条件返回不同结果
int check_condition(int a, int b, int c) {
int result = 0;
if (a > 0 && (b < 10 || c == 5)) {
result = 1;
}
return result;
}
1. 等价类划分
等价类划分是把程序的输入域划分成若干部分(子集),然后从每个子集中选取少数具有代表性的数据作为测试用例。
对于函数 check_condition
的输入参数 a
、b
、c
:
- 输入参数
a
的等价类:- 有效等价类:
a > 0
(例如a = 1
) - 无效等价类:
a <= 0
(例如a = -1
)
- 有效等价类:
- 输入参数
b
的等价类:- 有效等价类:
b < 10
(例如b = 5
) - 无效等价类:
b >= 10
(例如b = 10
)
- 有效等价类:
- 输入参数
c
的等价类:- 有效等价类:
c == 5
(例如c = 5
) - 无效等价类:
c != 5
(例如c = 0
)
- 有效等价类:
测试用例:
用例编号 | a 的值 |
b 的值 |
c 的值 |
预期输出 |
---|---|---|---|---|
1 | 1 | 5 | 0 | 1 |
2 | -1 | 5 | 0 | 0 |
3 | 1 | 10 | 0 | 0 |
4 | 1 | 5 | 5 | 1 |
5 | 1 | 10 | 5 | 1 |
2. 边界值分析
边界值分析是对等价类划分方法的补充,关注输入边界附近的值。
对于函数 check_condition
的输入参数 a
、b
、c
:
- 输入参数
a
的边界值:a = 0
(边界)、a = 1
(边界附近有效)、a = -1
(边界附近无效) - 输入参数
b
的边界值:b = 9
(边界附近有效)、b = 10
(边界)、b = 11
(边界附近无效) - 输入参数
c
的边界值:c = 4
(边界附近无效)、c = 5
(边界)、c = 6
(边界附近无效)
测试用例:
用例编号 | a 的值 |
b 的值 |
c 的值 |
预期输出 |
---|---|---|---|---|
1 | 0 | 9 | 4 | 0 |
2 | 1 | 9 | 4 | 1 |
3 | -1 | 9 | 4 | 0 |
4 | 1 | 10 | 4 | 0 |
5 | 1 | 11 | 4 | 0 |
6 | 1 | 9 | 5 | 1 |
7 | 1 | 9 | 6 | 0 |
3. 因果图
因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法。
对于函数 check_condition
,其因果关系为:
- 原因:
- 原因 1:
a > 0
- 原因 2:
b < 10
- 原因 3:
c == 5
- 原因 1:
- 结果:
- 结果 1:
result = 1
- 结果 2:
result = 0
- 结果 1:
根据因果关系绘制因果图(这里简单文字描述):
当原因 1 为真,且原因 2 或原因 3 至少一个为真时,结果 1 成立;否则结果 2 成立。
测试用例:
用例编号 | a > 0 |
b < 10 |
c == 5 |
预期输出 |
---|---|---|---|---|
1 | 真 | 真 | 假 | 1 |
2 | 真 | 假 | 真 | 1 |
3 | 真 | 假 | 假 | 0 |
4 | 假 | 真 | 真 | 0 |
5 | 假 | 假 | 假 | 0 |
4. 决策表
决策表是把复杂的逻辑关系和多种条件组合的情况表达得明确而直观的工具。
对于函数 check_condition
,决策表如下:
条件 | 用例 1 | 用例 2 | 用例 3 | 用例 4 | 用例 5 |
---|---|---|---|---|---|
a > 0 |
真 | 真 | 真 | 假 | 假 |
b < 10 |
真 | 假 | 假 | 真 | 假 |
c == 5 |
假 | 真 | 假 | 真 | 假 |
结果 | 1 | 1 | 0 | 0 | 0 |
更多推荐
所有评论(0)