实验一 实验报告

文章目录

实验一 实验报告小组成员实验目的实验内容程序的主要算法关键代码流程图输入检测计算结果

测试用例弱健壮等价类等价类划分弱一般等价类测试用例规则弱健壮等价类测试用例弱健壮等价类测试结果

边界值分析法边界值分析法测试用例边界值分析法测试结果

判定表测试方法判定桩划分判定表判定表测试方法测试用例判定表测试方法测试结果

对所测试组程序的评价

小组成员

小组成员结对测试组成员

实验目的

能熟练应用黑盒测试技术进行测试用例设计,能对测试用例进行优化设计。

实验内容

“隔一天问题”程序要求如下:输入为年、月、日三个变量,输出为输入的隔一天后的年、月、日。例如,输入为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;

}

流程图

输入检测

Created with Raphaël 2.3.0

checkNum

flag = 1

i

!48

flag=0

return flag

end

yes

no

yes

no

计算结果

测试用例

弱健壮等价类

等价类划分

输入年月日Y1:非数字M1:非数字D1:非数字Y2:整数 x<1922M2:负整数和零D2:负整数和零Y3:整数 x>2030M3:小数D3:小数Y5:小数M4:2D4:1~26Y6:闰年M5:12D5:27Y7:平年M6:month有31天,不包括12月(1 3 5 7 8 10)D6:28M7:month有30天(4 6 9 11)D7:29D8:30D9: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}}

弱健壮等价类测试用例

用例号yearmonthday预期输出WR12000-112Month取值无效WR220002.512Month取值无效WR32000@12Month取值无效WR420005012Month取值无效WR520006-1Day取值无效WR6200062.5Day取值无效WR720006@Day取值无效WR82000650Day取值无效WR92000230Day取值无效WR102001229Day取值无效WR112000431Day取值无效WR12-1612Year取值无效WR132.5612Year取值无效WR14@612Year取值无效WR155000612Year取值无效WR1620007292000-7-31WR1720007302000-8-1WR1820007312000-8-2WR1920006282000-6-30WR2020006292000-7-1WR2120006302000-7-2WR2220002272000-2-29WR2320002282000-3-1WR2420002292000-3-2WR2520012262001-2-28WR2620012272001-3-1WR2720012282001-3-2WR28200012292000-12-31WR29200012302001-1-1WR30200012312001-1-2

弱健壮等价类测试结果

边界值分析法

使用边界值分析法设计该问题的测试用例,并检验测试结果。此处采取五点取样法。在year、month、day的有效值范围两侧分别取样,其他两项取有效值进行测试。WN19为三项均取有效值,作为对照组。

边界值分析法测试用例

yearmonthday预期输出WN11921615Year取值无效WN219226151922-6-17WN319236151923-6-17WN420296152029-6-17WN520306152030-6-17WN62031615Year取值无效WN72000015Month取值无效WN820001152000-1-17WN920002152000-2-17WN10200011152000-11-17WN11200012152000-12-17WN1220001315Month取值无效WN13200070Day取值无效WN142000712000-7-3WN152000722000-7-4WN1620007302000-8-1WN1720007312000-8-2WN182000732Day取值无效WN1920006152000-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情况15c1:Month是否属于M1YYYNNNNNNNNNNNNc2:Month是否属于M2NNNYYYNNNNNNNNNc3:Month是否属于M3NNNNNNYYYYYYNNNc4:Month是否属于M4NNNNNNNNNNNNYYYc5:Year是否属于Y1------YYYNNN---c6:Year是否属于Y2------NNNYYY---c7:Day是否属于D1-NN----NNYNN-NNc8:Day是否属于D2-NN----NNNYN-NNc9:Day是否属于D3-NN---NYNNNY-NNc10:Day是否属于D4-NNNYNNNYNNN-NNc11:Day是否属于D5NYNNNYNNNNNNNYNc12:Day是否属于D6NNYNNNNNNNNNNNY动作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✓

判定表测试方法测试用例

情况123456789101112131415测试用例2000-7-102000-7-302000-7-312000-6-102000-6-292000-6-302000-2-102000-2-282000-2-292001-2-102001-2-272001-2-282000-12-102000-12-302000-12-31预期输出2000-7-122000-8-12000-8-22000-6-122000-7-12000-7-22000-2-122000-3-12000-3-22001-2-122001-3-12001-3-22000-12-122001-1-12001-1-2

判定表测试方法测试结果

对所测试组程序的评价

对于闰年2月1到27日,平年2月1到26日的数据,不能得到正确的预期输出。

对于无效和未预料的输入情况,不能给出清晰的提示信息,全部是相同的提示信息。

对于输出,有“输入的日期”此项不必要的输出。

输入数据时的提示很清晰。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: