实验三 白盒测试(逻辑覆盖+基路径)
实验目的:1. 掌握按逻辑覆盖方法设计测试用例
2. 掌握基路径测试方法设计测试用例
3. 初步熟悉如何利用程序插装技术进行逻辑覆
盖率分析
实验时间:4-6 学时
实验内容:
一、读以下三角形程序:
1、分析程序流程图,确定程序分支;设计分别满足语句覆盖、路径覆盖、条件
覆盖及条件组合覆盖和路径覆盖的测试用例;
2、画出控制流图,并计算圈复杂度,得到独立路径集合,采用基路径法设计测
试用例。
用测试用例对程序进行测试,记录测试结果,比较两种测试方法,并对结果进行
分析。
如果存在缺陷则修改程序,继续测试;
驱动的程序的主函数请自己编写!
源程序清单:
/** 判断三角形的类 */
public class TriangleTestMethod {
/** 判断三角形的种类。参数a, b, c分别为三角形的三边,
* 返回的参数值为0,表示非三角形;
* 为1,表示普通三角形;
* 为2,表示等腰三角形;
* 为3,表示等边三角形。
*/
public static int comfirm(int a, int b, int c) {
if((a + b > c) && (b + c > a) && (a + c > b))
{ // 判断为三角形
if((a == b) && (b ==c)) // 判断为等边三角形
if((a == b) || (b == c) || (a == c)) // 判断为等腰三角形
return 3;
return 2;
else // 判断为普通三角形
return 1;
}
else
{ // 为非三角形
return 0;
}
}
}
二、前一日函数PreDate是NextDate的逆函数(代码实现见下)
实现功能为:输入1800 年到2050 年之间的某个日期,函数返回这一天的前一天
的日期。(此处不考虑无效输入),请采用基路径方法对前一日函数进行测试用
例设计,并利用程序插装技术对测试用例的判定覆盖率进行检查分析。
代码:(被测函数为PreDate)
#include"stdio.h"
typedef struct MyDate{
int month;
int day;
int year;
}MyDate;
MyDate PreDate(MyDate date);
int Leapyear(int year);
void Print(MyDate date);
MyDate PreDate(MyDate date)
//输入日期有效性检查中其他模块实现,此处假设输入日期都是合法数据
{
1.MyDate yesterday;
2.yesterday.month = date.month; // initialization
3.yesterday.day = date.day;
4.yesterday.year = date.year;
5.int days_month[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
//初始化每月天数,其中2月不确定,初始化为0
6.if(date.day>1)
7.yesterday.day=date.day-1;
else
{
8.if(date.month==1)
{
}
9.yesterday.year=date.year-1;
10.yesterday.month=12;
11.yesterday.day=31;
12.else if(date.month==3)
{
13.if(Leapyear(date.year))
{
14.yesterday.month=2;
15.yesterday.day=29;
}
else
{
16.yesterday.month=2;
17.yesterday.day=28;
}
}
else
{
18.yesterday.month=date.month-1;
19.yesterday.day=days_month[date.month-1];
}
}
20.return yesterday;
}
21.int Leapyear(int year)
{
22.if((year%4==0&&year%100!=0) || (year%400==0))
23.return 1;
24.else return 0;
}
void Print(MyDate date)
{
25.printf("%d--%d--%d\n",date.year,date.month,date.day);
}