目录
一.实验目的
上机练习主要针对本章中需要重点掌握的知识点,以及在白盒测试方法中容易出错的内容进行练习,通过上机练习可以考察同学对知识点的掌握情况,对白盒测试方法的熟练程度。
二.实验要求
上机:(考察知识点为实例:判断年份是否为闰年、实例:三角形的逻辑覆盖、实例:求3个数的中间值)
形式:单独完成
三.实验内容
题目一:基本路径法,判断是否为闰年
以判断闰年问题的C语言程序代码为例,实现如何通过基本路径法设计测试用例,要求如下:
1. 设计程序判断输入的年份是否为闰年;
代码如下:
#include<stdio.h>
void main() {
int year;
scanf("%d", &year);
if (year % 4 == 0 ) {
if (year % 100 != 0) {
printf("闰年");
}
else if(year%400==0) {
printf("闰年");
}
else {
printf("不是闰年");
}
}
else
{
printf("不是闰年");
}
}
2. 画出程序的流程图;
3. 画出程序的控制流图;
4.设计判断闰年问题的测试用例。
路径1:1→2→8
路径2: 1→3→4→6→8
路径3:1→3→4→7→8
路径4: 1→3→5→8
测试用例如下:
测试用例 | 测试路径 | 输入数据 | 预期结果 |
Test1 | 1→2→8 | Year==2003 | 不是闰年 |
Test2 | 1→3→4→6→8 | Year==2000 | 闰年 |
Test3 | 1→3→4→7→8 | Year==1900 | 不是闰年 |
Test4 | 1→3→5→8 | Year==2028 | 闰年 |
题目二:三角形的逻辑覆盖
根据三角形3边的关系,实现一个判断三角形的程序,要求如下:
1. 根据三角形3边的关系写出一段判断三角形的代码;
#include<stdio.h>
void mian() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a) {
if (a == b && b == c) {
printf("等边三角形");
}
else if (a = b || b == c || a == c) {
printf("等腰三角形");
}
else {
printf("普通三角形");
}
}
else {
printf("不是三角形");
}
}
2. 画出流程图;
3. 绘制程序的控制流图;
4. 设计三角形程序判定覆盖测试用例。
编号 | 测试用例 | 路径 | 预期结果 | ||
a | b | c | |||
Test1 | 1 | 2 | 3 | 1→2→8 | 不是三角形 |
Test2 | 3 | 4 | 3 | 1→3→4→6→8 | 等腰三角形 |
Test3 | 3 | 4 | 5 | 1→3→4→7→8 | 普通三角形 |
Test4 | 3 | 3 | 3 | 1→3→5→8 | 等边三角形 |
题目三:代码插桩法
使用源代码插桩法求3个数的中间值,要求如下:
1. 从键盘输入3个数并求中间值的源代码;
#include<stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
if (b > c) {
printf("中间值为%d", b);
}
else {
if (a > c) {
printf("中间值为%d", c);
}
else {
printf("中间值为%d", a);
}
}
}
else if (a < b) {
if (b < c) {
printf("中间值为%d", b);
}
else {
if (a > c) {
printf("中间值为%d", a);
}
else {
printf("中间值为%d", c);
}
}
}
else {
printf("中间值为%d", a);
}
printf("\n");
}
2. 查看源程序执行的过程,获取插桩后的代码;
插桩后的代码:
#include<stdio.h>
#define LINE() fprintf(__POINT__,"%3d",__LINE__)
FILE* __POINT__;
void main()
{
if ((__POINT__ = fopen("test.txt", "w")) == NULL)
fprintf(stderr, "不能打开test.txt文件");
int a, b, c;
LINE(),scanf("%d %d %d", &a, &b, &c);
if (LINE(),a > b) {
if (LINE(),b > c) {
printf("中间值为%d", b);
}
else {
if (LINE(),a > c) {
LINE(),printf("中间值为%d", c);
}
else {
LINE(),printf("中间值为%d", a);
}
}
}
else if (LINE(),a < b) {
if (LINE(),b < c) {
LINE(),printf("中间值为%d", b);
}
else {
if (LINE(),a > c) {
LINE(),printf("中间值为%d", a);
}
else {
LINE(),printf("中间值为%d", c);
}
}
}
else {
LINE(),printf("中间值为%d", a);
}
LINE(),printf("\n");
}
3. 根据3个数的不同组合方式设计测试用例;
测试用例 | 测试数据 | 预期结果 |
Test1 | 1,1,2 | 1 |
Test2 | 1,2,3 | 2 |
Test3 | 3,2,1 | 2 |
Test4 | 3,3,3 | 3 |
Test5 | 6,4,5 | 4 |
Test6 | 6,8,4 | 8 |
Test7 | 8,4,9 | 4 |
4. 得到程序的输出结果与程序执行路径。
测试用例 | 输出结果 | 执行路径 |
Test1 | 1 | 9→10→23→37→39 |
Test2 | 2 | 9→10→23→24→25→39 |
Test3 | 2 | 9→10→11→39 |
Test4 | 3 | 9→10→23→37→39 |
Test5 | 4 | 9→10→11→15→16→39 |
Test6 | 8 | 9→10→23→24→28→29→39 |
Test7 | 4 | 9→10→11→15→19→39 |
解释:
1. 执行路径在test.txt中获得
2. test.txt保存在当前文件所在路径下
3. 复制路径步骤如下: