一、实验目的
1、掌握白盒测试的概念。
2、掌握逻辑覆盖法。
二、实验任务
以下三个任务、至少完成两个
1、某工资计算程序功能如下:若雇员月工作小时超过40小时,则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过50小时,则超过50的部分按原小时工资的3倍的加班工资来计算,而40到50小时的工资仍按照原小时工资的1.5倍的加班工资来计算。程序输入为:雇员月工作时间及小时工资,输出为工资。
运用逻辑覆盖法的六种覆盖标准设计测试用例,并执行测试,撰写实验报告。
实验步骤:
1) 画出程序流程图
2) 根据逻辑覆盖法的六种覆盖标准设计测试用例,得到6张测试用例表
1.语句覆盖:
测试用例ID | h(小时) | m(元) | 预期输出 | 语句覆盖 |
T2 | 1 | 33 | 33.0元 | ①②③ |
T3 | 41 | 33 | 1369.5元 | ①④⑤⑥ |
T4 | 99 | 33 | 6666.0元 | ①④⑦⑧⑨ |
2. 判定覆盖:
测试用例ID | h(小时) | m(元) | 判定1 | 判定2 | 判定3 |
h<=40 &&h>=0 | h > 40 && h <= 50 | h > 50 | |||
T1 | -1 | 33 | F | F | F |
T2 | 1 | 33 | T | F | F |
T3 | 41 | 33 | F | T | F |
T4 | 99 | 33 | F | F | T |
3. 条件覆盖:
测试用例ID | h(小时) | m(元) | 条件h<=40 &&h>=0 | 条件 h > 40 && h<= 50 | 条件 h > 50 |
T1 | -1 | 33 | F | F | F |
T2 | 1 | 33 | T | F | F |
T3 | 41 | 33 | F | T | F |
T4 | 99 | 33 | F | F | T |
4. 条件/判定覆盖:
测试用例ID | h(小时) | m(元) | 条件h<=40 &&h>=0 | 条件 h > 40 && h <= 50 | 条件 h > 50 |
T1 | -1 | 33 | F | F | F |
T2 | 1 | 33 | T | F | F |
T3 | 41 | 33 | F | T | F |
T4 | 99 | 33 | F | F | T |
5. 条件组合覆盖:
测试用例ID | h(小时) | m(元) | 判定1 | 判定2 | 判定3 |
条件 h <= 40 &&h>=0 | 条件 h > 40 && h <= 50 | 条件 h > 50 | |||
T1 | -1 | 33 | F | F | F |
T2 | 1 | 33 | T | F | F |
T3 | 41 | 33 | F | T | F |
T4 | 99 | 33 | F | F | T |
6. 修正条件/判定覆盖:
测试用例ID | h(小时) | m(元) | 判定1 | 判定2 | 判定3 |
条件 h<=40 &&h>=0 | 条件 h > 40 && h <= 50 | 条件 h > 50 | |||
T1 | -1 | 33 | F | F | F |
T2 | 1 | 33 | T | F | F |
T3 | 41 | 33 | F | T | F |
T4 | 99 | 33 | F | F | T |
3)执行测试,填写软件缺陷报告。(软件缺陷报告格式同实验2)
测试结果:
测试用例T1:
软件缺陷报告:
测试模块: | 工资计算程序 | 开 发 者: | 张三 |
测 试 员: | 张三 | 测试日期: | 2024.5.8 |
软件缺陷列表 | |||
缺陷ID | 缺陷详细信息 | ||
BUG1 | 无 | ||
BUG2 | 无 | ||
BUG3 | 无 | ||
BUG4 | 无 |
测试代码:
public class Salary {
public static void main(String[] args) {
int h;
int m;
double s;
System.out.print("请输入雇员的月工作时间(小时):");
@SuppressWarnings("resource")
Scanner console = new Scanner(System.in);
h = console.nextInt();
System.out.print("请输入雇员的时薪(元):");
m = console.nextInt();
if(h<=40 && h>=0) {
s = h*m;
System.out.println("雇员本月的工资为:"+s+"元");
}
else {
if (h > 40 && h <= 50) {
s = 40 * m + (h - 40) * m * 1.5;
System.out.println("雇员本月的工资为:" + s + "元");
} else if(h > 50){
s = 40 * m + 10 * m * 1.5 + (h - 50) * m * 3;
System.out.println("雇员本月的工资为:" + s + "元");
}else {
System.out.println("输入的月工时有误,请重新输入!");
}
}
}
}
2、编写一个求解一元二次方程的程序,运用逻辑覆盖法的六种覆盖标准设计测试用例,并执行测试,撰写实验报告。
实验步骤:同上
3、对三角问题运用逻辑覆盖法的六种覆盖标准设计测试用例,并执行测试,撰写实验报告。
实验步骤:
1) 画出程序流程图
2) 根据逻辑覆盖法的六种覆盖标准设计测试用例,得到6张测试用例表
1. 语句覆盖:
测试用例ID | a | b | c | 预期输出 | 语句覆盖 |
T1 | 1 | 2 | 3 | 不构成三角西 | ①②⑤ |
T2 | 4 | 5 | 6 | 普通三角形 | ①②④⑦ |
T3 | 1 | 199 | 199 | 等腰三角形 | ①②④⑥⑨ |
T4 | 100 | 100 | 100 | 等边三角形 | ①②④⑥⑧ |
2. 判定覆盖:
测试用 例ID | a | b | c | 判定1 | 判定2 | 判定3 | 判定4 |
a,b,c>0&& a,b,c<200 | a+b>c | a==b ||b==c | a!=c | ||||
T1 | 1 | 2 | 3 | T | F | F | T |
T2 | 4 | 5 | 6 | T | T | F | T |
T3 | 1 | 199 | 199 | T | T | T | F |
T4 | 100 | 100 | 100 | T | T | T | T |
3. 条件覆盖:
测试用例ID | a | b | c | 条件a,b,c>0&& a,b,c<200 | 条件 a+b>c | 条件 a==b ||b==c | 条件 a!=c |
T1 | 1 | 2 | 3 | T | F | F | T |
T2 | 4 | 5 | 6 | T | T | F | T |
T3 | 1 | 199 | 199 | T | T | T | F |
T4 | 100 | 100 | 100 | T | T | T | T |
4. 条件/判定覆盖:
测试用例ID | a | b | c | 条件a,b,c>0&& a,b,c<200 | 条件 a+b>c | 条件 a==b ||b==c | 条件 a!=c |
T1 | 1 | 2 | 3 | T | F | F | T |
T2 | 4 | 5 | 6 | T | T | F | T |
T3 | 1 | 199 | 199 | T | T | T | F |
T4 | 100 | 100 | 100 | T | T | T | T |
5. 条件组合覆盖:
测试用 例ID | a | b | c | 判定1 | 判定2 | 判定3 | 判定4 |
条件a,b,c>0&& a,b,c<200 | 条件 a+b>c | 条件 a==b ||b==c | 条件a!=c | ||||
T1 | 1 | 2 | 3 | T | F | F | T |
T2 | 4 | 5 | 6 | T | T | F | T |
T3 | 1 | 199 | 199 | T | T | T | F |
T4 | 100 | 100 | 100 | T | T | T | T |
6. 修正条件/判定覆盖:
测试用 例ID | a | b | c | 判定1 | 判定2 | 判定3 | 判定4 |
条件a,b,c>0&& a,b,c<200 | 条件 a+b>c | 条件 a==b ||b==c | 条件a!=c | ||||
T1 | 1 | 2 | 3 | T | F | F | T |
T2 | 4 | 5 | 6 | T | T | F | T |
T3 | 1 | 199 | 199 | T | T | T | F |
T4 | 100 | 100 | 100 | T | T | T | T |
3)执行测试,填写软件缺陷报告。(软件缺陷报告格式同实验2)
测试结果:
测试用例T1:
软件缺陷报告:
测试模块: | 三角形 | 开 发 者: | 张三 |
测 试 员: | 张三 | 测试日期: | 2024.5.8 |
软件缺陷列表 | |||
缺陷ID | 缺陷详细信息 | ||
BUG1 | 无 | ||
BUG2 | 无 | ||
BUG3 | 无 | ||
BUG4 | 无 |
测试代码:
#include <stdio.h>
void triangle( int a, int b, int c ); // 函数声明 --- 作用域
int main(void)
{
int x,y,z;
printf("please input (length):\n");
printf("a:");
scanf("%d",&x);
printf("b:");
scanf("%d",&y);
printf("c:");
scanf("%d",&z);
triangle( x,y,z );//判断三角形类型
}
void triangle( int a, int b, int c )
{
int temp;
if( a > b )
{//如果a比较b大,就相互转换
temp = a;
a = b;
b = temp;
}
if( a > c )
{//如果a比较c大,就相互调换
temp = a;
a = c;
c = temp;
}
if( b > c )
{//如果b比较c大,就相互调换
temp = b;
b = c;
c = temp;
}
if( a<0||b<0||c<0||a>200||b>200||c>200 )
{
printf("不构成三角形\n");
return ;
}
else
{
if( a+b <= c )
{
printf("不构成三角形!!\n");
return ;
}
else
{
if( a == b || b == c)
{
if( a != c )
printf("等腰三角\n");
else
printf("等边三角\n");
}
else
{
printf("普通三角形\n");
}
}
}
}