目录
前言:
一、黑盒测试
二、实验目的
三、实验内容
四、实验步骤
五、实验过程
题目一
1、等价类划分表
2、设计测试用例
3、缺陷
4、代码实现
5、测试结果
题目二
设计测试用例
题目一示例代码(java编写)
总结
前言:
软件质量保证与测试技术是软件工程的重要组成部分,它涉及到软件开发过程中的各个阶段,从需求分析到维护和更新。软件测试是软件质量保证的主要手段之一,它通过执行软件系统或其组成部分,检查其是否满足预期的功能和性能要求,以及是否存在缺陷或错误。软件测试可以分为静态测试和动态测试,静态测试是在不运行软件的情况下对其进行分析和评估,动态测试是在运行软件的情况下对其进行观察和验证。
黑盒测试用例设计是黑盒测试的关键步骤,它是根据软件的需求规格或功能说明,确定需要对软件进行哪些输入和输出操作,以及期望得到什么样的结果。黑盒测试用例设计的目标是尽可能覆盖软件的所有功能和边界条件,同时避免重复和冗余。黑盒测试用例设计的方法有很多,例如等价类划分、边界值分析、因果图法、正交实验法等。本实验将介绍其中最常用的两种方法:等价类划分和边界值分析,并通过一个简单的示例来演示它们的应用。
一、黑盒测试
黑盒测试是一种动态测试方法,它只关注软件的输入和输出,而不考虑软件的内部结构和实现细节。黑盒测试的优点是可以从用户的角度检验软件的功能正确性和可用性,而不受开发者的偏见和限制。黑盒测试的缺点是无法发现软件内部的逻辑错误和设计缺陷,也无法评估软件的效率和可靠性。因此,黑盒测试通常需要与白盒测试(一种考虑软件内部结构和实现细节的动态测试方法)相结合,以提高软件测试的覆盖率和质量。
二、实验目的
学会用等价类划分法和边界值法设计测试用例,进行功能测试。
三、实验内容
题目1:NextDate程序的功能是按年、月、日的顺序输入一个日期,输出为输入日期后一天的日期。请使用等价类和边界值法对NextDate程序进行黑盒测试。(NextDate程序源代码见文档最后附录A)
题目2:根据163邮箱地址的构成规则,为163邮箱注册模块中输入域“邮箱地址”设计测试用例(假设没有重复的用户名),注册界面请登录网址:163网易免费邮-你的专业电子邮局查看
四、实验步骤
(1)设计等价类划分表,可以参照下表的格式
等价类划分表
输入条件 | 有效等价类 | 无效等价类 |
(2)利用等价类划分法和边界值分析法设计测试用例
测试用例
用例编号 | 测试数据 | 预期结果 | 覆盖等价类或边界值 |
(3)运行测试程序,记录和分析测试结果,将测试中发现的BUG记录在下表中。
缺陷报告单
缺陷编号 | 缺陷描述 | 用例编号 | 实际结果 |
(4)在程序中加必要注释说明:创建日期、创建者、函数功能
(5)实验报告中要有运行结果截图。
(6)认真撰写实验心得。
五、实验过程
题目一
1、等价类划分表
2、设计测试用例
3、缺陷
4、代码实现
示例代码是java代码,但在本文中,使用了C语言编写,示例代码会在文后给出
#include <stdio.h>
void NextDate(int year,int month,int day);
int main()//主函数
{
int year=0,month=0,day=0;
printf("请输入年份:\n");
scanf("%d",&year);
while(!(year>=1811 && year<=2013))
{
printf("年份超过界限,请重新输入\n");
scanf("%d",&year);
}
printf("请输入月份:\n");
scanf("%d",&month);
while (month>12||month<1)
{
printf("月份超过界限,请重新输入\n");
scanf("%d",&month);
}
printf("请输入日期:\n");
scanf("%d",&day);
while (day>31||day<1)
{
printf("日期输入有误,请重新输入\n");
scanf("%d",&day);
}
NextDate(year,month,day);
return 0;
}
void NextDate(int year,int month,int day)//计算日期
{
if((year%4==0 && year%100!=0) || (year%400==0)) /*检查闰年*/
{
int i=0;
i=day-29;
while(month==2&&i>0)
{
printf("本月是闰月,请在1-29之间从新输入日期\n");
scanf("%d",&day);
}
if(month==2&&day==29)
{
month=3;
day=1;
}
else day++;
}
else day++;
/*月底计算*/
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if (day==32)
{
month++;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 2:
if(day==28&&(year%4==0 && year%100!=0) || (year%400==0)){//计算闰年的2月
month=2;
day=29;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
if(day==29)//正常
{
month=3;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 4:
case 6:
case 9:
case 11:
if(day==31)
{
month++;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 12:
if(day==32)
{
year++;
month=1;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
}
printf("明天是:%d/%d/%d\n",year,month,day);
}
5、测试结果
题目二
设计测试用例
题目一示例代码(java编写)
void NextDate(int year,int month,int day);
void main()
{
int year=0,month=0,day=0;
NextDate(year,month,day);
}
void NextDate(int year,int month,int day)
{
printf("请输入年份:\n");
scanf(“%d”,&year);
while(!(year>=1811 && year<=2013))
{
printf("年份超过界限,请重新输入\n");
scanf(“%d”,&year);
}
printf("请输入月份:\n");
scanf(“%d”,&month);
while (month>12||month<1)
{
printf("月份超过界限,请重新输入\n");
scanf(“%d”,&month);
}
printf("请输入日期:\n");
scanf(“%d”,&day);
while (day>31||day<1)
{
printf("日期输入有误,请重新输入\n");
scanf(“%d”,&day);
}
if((year%4==0 && year%100!=0) || (year%400==0)) /*检查闰年*/
{
int i=0;
i=day-29;
while(month==2&&i>0)
{
printf("本月是闰月,请在1-29之间从新输入日期\n");
scanf(“%d”,&day);
}
if(month==2&&day==29)
{
month=3;
day=1;
}
else day++;
}
else day++;
/*月底计算*/;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if (day==32)
{
month++;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 2:
if(day==29)
{
month=3;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 4:
case 6:
case 9:
case 11:
if(day==31)
{
month++;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
case 12:
if(day==32)
{
year++;
month=1;
day=1;
printf("明天是:%d/%d/%d\n",year,month,day);
}
break;
}
printf("明天是:%d/%d/%d\n",year,month,day);
}
总结
这篇文章介绍了软件测试的概念和方法,其中黑盒测试是一种动态测试方法,它只关注软件的输入和输出,而不考虑软件的内部结构和实现细节。黑盒测试的优点是可以从用户的角度检验软件的功能正确性和可用性,而不受开发者的偏见和限制。黑盒测试的缺点是无法发现软件内部的逻辑错误和设计缺陷,也无法评估软件的效率和可靠性。因此,黑盒测试通常需要与白盒测试(一种考虑软件内部结构和实现细节的动态测试方法)相结合,以提高软件测试的覆盖率和质量。