南昌大学实验报告
学生姓名: 任 学 号: 011910300056 专业班级: 软件工程
实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 20##-4-20 实验成绩:
一、实验项目名称
软件工程白盒测试
二、实验目的
1、掌握白盒测试策略的选择方法
2、白盒测试用例的设计方法
3、自动白盒测试的方法及实施步骤
三、实验基本原理
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
四、主要仪器设备及耗材
测试平台:windows XP SP2
测试工具:白盒测试工具Dev c++
测试语言:C++
五、实验步骤
1.自动化测试方案
根据已经编写好的文件检索软件的测试计划、测试用例等编写自动化测试方案,
测试目标函数为MatchPattern;
2.自动化测试脚本
2.1测试驱动程序和用例的设计和实现
根据已有的函数编写测试程序,从而驱动被测试的函数。再通过画出程序的流程图设计插桩函数,分析路径覆盖情况,从而设计用例,尽量覆盖所有路径。
2.1.1测试用例谓词表
2.1.2测试用例路径覆盖表
2.2全部测试脚本
*源代码如下:
#include <cstdlib>
#include <iostream>
using namespace std;
#define MAXPATTERN 20
#define MAXFILELEN 128 //定义最长文件名
#define FALSE 0
#define TRUE 1
void printpre(char file[MAXFILELEN+1],char pattern[MAXPATTERN+1]);
void printaft(int a);
int FindSubString ( const char* source, const char* dest );
bool MatchPattern(char* file, char* pattern);
int main()
{
char file[MAXFILELEN+1]= {0};
char pattern[MAXPATTERN+1]= {0};
char* pfile;
char* ppattern;
int result = 0;
printpre(file,pattern);
pfile = &file[0];
ppattern = &pattern[0];
result = MatchPattern(pfile,ppattern);
printaft(result);
system("PAUSE");
return 0;
}
void printpre(char file[MAXFILELEN+1],char pattern[MAXPATTERN+1]){
cout<<"Please type in the file name :";
cin>>file;
//cout<<endl;
cout<<"Please type in the pattern :";
cin>>pattern;
cout<<"。。。测试进行中。。。"<<endl;
cout<<endl;
cout<<"----------------------自动测试分析如下----------------------" <<endl;
///*
cout<<"一、测试输入信息:"<<endl;
cout<<"File: "<<file<<" "<<endl;
cout<<"Pattern:"<<pattern<<endl;
cout<<endl;
cout<<"二、测试过程信息:"<<endl;
cout<<"被测试函数共有条17分支,分别是:"<<endl;
cout<<" ⑴S,1,E "<<endl;
cout<<"⑵S,2,4,6,7,E "<<endl;
cout<<"⑶S,2,4,6,8,10,E "<<endl;
cout<<"⑷S,2,4,6,8,9,11,10,E "<<endl;
cout<<"⑸S,2,4,6,8,9,12,E "<<endl;
cout<<"⑹S,2,3,4,6,7,E "<<endl;
cout<<"⑺S,2,3,4,6,8,10,E "<<endl;
cout<<"⑻S,2,3,4,6,8,9,11,10,E "<<endl;
cout<<"⑼S,2,3,4,6,8,9,12,E "<<endl;
cout<<"⑽S,2,4,5,6,7,E "<<endl;
cout<<"⑾S,2,4,5,6,8,10,E "<<endl;
cout<<"⑿S,2,4,5,6,8,9,11,10,E "<<endl;
cout<<"⒀S,2,4,5,6,8,9,12,E "<<endl;
cout<<"⒁S,2,3,4,5,6,7,E "<<endl;
cout<<"⒂S,2,3,4,5,6,8,10,E "<<endl;
cout<<"⒃S,2,3,4,5,6,8,9,11,10,E "<<endl;
cout<<"⒄S,2,3,4,5,6,8,9,12,E "<<endl;
cout<<endl;
cout<<"本测试数据经过分支: ";
//*/
}
void printaft(int match){
cout<<endl;
cout<<endl;
cout<<"三、测试输出信息:"<<endl;
if(match == 1){
cout<<"Succeed in Pattern-Match !"<<endl;
}
else{
cout<<"Failure in Pattern-Match !"<<endl;
}
}
int FindSubString ( const char* source, const char* dest )
{
char l_Source[MAXFILELEN+1];
char l_Dest[MAXFILELEN+1];
int i=0 , j=0;
if( (source == NULL) || (dest == NULL) )
{
return -1;
}
strcpy(l_Source, source);
_strupr(l_Source);
strcpy(l_Dest, dest);
_strupr(l_Dest);
while( l_Source[i] != '\0')
{
j = 0;
while((l_Dest[j] != '\0') && (l_Source[i + j] != '\0')
&& ((l_Dest[j] == '?') || (l_Dest[j] == l_Source[i + j])))
{
j++;
}
if( l_Dest[j] == '\0' )
{
break ;
}
else
{
i++;
}
}
if( l_Source[i] != '\0' )
{
/*
cout<<endl;
cout<<"i="<<i<<endl;
*/
return i;
}
else
{
return -1;
}
}
bool MatchPattern(char* file, char* pattern)
{
char l_Pat[MAXPATTERN+1][MAXFILELEN+1];
int i,j,k;
char* l_Ptr;
cout<<"S,";
memset(l_Pat, 0, MAXPATTERN*(MAXFILELEN+1));
i = j = k = 0;
l_Ptr = NULL;
//cout<<"pass1"<<endl;
if((file == NULL) || (pattern == NULL))
{
cout<<"1,";
//ASSERT(FALSE);//该段代码不应该被执行到 如果不能编译可以注释掉
return FALSE;
}
//cout<<"pass2"<<endl;
cout<<"2,";
while(pattern[i] != '\0')
{
//cout<<"pass3"<<endl;
if(i == 0){
cout<<"3,";
}
if( pattern[i] == '*' )
{
if( k != 0)
{
k = 0;
if( j >= (MAXPATTERN - 1) )
{
return FALSE;
}
else
{
j++;
}
}
}
else
{
l_Pat[j][k++] = pattern[i];
}
i++;
}
cout<<"4,";
i = 0;
l_Ptr = file;
//cout<<"pass4"<<endl;
while(l_Pat[i][0] != '\0')
{
if(i == 0){
cout<<"5,";
}
j = FindSubString(l_Ptr, l_Pat[i]);
/*
cout<<endl;
cout<<"j="<<j<<endl;
*/
if((j == -1) || ((i == 0) && (pattern[0] != '*') && (j != 0)))
{
break;
}
else
{
l_Ptr = l_Ptr + j + strlen(l_Pat[i]);
i++;
/*
cout<<endl;
cout<<"i="<<i<<endl;
*/
}
}
/*
cout<<endl;
cout<<"i="<<i<<endl;
*/
cout<<"6,";
//cout<<"pass5"<<endl;
if(l_Pat[i][0] != '\0')
{
cout<<"7,E";
return FALSE;
}
else
{
if(pattern[strlen(pattern) - 1] != '*')
{
cout<<"8,";
while(strlen(l_Ptr) != 0)
{
cout<<"9,";
j = FindSubString(l_Ptr, l_Pat[i-1]);
if( j == -1 )
{
cout<<"12,E";
return FALSE;
}
cout<<"11,";
l_Ptr = l_Ptr + j + strlen(l_Pat[i-1]);
}
}
cout<<"10,E";
return TRUE;
}
}
六、实验数据及处理结果
通过路径覆盖测试,得到结果为覆盖6/17,覆盖率为35.3%,覆盖经过的路径都满足输入输出的需求分析,能够较好的完成函数的功能。没有发现问题。17条路径中有11条是不合逻辑路径,无法通过改变输入变量覆盖路径,从而需要利用语句覆盖测试辅助测试,利用语句覆盖测试,得到结果为205/236,覆盖率为86.86%,基本达到标准,并且与路径覆盖测试结合后,能够检测路径覆盖测试不能达到的路径,使得测试更加完整。
自动化测试生成结果和报告
测试用例1:
测试用例2:
七、思考讨论题或体会或对改进实验的建议
通过本次试验,我了解到了一个软件测试的基本过程,并且将我学习到的知识具体化,用作我编程的工具之中,也通过这样方法论的东西提升了我对软件的认识和对整个软件工程体系的了解。与此同时,也对软件测试这堂课更加萌发了极度的热情。各种不同编程语言对计算机环境的要求以及对软件部署过程的测试必要性方面,通过此次实验的编程和测试,使我更加了解到多语言的掌握对于现今软件工程师的重要性,各个编程语言对计算机的要求不同,有的语言需要特殊的编程工具,有的则需要更好的虚拟平台。而从中我也懂得软件部署过程的测试也是十分必要的。
八、参考资料
1、《软件工程》 钟珞编著 清华大学出版社
2、《软件工程概论》 郑人杰编著 清华大学出版社
3、《实用软件工程》 郑人杰等编著 清华大学出版社
4、《软件测试技术》 李庆义、王爱乐等编著 中国铁道出版社
怀化学院计算机系
《软件工程》实验报告书
Visio 的安装与使用
学生姓名:
学 号:
年级专业及班级: 09级计算机1班
指导教师: ## 讲师
湖南·怀化
提交日期:20##-4-11
实验一:Visio 的安装与使用
一、实验目的:
了解Visio工具软件的特色、安装及工作环境;掌握利用Visio绘制系统流程图、数据流图、软件结构图的方法。
二、实验环境:
①Microsoft Visio professional 2003软件
②能够安装Visio 2003软件的计算机
三、实验任务:
①熟悉Visio 2003的工作窗口
②利用Visio 2003绘制系统流程图
③利用Visio 2003绘制数据流图
④利用Visio 2003绘制软件结构图
四、实验结果:将所画图形粘贴
1、库存清单系统流程图
2、库存数据流图
3、软件结构图
五、分析与讨论(不得少于500字)
①对于在Visio 2003的模具中没有但又需要经常使用的图形,试分析和讨论如何处理。
②除了上述提到的系统流程图、数据流图和软件结构图之外,请讨论使用Visio 2003还可以绘制那些图形。
①在Visio 2003的模具中没有但又需要经常使用的图形,我们一般采用的是自定义模具。具体的做法是单击菜单栏中【文件】选择菜单【形状】中的【新建模具】,然后利用相应的工具制作模具,制作好后,选中自定义的图形,并将之拖到左边区域,保存即可,制作其他图要用到该模具是,可直接将该模具拖入编辑区域。
②Visio 2003不光可以绘制上面提到的系统流程图、数据流图和软件结构图之外,还可以绘制很多类型的图形。如:Web图表(网站图、网站总体设计)、地图(方向图、三位方向图)、电气工程(电路和逻辑电路、工业控制系统、基本电气、系统)、工艺工程(工艺流程图、管道和仪表设备图)、机械工程(部件和组件绘图、流体动力)、建筑设计图(HVAC规划、HVAC控制逻辑图、安全和门禁平面图、办公室布局、电气和电信规划、工厂布局、管线和管道平面图、家居规划、空间规划、平面布置图、天花板反向图、现场平面图)、框图(基本框图、具有透视效果的框图、框图)、灵感触发(灵感触发图)、流程图(IDEFO图表、SDL图、基本流程图、跨职能流程图、数据流图表)、软件(COM和OLE、Jachson、ROOM、UML模型图、程序结构、企业应用、数据流模型图)、数据库(Express-G、ORM图表、数据库模型图)、图表和图形(图表和图形、营销图表)、网络(Active Directory 、LDAP目录、Novell Directory Service、机架图、基本网络图、详细网络图)、项目日程(PERT图表、甘特图、日历、时间线)、业务进程(EPC图表、TQM图,工作流程图、故障树分析图、基本流程图、跨职能流程图、审计图、数据流图表、因果图)、组织结构图。
实验报告课程名称:软件工程实验项目:实验二面向对象分析及面向对象设计实验仪器:个人电脑系别:计算机科学与技术系专业:计算机科学与技…
重庆邮电大学软件工程课程设计实验报告网上选课系统姓名雷雷学号专业计算机科学与技术班级0410801指导老师邹洋教室S331A时间一…
大学图书馆图书信息管理系统实验报告学校宁波广播电视大学班级10春计算机科学与技术姓名学号一编写目的根据需求调研分析报告定义系统功能…
实验一一实验室名称综合实验楼二试验项目名称图书管理系统三实验目的1了解和使用甘特图系统流程图线性时间图来描绘系统开发流程和进度2学…
软件工程实验报告实验题目:实验室设备管理系统1、系统简介:每天对实验室设备使用情况进行统计,对于已彻底损坏的作报废处理,同时详细记…
软件工程概论实习报告项目名称图书馆管理系统学生姓名关山指导老师张剑波班级11110207学号20xx1001293成绩中国地质大学…
软件工程概论实习报告项目名称火车退票系统姓名王加林班级学号11110127指导老师张剑波中国地质大学信息工程学院软件工程系20xx…
学生姓名谢某某学号0149001506109专业班级软件工程20xx实践类型验证综合设计创新实践日期20xx1130实践成绩以下主…
软件工程概论实习报告项目名称学生选课系统姓名孔令洲班级学号11610211成绩中国地质大学信息工程学院信息工程系20xx年4月28…
软件工程概论实习报告项目名称姓名班级学号成绩中国地质大学信息工程学院软件工程系20xx年4月目录1系统概述111系统背景112系统…