软件黑盒测试PreDate报告 - 图文

更新时间:2024-04-14 07:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实 验 报 告

课 程 专业年级 指导教师 软件测试 实验项目 姓 名 实验时间 黒盒测试用例设计与执行 学 号 实验成绩 一、实验目的

1.掌握如何运用边界值、等价类和决策表等黒盒测试方法进行测试用例设计。

2.初步熟悉轻量级自动化测试中测试驱动的编写与执行。

二、实验内容

1、题目

前一日函数PreDate是NextDate的逆函数(代码实现见下),实现功能为:函数接受一个MyDate类型的输入变量后通过计算返回该输入日期的前一日期值(如输入1999-3-6,则返回1999-3-5)。有效处理范围为1800 年到2050 年之间的某个日期,当输入无效时返回日期值为:年为0,月、日与输入值相同(例如输入1990-2-31,则返回0-2-31)。

请分别用边界值方法、等价类划分方法、决策表方法对前一日函数进行测试用例设计,并根据设计的用例集执行测试,对测试结果进行总结分析。

被测代码:(Leapyear函数比较简单,此处不做测试,直接作为PreDate的下级调用函数。以下代码粘贴到VC环境后与测试驱动程序结合即可执行测试。) #include\

typedef struct MyDate{ int month; int day; int year; }MyDate;

MyDate PreDate(MyDate date); int Leapyear(int year);

MyDate PreDate(MyDate date) {

MyDate yesterday;

yesterday.month = date.month; // initialization yesterday.day = date.day; yesterday.year = date.year;

//-------------验证输入日期的有效性------------- int v=1; //v==0表示无效,v==1表示有效

if(date.year<1800 || date.month<0 || date.day<0 || date.day>31 || date.month>12 || date.year>2050)

v=0;

//---------------计算输入日期的前一日期------------- if(v==1) {

if(date.day>1) yesterday.day=date.day-1; else {

switch(date.month) { case 1: case 2: case 4: case 6: case 8: case 9: case 11: {

yesterday.month=date.month-1; yesterday.day=31;

break; } case 3: {

}

if(Leapyear(date.year)) { }

yesterday.month=2; yesterday.day=29;

else {

yesterday.month=2; yesterday.day=28;

}

break;

case 5: case 7: case 10: case 12:

{

yesterday.month=date.month-1; yesterday.day=30;

}

}

}

}

}

break;

else yesterday.year=0; return yesterday;

int Leapyear(int year) { }

2、测试用例设计 1)边界值 A 边界值分析: C1 1<=month<=12 C2 1<=day<=31 C3 1800<=year<=2050 B 边界值测试用例

输入数据 ID 月 Test1 Test2 Test3 Test4 Test5 Test6 Test7 Test8 Test9 Test10 Test11 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 -1 1 2 30 日 年 1799 1800 1801 2012 2049 2050 2051 2012 2012 2012 2012 0年6月14日 1800.6.14 1801.6.14 2012.6.14 2049.6.14 2050.6.14 0年6月14日 0年6月-1日 2012.5.31 2012.6.1 2012.6.29 0年6月15日 1800.6.14 1801.6.14 2012.6.14 2049.6.14 2050.6.14 0年6月14日 0年6月-1日 2012.5.31 2012.6.1 2012.6.29 预期结果 执行结果 if((year%4==0&&year0!=0) || (year@0==0)) return 1; else return 0;

Test12 Test13 Test14 Test15 Test16 Test17 Test18 Test19 2等价类

6 6 -1 1 2 11 12 13 31 32 15 15 15 15 15 15 2012 2012 2012 2012 2012 2012 2012 2012 2012.6.30 0年6月32日 0年-1月14日 2012年1月14日 2012年2月14日 2012年11月14日 2012年12月14日 0年13月14日 2012.6.302012 0年6月32日 0年-1月14日 2012年1月14日 2012年2月14日 2012年11月14 2012年12月14 0年13月14日 A 等价类划分 M1={月份:每月30天}

M2={月份:每月31天(除三月外)} M3={月份:此月是1月} M4={月份:此月是2月} M5={月份:此月是3月} M6={月份:此月是8月}

D0={日期:day=1} D1={日期:2<=day<=28} D2={日期:day=29} D3={日期:day=30} D4={日期:day=31}

Y1={年:year=闰年} Y2={年:year=平年} B 等价类测试用例 ID

1 1996 1 1 1995 12 31 2 2002 1 1 2002 12 31 3 1996 1 16 1996 1 15 4 2002 1 16 2002 1 15

5 1996 1 29 1996 1 28 6 2002 1 29 2002 1 28 7 1996 1 30 1996 1 29 8 2002 1 30 2002 1 29 9 1996 1 31 1996 1 30 10 2002 1 31 2002 1 30 11 1996 2 1 1996 1 31 12 2002 2 1 2002 1 31 13 1996 2 16 1996 2 15 14 2002 2 16 2002 2 15 15 1996 2 29 1996 2 28 16 2002 2 29 0 2 28 17 1996 2 30 0 2 29 18 2002 2 30 0 2 29 19 1996 2 31 0 2 30 20 2002 2 31 0 2 30 21 1996 3 1 1996 2 29 22 2002 3 1 2002 2 28 23 1996 3 16 1996 3 15 24 2002 3 16 2002 3 15 25 1996 3 29 1996 3 28 26 2002 3 29 2002 3 28 27 1996 3 30 1996 3 29 28 2002 3 30 2002 3 29 29 1996 3 31 1996 3 30 30 2002 3 31 2002 3 30 31 1996 6 1 1996 5 31 32 2002 6 1 2002 5 31 33 1996 6 16 1996 6 15 34 2002 6 16 2002 6 15 35 1996 6 29 1996 6 28

36 2002 6 29 2002 6 28 37 1996 6 30 1996 6 29 38 2002 6 30 2002 6 29 39 1996 6 31 0 6 30 40 2002 6 31 0 6 30 41 1996 7 1 1996 6 30 42 2002 7 1 2002 6 30 43 1996 7 16 1996 7 15 44 2002 7 16 2002 7 15 45 1996 7 29 1996 7 28 46 2002 7 29 2002 7 28 47 1996 7 30 1996 7 29 48 2002 7 30 2002 7 29 49 1996 7 31 1996 7 30 50 2002 7 31 2002 7 30 51 1996 8 1 1996 7 31 52 2002 8 1 2002 7 31 53 1996 8 16 1996 8 15 54 2002 8 16 2002 8 15 55 1996 8 29 1996 8 28 56 2002 8 29 2002 8 28 57 1996 8 30 1996 8 29 58 2002 8 30 2002 8 29 59 1996 8 31 1996 8 30 60 2002 8 31 2002 8 30

3)决策表 简化后的决策表

1 2-4 5 6 7-10 11 12-15 16 C1:M C2:D C3:Y 不可能 D减1 D复31 D复30 D复29 D复28 M减1 M复12 Y减1 C1:M C2:D C3:Y 不可能 D减1 D复31 D复30 D复29 D复28 M减1 M复12 Y减1

M1 D1 -- √ M1 D2-D4 -- √ M1 D5 -- √ M2 D1 -- √ M2 D2-D5 -- √ M3 D1 -- √ √ √ M3 D2-D5 -- √ M4 D1 -- √ 17 M4 D2 -- √ 18 19 M4 M4 D3 D3 Y1 Y2 √ 20-21 22 M4 M5 23 M5 D1 Y2 √ 24-27 M5 D2-D5 -- √ 28 M6 D1 -- √ 29-32 M6 D2-D5 -- √ D4-D5 D1 -- √ Y1 √ √ 3、执行测试

1)测试驱动程序代码:

void DriverpredateRevenueAccount() { //--------1. 设置局部变量----------- int tcPassNum = 0;

int tcFailNum = 0; // 存储通过和失败的测试用例总数

FILE* pFpFrom = NULL; // 数据文件的指针,存储测试用例的基本信息 FILE* pFpTo = NULL; // 记录测试用例执行结果的文件的指针 //--------2. 打开数据文件,准备读取测试用例的数据----------- char* DataFileName = \ pFpFrom = fopen( DataFileName, \ if( !pFpFrom )

{

printf( \读取数据失败,返回\\n\ return;

}

// 打开数据文件,准备记录测试用例执行结果 char* DataFileTestResultName = \ pFpTo = fopen( DataFileTestResultName, \ if( !pFpTo )

{

printf( \打开文件失败,返回\\n\ return;

}

fprintf( pFpTo, \对函数predateRevenueAccount的单元测试结果-------------\\n\

//-----------3. 执行测试用例,记录测试结果----------- int TCID = 0;

MyDate originalAmount; // 测试用例的输入 MyDate expectedOutcome; // 测试用例的预期输出 MyDate actualOutcome; // 测试用例的实际输出

printf( \对函数predateRevenueAccount展开单元测试\\n\ while( !feof(pFpFrom) ){// 不断读取每个测试用例的数据 fscanf( pFpFrom, \读入测试用例的ID

fscanf( pFpFrom, \

fscanf( pFpFrom, \读入测试用例的输入 fscanf( pFpFrom, \

fscanf( pFpFrom, \读入测试用例的预期输出 fscanf( pFpFrom, \ fscanf( pFpFrom, \

actualOutcome = PreDate( originalAmount );// 执行测试用例 // 输出测试用例的信息

printf( \测试用例%d: 输入%d年%d月%d日, 预期输出%d年%d月%d日,实际输出%d年%d月%d日, \ expectedOutcome.year,expectedOutcome.month ,expectedOutcome.day, actualOutcome.year, actualOutcome.month,actualOutcome.day);

if( actualOutcome.year==expectedOutcome.year&&actualOutcome.month==expectedOutcome.month&&actualOutcome.day==expectedOutcome.day) {// 若测试用例通过,则记录通过的用例总数 tcPassNum ++; printf( \通过\\n\

fprintf( pFpTo, \测试用例%d: Pass\\n\将测试用例的执行结果存入结果文件 } else {

tcFailNum ++; printf( \失败\\n\

fprintf( pFpTo, \测试用例%d: Fail\\n\将测试用例的执行结果存入结果文件 } }

fclose( pFpFrom );// 关闭测试用例数据文件 //-----------4. 统计测试结果-----------

printf( \共执行%d 个测试用例,其中%d 个通过,%d 个失败\\n\tcPassNum, tcFailNum );

fprintf( pFpTo, \共执行%d 个测试用例,其中%d 个通过,%d 个失败\\n\tcPassNum+tcFailNum, tcPassNum, tcFailNum ); fclose( pFpTo );// 关闭结果记录文件 }

void main() {

DriverpredateRevenueAccount(); }

2)测试执行结果与分析 1边界值测试

分析:

共执行19 个测试用例,其中18 个通过,1 个失败 2等价类测试 分析:

共执行19 个测试用例,其中18 个通过,1 个失败。 决策表:

分析:

共执行17 个测试用例,其中13 个通过,4 个失败

三、实验小结

本文来源:https://www.bwwdw.com/article/finp.html

Top