实验一 实验报告
小组成员
小组成员 | 结对测试组成员 |
---|---|
实验目的
能熟练应用黑盒测试技术进行测试用例设计,能对测试用例进行优化设计。
实验内容
“隔一天问题”程序要求如下:输入为年、月、日三个变量,输出为输入的隔一天后的年、月、日。例如,输入为2001年2月10日,则输出为2001年2月12日;输入为2000年2月29日,则输出为2000年3月2日等。输入年份要求在1922-2030之间。
程序的主要算法
关键代码
//将string转为char数组并判断输入是否为正整数
int checkNum(string s) {
int flag = 1;
for (int i = 0; i < s.length(); i++) {
if ((int)s[i] < 48 || (int)s[i] > 57) {
flag = 0;
break;
}
}
return flag;
}
//获取用户输入
string n0;
int year = 0, month = 0, day = 0, isLeap = 0;
cout << "请输入年月日" << endl;
cout << "年:";
//判断输入的n0是否符合要求
while (year < 1922 || year > 2030) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Year取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
cin >> n0;
}
year = s2i(n0);//string转为int存储
if (year < 1922 || year > 2030) {
cout << "Year取值无效\n请输入1922到2030之间的数字:";
}
}
year = s2i(n0);//string转为int存储
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) isLeap = 1;
cout << "月:";
while (month < 1 || month>12) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Month取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
cin >> n0;
}
month = s2i(n0);//string转为int存储
if (month < 1 || month>12) {
cout << "Month取值无效\n请输入1到12之间的数字:" ;
}
}
cout << "日:";
if (month == 1 || month == 3 || month == 7 || month == 8 || month == 10 || month == 12) {//大月
while (day < 1 || day > 31) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
cin >> n0;
}
day = s2i(n0);//string转为int存储
if (day < 1 || day > 31) {
cout << "Day取值无效\n请输入1到31之间的整数:";
}
}
}
else if (month == 4 || month == 5 || month == 6 || month == 9 || month == 11) {//小月
while (day < 1 || day > 30) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
cin >> n0;
}
day = s2i(n0);//string转为int存储
if (day < 1 || day > 30) {
cout << "Day取值无效\n请输入1到30之间的整数:" << endl;
}
}
}
else if (month == 2 && isLeap) {//闰年2月
while (day < 1 || day > 29) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
cin >> n0;
}
day = s2i(n0);//string转为int存储
if (day < 1 || day > 29) {
cout << "Day取值无效\n请输入1到29之间的整数:";
}
}
}
else {//平年二月
while (day < 1 || day > 28) {
cin >> n0;
//判断输入的n0是否符合要求
while (!checkNum(n0)) {
cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
cin >> n0;
}
day = s2i(n0);//string转为int存储
if (day < 1 || day > 28) {
cout << "Day取值无效\n请输入1到28之间的整数:";
}
}
}
//根据合理范围的年月日得到输出
void Solution(int year, int month, int day, int isLeap) {
int nYear = 0, nMonth = 0, nDay = 0;
if (month == 1 || month == 3 || month == 5 || month == 8 || month == 10) {//大月
nYear = year;
if (day == 30 || day == 31) {
nMonth = month + 1;
if (day == 30) nDay = 1;
else nDay = 2;
}
else {
nMonth = month;
nDay = day + 2;
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11) {//小月
nYear = year;
if (day == 29 || day == 30) {
nMonth = month + 1;
if (day == 29) nDay = 1;
else nDay = 2;
}
else {
nMonth = month;
nDay = day + 2;
}
}
else if (month == 2 && isLeap) {//闰年2月
nYear = year;
if (day == 28 || day == 29) {
nMonth = month + 1;
if (day == 28) nDay = 1;
else nDay = 2;
}
else {
nMonth = month;
nDay = day + 2;
}
}
else if (month == 2 && !isLeap) {//平年2月
nYear = year;
if (day == 27 || day == 28) {
nMonth = month + 1;
if (day == 27) nDay = 1;
else nDay = 2;
}
else {
nMonth = month;
nDay = day + 2;
}
}
else {//12月
if (day == 30 || day == 31) {
nYear = year + 1;
nMonth = 1;
if (day == 30) nDay = 1;
else nDay = 2;
}
else {
nYear = year;
nMonth = month;
nDay = day + 2;
}
}
cout << "隔一天的年月日为:" << nYear << "-" << nMonth << "-" << nDay << endl;
}
流程图
输入检测
计算结果
测试用例
弱健壮等价类
等价类划分
输入 | 年 | 月 | 日 |
---|---|---|---|
Y1:非数字 | M1:非数字 | D1:非数字 | |
Y2:整数 x<1922 | M2:负整数和零 | D2:负整数和零 | |
Y3:整数 x>2030 | M3:小数 | D3:小数 | |
Y5:小数 | M4:2 | D4:1~26 | |
Y6:闰年 | M5:12 | D5:27 | |
Y7:平年 | M6:month有31天,不包括12月(1 3 5 7 8 10) | D6:28 | |
M7:month有30天(4 6 9 11) | D7:29 | ||
D8:30 | |||
D9:31 |
弱一般等价类测试用例规则
WR16 = {M6, {D4, D5, D6, D7}, {Y6, Y7}}
WR17 = {M6, D8, {Y6, Y7}}
WR18 = {M6, D9, {Y6, Y7}}
WR19 = {M7, {D4, D5, D6}, {Y6, Y7}}
WR20 = {M7, {D7}, {Y6, Y7}}
WR21 = {M7, {D8}, {Y6, Y7}}
WR22 = {M4, {D4, D5}, {Y6}}
WR23 = {M4, {D6}, {Y6}}
WR24 = {M4, {D7}, {Y6}}
WR25 = {M4, {D4}, {Y7}}
WR26 = {M4, {D5}, {Y7}}
WR27 = {M4, {D6}, {Y7}}
WR28 = {M5, {D4, D5, D6, D7}, {Y6, Y7}}
WR29 = {M5, {D8}, {Y6, Y7}}
WR30 = {M5, {D9}, {Y6, Y7}}
弱健壮等价类测试用例
用例号 | year | month | day | 预期输出 |
---|---|---|---|---|
WR1 | 2000 | -1 | 12 | Month取值无效 |
WR2 | 2000 | 2.5 | 12 | Month取值无效 |
WR3 | 2000 | @ | 12 | Month取值无效 |
WR4 | 2000 | 50 | 12 | Month取值无效 |
WR5 | 2000 | 6 | -1 | Day取值无效 |
WR6 | 2000 | 6 | 2.5 | Day取值无效 |
WR7 | 2000 | 6 | @ | Day取值无效 |
WR8 | 2000 | 6 | 50 | Day取值无效 |
WR9 | 2000 | 2 | 30 | Day取值无效 |
WR10 | 2001 | 2 | 29 | Day取值无效 |
WR11 | 2000 | 4 | 31 | Day取值无效 |
WR12 | -1 | 6 | 12 | Year取值无效 |
WR13 | 2.5 | 6 | 12 | Year取值无效 |
WR14 | @ | 6 | 12 | Year取值无效 |
WR15 | 5000 | 6 | 12 | Year取值无效 |
WR16 | 2000 | 7 | 29 | 2000-7-31 |
WR17 | 2000 | 7 | 30 | 2000-8-1 |
WR18 | 2000 | 7 | 31 | 2000-8-2 |
WR19 | 2000 | 6 | 28 | 2000-6-30 |
WR20 | 2000 | 6 | 29 | 2000-7-1 |
WR21 | 2000 | 6 | 30 | 2000-7-2 |
WR22 | 2000 | 2 | 27 | 2000-2-29 |
WR23 | 2000 | 2 | 28 | 2000-3-1 |
WR24 | 2000 | 2 | 29 | 2000-3-2 |
WR25 | 2001 | 2 | 26 | 2001-2-28 |
WR26 | 2001 | 2 | 27 | 2001-3-1 |
WR27 | 2001 | 2 | 28 | 2001-3-2 |
WR28 | 2000 | 12 | 29 | 2000-12-31 |
WR29 | 2000 | 12 | 30 | 2001-1-1 |
WR30 | 2000 | 12 | 31 | 2001-1-2 |
弱健壮等价类测试结果
边界值分析法
使用边界值分析法设计该问题的测试用例,并检验测试结果。此处采取五点取样法。在year、month、day的有效值范围两侧分别取样,其他两项取有效值进行测试。WN19为三项均取有效值,作为对照组。
边界值分析法测试用例
year | month | day | 预期输出 | |
---|---|---|---|---|
WN1 | 1921 | 6 | 15 | Year取值无效 |
WN2 | 1922 | 6 | 15 | 1922-6-17 |
WN3 | 1923 | 6 | 15 | 1923-6-17 |
WN4 | 2029 | 6 | 15 | 2029-6-17 |
WN5 | 2030 | 6 | 15 | 2030-6-17 |
WN6 | 2031 | 6 | 15 | Year取值无效 |
WN7 | 2000 | 0 | 15 | Month取值无效 |
WN8 | 2000 | 1 | 15 | 2000-1-17 |
WN9 | 2000 | 2 | 15 | 2000-2-17 |
WN10 | 2000 | 11 | 15 | 2000-11-17 |
WN11 | 2000 | 12 | 15 | 2000-12-17 |
WN12 | 2000 | 13 | 15 | Month取值无效 |
WN13 | 2000 | 7 | 0 | Day取值无效 |
WN14 | 2000 | 7 | 1 | 2000-7-3 |
WN15 | 2000 | 7 | 2 | 2000-7-4 |
WN16 | 2000 | 7 | 30 | 2000-8-1 |
WN17 | 2000 | 7 | 31 | 2000-8-2 |
WN18 | 2000 | 7 | 32 | Day取值无效 |
WN19 | 2000 | 6 | 15 | 2000-6-17 |
边界值分析法测试结果
判定表测试方法
判定桩划分
M1 = {1,3,5,7,8,10} M2 = {4,6,9,11} M3 = {2} M4 = {12}
Y1 = {1922到2030间的所有闰年} Y2 = {1922到2030间的所有平年}
D1 = {1,2,…,26} D2 = {27} D3 = {28} D4 = {29} D5 = {30} D6 = {31}
判定表
条件 | 情况1 | 情况2 | 情况3 | 情况4 | 情况5 | 情况6 | 情况7 | 情况8 | 情况9 | 情况10 | 情况11 | 情况12 | 情况13 | 情况14 | 情况15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c1:Month是否属于M1 | Y | Y | Y | N | N | N | N | N | N | N | N | N | N | N | N |
c2:Month是否属于M2 | N | N | N | Y | Y | Y | N | N | N | N | N | N | N | N | N |
c3:Month是否属于M3 | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y | N | N | N |
c4:Month是否属于M4 | N | N | N | N | N | N | N | N | N | N | N | N | Y | Y | Y |
c5:Year是否属于Y1 | - | - | - | - | - | - | Y | Y | Y | N | N | N | - | - | - |
c6:Year是否属于Y2 | - | - | - | - | - | - | N | N | N | Y | Y | Y | - | - | - |
c7:Day是否属于D1 | - | N | N | - | - | - | - | N | N | Y | N | N | - | N | N |
c8:Day是否属于D2 | - | N | N | - | - | - | - | N | N | N | Y | N | - | N | N |
c9:Day是否属于D3 | - | N | N | - | - | - | N | Y | N | N | N | Y | - | N | N |
c10:Day是否属于D4 | - | N | N | N | Y | N | N | N | Y | N | N | N | - | N | N |
c11:Day是否属于D5 | N | Y | N | N | N | Y | N | N | N | N | N | N | N | Y | N |
c12:Day是否属于D6 | N | N | Y | N | N | N | N | N | N | N | N | N | N | N | Y |
动作 | |||||||||||||||
a1:Year不变 Month不变 Day+2 | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
a2:Year不变 Month+1 Day=1 | ✓ | ✓ | ✓ | ✓ | |||||||||||
a3:Year不变 Month+1 Day=2 | ✓ | ✓ | ✓ | ✓ | |||||||||||
a4:Year+1 Month=1 Day=1 | ✓ | ||||||||||||||
a5:Year+1 Month=1 Day=2 | ✓ |
判定表测试方法测试用例
情况 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
测试用例 | 2000-7-10 | 2000-7-30 | 2000-7-31 | 2000-6-10 | 2000-6-29 | 2000-6-30 | 2000-2-10 | 2000-2-28 | 2000-2-29 | 2001-2-10 | 2001-2-27 | 2001-2-28 | 2000-12-10 | 2000-12-30 | 2000-12-31 |
预期输出 | 2000-7-12 | 2000-8-1 | 2000-8-2 | 2000-6-12 | 2000-7-1 | 2000-7-2 | 2000-2-12 | 2000-3-1 | 2000-3-2 | 2001-2-12 | 2001-3-1 | 2001-3-2 | 2000-12-12 | 2001-1-1 | 2001-1-2 |
判定表测试方法测试结果
对所测试组程序的评价
对于闰年2月1到27日,平年2月1到26日的数据,不能得到正确的预期输出。
对于无效和未预料的输入情况,不能给出清晰的提示信息,全部是相同的提示信息。
对于输出,有“输入的日期”此项不必要的输出。文章来源:https://www.toymoban.com/news/detail-433160.html
输入数据时的提示很清晰。文章来源地址https://www.toymoban.com/news/detail-433160.html
到了这里,关于软件测试技术 实验一:黑盒测试1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!