2021年黑盒测试实验报告[共25页]
软件测试技术实验报告——黑盒测试

软件测试技术实验报告实验名称:____黑盒测试实验_____实验内容1.使用WebScarab对JForum的登录模块进行测试2.使用Selenium IDE对JForum的用户注册模块进行测试3.通过Java编程对JForum的登录模块进行测试过程记录(问题及解决方法)一.使用WebScarab对JForum的登录模块进行测试1.安装webscarab,以管理员身份运行cmdjava -jar webscarab-installer-20070504-1631.jar2.WebScarab有两种运行模式Lite和Full。
本实验中需要使用Full模式运行。
从”Tool”中可以对模式进行切换,切换后需要重启程序;3.需要修改IE设置将代理指向为地址:localhost端口:80084.选择Proxy->Manual Edit,选中Intercept requests前的复选框,保持GET和POST方法被选中。
这样,可以拦截所有浏览器发往外部的请求,除了所有图片和ping_session的请求。
5.启动论坛系统,在IE地址栏输入本机的IP地址,本机IP为10.254.73.906.对网页的请求会被WebScrab拦截7.单击“会员注册”按钮,IE浏览器发往服务器的请求将被拦截8.单击Accept changes按钮,直到进入注册页面9.填写注册信息会员:wwk,电子邮件:wwk@登录密码:12310.定位到forum.page的请求,其编号为7011.双击forum.page请求,打开70号会话12.右键单击70号会话,选择Use as fuzz template13.选择Fuzzer选项卡,查看模板信息14.用记事本生userinfo.txt和usermail.txt15.导入userinfo.txt中记录的用户信息16.导入usermail.txt中记录的邮件信息17.依次为表单项中的元素进行参数化,即导入测试数据点击“Start”开始测试,请求数会减少18.使用测试脚本添加的用户进行登录测试二.使用Selenium IDE对JForum的用户注册模块进行测试1.安装Firefox浏览器,选择经典安装2.单击Alt键显示菜单,从“工具”菜单选择“附加组件”3.选择“从文件安装附加组件”选项4.在弹出文件选择窗口中选择selenium-ide-2.9.0.xpi插件,在浏览器将弹出的菜单中选择“安装”按钮,并选择立即重启5.重启浏览器后,在“工具”菜单中选择“Selenium IDE”运行之6.录制脚本7.系统同时会记录用户所有输入,包括错误输入信息。
软件黑盒测试报告

天津农学院软件测试课程实验报告——黑盒测试院系:计算机科学与信息工程学院专业:软件工程班级:12级软件4班______小组成员:王震 1208054413__许勇 1208054401___许帅杰 1208054408___吴世兵 1208054417__王艺 1208054418___一:实验内容:1. 系统地学习和理解黑盒测试的基本概念、原理,照我黑盒测试的基本技术和方法;2. 对一个已知的程序进行测试,这里用的网上小说阅读查询的系统。
3. 通过实验和应用,要逐步提高和运用黑盒测试技术解决世界测试问题的能力;这采用的是等价类划分法和边界值法两种黑盒测试常用的方法。
4. 完成试验并认真书写报告二,实验原理:黑盒测试是常用的软件测试的方法,用这种方法测试时,把被测试程序当做一个黑盒,在不考虑内部结构和内部特征性,测试者只知道该程序的输入和输出之间个关系或程序的功能的情况下,依靠能反应这一关系和程序功能需求规格的说明书,来确定测试永烈和推断测试结构的正确性。
软件的黑盒测试被用来证实软件功能的正确性和可操作性。
1. 划分等价类:等价类划分法是把程序的输入值划分成若干等价类,然后从每个类中选取少数代表性数据作为测试用例,使每一个类中的任何一个测试用例都能代表这个等价类中的其他数据。
也就是说,如果从某等价类中选出任意一个测试用例都能发现错误,就可以认为该类中其他测试用例也能发现错误,这样就不需要漫无边际地寻找测试用例,而是针对性地使用测试用例。
该方法是一种重要的、常用的黑盒测试用例设计方法。
2. 边界值分析法:就是对输入或输出的边界值进行测试的一种黑盒测试方法。
通常边界值分析法是作为等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
3. 功能图法:一个程序的功能说明通常动态说明和静态说明组成。
动态说明描述了输入数据的次序和转移的次序。
静态说明描述了输入条件和输出条件之间的对应关系。
对于复杂的程序,由于存在大量的组合情况,因此仅用静态说明组成的规格说明对于测试来说往往是不够的,必须用动态说明来补充功能说明。
计算器黑盒测试实验报告

西实科技验报算告?实验名称计算器黑盒测试I实验地点____________________实验日期_______________指导教师__________________学生班级________________学生姓名__________________学生学号_________________提交日期软件教研室制一、测试目的设计测试用例、使用各种测试方法进行计算器的测试,并对测试结果进行分析二、测试内容1•软件说明:实现一个小的计算器程序,只需要完成加、减、乘、除运算,设计测试用例,并对测试结果进行分析,同时计算器运行稳定。
2、设计测试用例3、执行测试4、测试结果分析5、源代码三、测试步骤(一)、计算器界面2、设计测试用例(1)等价类测试:1、4个等价类测试用例的分析过程如下:2、对应测试的结果分析: 整型:1.加(55+50)2.减(78-24)3.乘(15*25)4.除(36/4)小数1.加(25.3+12.7)2.减(14.3-11.7)3.乘(25.6*12.8)4.除(50.2/20.7)负数6.加-20+-217.减(-15)-(-14)8.乘-12*-129.除-16/-5(其中算式写法错误导致正常运算错误)无效输入1.加(E1+t2):程序中无效数字无法正常输入,程序无法进行。
2.减(G4-k5)程序中无效数字无法正常输入,程序无法进行。
(同上)3.乘(I5*l6)程序中无效数字无法正常输入,程序无法进行。
(同上)4.除(Ff/se)程序中无效数字无法正常输入,程序无法进行。
(同上)简易计食器1、计算器4个标准等价类测试用例的分析过程如下:测试用例被加数加数预期输出Testi 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -70 10 正常运算Test6 10 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Testil 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test2结果:Test3结果:Test4结果:Test5结果:Test6结果:减法:1、计算器4个标准等价类测试用例的分析过程如下:2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:乘法1、计算器42、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:除法1、计算器4个标准等价类测试用例的分析过程如下:测试用例被除数除数预期输出Test2结果:Test3结果:Test8结果:附录:源代码CCalculateDlg::CCalculateDlg(CWnd* pParent /*=NULL*/):CDialog(CCalculateDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculateDlg)m_parameter = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;} void CCalculateDlg::DoDataExchange(CDataExchange* pDX)CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCalculateDlg)DDX_Text(pDX, IDC_EDIT, m_parameter);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculateDlg, CDialog)//{{AFX_MSG_MAP(CCalculateDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_clear, Onclear)ON_BN_CLICKED(IDC_calculate, Oncalculate)ON_BN_CLICKED(IDC_para1, Onpara1)ON_BN_CLICKED(IDC_para2, Onpara2)ON_BN_CLICKED(IDC_para3, Onpara3)ON_BN_CLICKED(IDC_para4, Onpara4)ON_BN_CLICKED(IDC_para5, Onpara5)ON_BN_CLICKED(IDC_para6, Onpara6)ON_BN_CLICKED(IDC_para7, Onpara7)ON_BN_CLICKED(IDC_para8, Onpara8)ON_BN_CLICKED(IDC_para9, Onpara9)ON_BN_CLICKED(IDC_para0, Onpara0)ON_BN_CLICKED(IDC_point, Onpoint)ON_BN_CLICKED(IDC_minus, Onminus)ON_BN_CLICKED(IDC_plus, Onplus)ON_BN_CLICKED(IDC_subtrack, Onsubtrack)ON_BN_CLICKED(IDC_multiply, Onmultiply)ON_BN_CLICKED(IDC_divide, Ondivide)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CCalculateDlg message handlersBOOL CCalculateDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CCalculateDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CCalculateDlg::OnPaint(){if (IsIconic())CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icon dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CCalculateDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCalculateDlg::Onclear(){UpdateData(true);m_parameter = 0;CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code herevoid CCalculateDlg::Oncalculate(){UpdateData(true);CalculatePara = m_parameter;switch(CalculateExpre){case'+':CalculateResult += CalculatePara;m_parameter = CalculateResult;break;case,-':CalculateResult -= CalculatePara;m_parameter = CalculateResult;break;case,*,:CalculateResult *= CalculatePara;m_parameter = CalculateResult;break;case,/':if (CalculatePara){CalculateResult /= CalculatePara;m_parameter = CalculateResult;}else{m_parameter = 0;MessageBox(”除数不能为零!”);} break;}// TODO: Add your control notification handler code hereCalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);}void CCalculateDlg::Onpara1(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 1;}else{CalculatePara = m_parameter + 1/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara2(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 2;elseCalculatePara = m_parameter + 2/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara3(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 3;}else{CalculatePara = m_parameter + 3/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara4(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 4;}elseCalculatePara = m_parameter + 4/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara5(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 5;}else{CalculatePara = m_parameter + 5/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara6(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 6;}else{CalculatePara = m_parameter + 6/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara7(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 7;}else{CalculatePara = m_parameter + 7/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara8(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 8;}else{CalculatePara = m_parameter + 8/pow(10,Sumpoint);Sumpoint++;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara9(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 9;}else{CalculatePara = m_parameter + 9/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara0(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 0;}else{Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here void CCalculateDlg::Onpoint(){Ispoint = true;Sumpoint = 1;// TODO: Add your control notification handler code here}void CCalculateDlg::Onminus(){UpdateData(true);m_parameter = 0 - m_parameter;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onplus(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '+';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onsubtrack(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre =m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onmultiply(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '*';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Ondivide(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '/';m_parameter = 0;Ispoint = false;UpdateData(false);// TODO: Add your control notification handler code here。
实验二 黑盒测试

实验二:黑盒测试
一、实验目的
(1)熟练掌握黑盒测试方法中的边值分析方法和判定表驱动测试方法
(2)通过实验掌握如何应用黑盒测试方法设计测试用例
(3)运用所学理论,完成实验研究的基本训练过程
二、实验内容
1.用你熟悉的语言编写一个判断三角形问题的程序。
要求:读入代表三角形边长的三个整数A,B,C,取值范围为1-100,判断它们能否组成三角形。
如果能够,则输出三角形是等边、等腰、一般三角形和非三角形。
2.使用边值分析和判定表驱动测试方法设计测试用例。
三、实验步骤
(1)用你熟悉的语言编写上述源程序
(2)使用边值分析方法设计测试用例,并填写完成表1和表3
(3)使用判定表驱动测试方法建立判定表,完成测试用例的设计。
程序:
四、实验数据记录
1、边界值方法测试用例设计
2、判定表驱动测试设计测试用例
(1)确定规则个数。
(2)列出所有的条件桩和动作桩。
(3)填入输入项。
(4)填入动作项,得到初始判定表
(5)化简,合并相似规则后得到三角形问题的判定表。
化简后的判定表:
五、实验结果分析
六、心得体会。
软件测试第一次实验黑盒测试设计实验报告指导

一、实验报告内容要求:1.实验目的:理解黑盒测试的基本方法,掌握等价类划分法和边界值方法设计测试用例。
2.实验内容:1)输入三个整数a、b、c,分别作为三角形的三条边,通过程序判断这三条边是否能构成三角形?如果能构成三角形,则判断三角形的类型(等边三角形、等腰三角形、一般三角形)。
要求输入三个整数a、b、c,必须满足以下条件:1≤a≤100;1≤b≤100;1≤c≤100。
要求:a.大家用自己熟悉的编程语言,实现上面问题的描述。
b.请用等价类设计测试用例。
2) 程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤ year ≤2050。
),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。
例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。
请用黑盒测试方法的边界值设计测试用例。
3.实验步骤:步骤一:编写源程序并运行该程序。
步骤二:测试用例设计。
1)三角形判定问题1.对测试用例进行等价类划分:(1)1~100整数(2)三个数(3)非零数(4)正数(5)两边之和大于第三边(6)等腰(7)等边如果 a 、 b 、 c 满足条件( 1 ) ~ ( 4 ),则输出下列四种情况之一:1)如果不满足条件(5),则程序输出为 " 非三角形 " 。
2)如果三条边相等即满足条件(7),则程序输出为 " 等边三角形 " 。
3)如果只有两条边相等、即满足条件(6),则程序输出为 " 等腰三角形 " 。
4)如果三条边都不相等,则程序输出为 " 一般三角形 " 。
等价类划分表如下:3.测试截图2)NextDay问题1.对测试用例进行边界值分析:各变量分别取:最小值、略大于最小值、正常值、略小于最大值、最大值。
黑盒测试实验报告

课程名称:软件测试实验题目:黑盒测试报告专业:教育技术学班级:教技142学生姓名:安卓指导老师:郭小雪所属学期:2017-2018学年第二学期一、引言1.1目的测试报告为三角形问题和找零钱最佳组合问题项目的黑盒测试报告,目的在于总结测试阶段的测试以及分析测试结果。
1.2实验环境在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,VC6.0工具作为开发环境(IDE)1.3实验要求1.根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能图法、错误推测法来设计相应的测试用例。
2.输入数据进行测试,填写测试用例。
二、实验原理黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
软件的黑盒测试意味着测试要在软件的接口处进行。
这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试。
从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。
这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。
黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。
具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。
等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值。
该方法是一种重要的,常用的黑盒测试用例设计方法。
实验二黑盒测试报告参考模板

实验二黑盒测试刘童童一、实验目的1、掌握黑盒测试的基本方法;2、掌握黑盒测试用例的编写。
二、实验要求1、根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能图法、错误推测法来设计相应的测试用例。
2、输入数据进行测试,填写测试用例。
三、实验内容1、等价类划分法测试练习——创建腾讯QQ号黑盒测试问题QQ用户登录框测试,我们要从两个方面去考虑:一是QQ帐号,二是QQ密码。
1)划分等价类并编号,在下表内填写等价类划分的结果2)设计测试用例,覆盖所有的有效等价类2、因果法测试用例设计练习——自动售货机软件测试用例设计问题有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。
其规格说明如下:若投入5角钱或1元钱的硬币,按下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。
若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并按下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
分析说明,列出原因和结果:原因:结果:画出因果图:因果图-画条件和结果有零钱选橙汁选啤酒投5角投1元红灯亮出橙汁出啤酒找5角找1元有零钱红灯亮出橙汁出啤酒找5角找1元E E因果图-应该找零钱有零钱红灯亮出橙汁出啤酒找5角找1元EE红灯亮出橙汁出啤酒找5角找1元EE红灯亮出橙汁出啤酒找5角找1元EE因果图-5角钱付清红灯亮出橙汁出啤酒找5角找1元EE因果图-退还1元红灯亮出橙汁出啤酒找5角找1元EE转换成判定表序号: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7四、实验步骤1、依次按照每种方法的步骤来写出测试用例2、测试,得出结果。
五、实验总结:友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。
白盒测试和黑盒测试实验报告

软件质量保证与测试实验指导计算机工程学院测试环境配置1.settingJunit(1)startEclipseSelectwindows-preferences-java-buildpath–classpathvariables(2)clicknew,thefigureofnewvariableentryisshown.(3)name JUNIT_LIBselectfile-选择JUnit插件所对应的JAR文件所在地,在Eclipse的安装目录的plugins目录中2.JUNIT的组成框架其中,junit.framework和junit.runner是两个核心包。
junit.framework负责整个测试对象的框架junit.runner负责测试驱动Junit的框架又可分为:A、被测试的对象。
B、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。
C、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。
D、测试结果的描述与记录。
(TestResult)。
E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)F、JUnitFramework中的出错异常(AssertionFailedError)。
JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test 的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法。
3.JUnit中常用的接口和类Test接口——运行测试和收集测试结果Test接口使用了Composite设计模式,是单独测试用例(TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。
它的publicintcountTestCases()方法,它来统计这次测试有多少个TestCase,另外一个方法就是publicvoid run(TestResult),TestResult是实例接受测试结果,run方法执行本次测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件测试技术》实验报告实验序号:04实验项目名称:黑盒测试一、实验目的及要求掌握用等价类、边界值分析法、因果图的方法设计测试用例二、实验设备(环境)及要求实验在计算机系的机房进行,安装了VC6.0,Java SDK,TurboC等软件,学生能采用C语言,C++,或Java语言进行编程。
三、实验内容与步骤任务一:佣金问题问题描述如下:一酒水销售公司指派销售员销售各种酒水。
白酒卖168元瓶,红酒卖120元瓶,啤酒卖5元瓶。
白酒每月的供应量为5000瓶,红酒为3000瓶,啤酒为30000瓶,各个销售员每月至少要售出白酒50瓶,红酒30瓶,啤酒300瓶。
月末,每个销售员上报他所在区域的销售业绩。
这样酒水销售公司就知道了当月的销售情况,并根据销售额计算佣金提成如下:2万以下(含):4%;2万(不含)~4.5万(含):1%4.5万以上(不含):0.5%这样,佣金程序生成月份销售报告,汇总售出的白酒、红酒和啤酒总数,销售公司的总销售额和各个销售员的佣金。
这个问题分为三个不同的部分:输入数据部分,用来处理输入数据的有效性;销售额计算部分;佣金(提成)计算部分.1、充分考虑输入有效性校验,编写佣金问题的代码;2、按照等价类划分的思想,设计等价类测试用例;1)佣金问题中,首先分析输入和输出,注意分析佣金问题中给出和隐含的对输入条件的要求:2)针对输入进行等价类划分,形成等价类列表,并为每一个等价类编号;3)从等价类划分的表格中设计测试用例:为有效等价类设计测试用例,为每一个无效等价类至少设计一个测试用例3、执行测试,记录发现的问题。
任务二:下一天问题1、对于NextDate问题,分析它的输入限制;2、从输入限制的边界设计测试用例;3、执行测试,记录结果。
任务三:自动售货机问题有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。
其规格说明如下:若投入5角钱或1元钱的硬币,押下[橙汁]或[啤酒]的按钮,则相应的饮料酒送出来。
若售货机没有零钱找,则一个显示[零钱找完]的红灯亮,这时再投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示[零钱找完]的红灯灭,在送出饮料的同时退还5角硬币。
1、分析这一段说明,列出原因和结果2、画出因果图。
所有原因结点列在左边,所有结果结点列在右边。
建立中间结点,表示处理的中间状态。
中间结点:1)投入1元硬币且押下饮料按钮2) 押下〖橙汁〗或〖啤酒〗的按钮3) 应当找5角零钱并且售货机有零钱找4)钱已付清3、转换成判定表4、在判定表中,把不可能出现的情况删去。
5、最后根据判定表中剩下的列作为确定测试用例的依据,设计测试用例。
6、实验报告要求及记录、格式四、程序调试与结果1、佣金问题1)划分等价类并编号,下表等价类划分的结果输入等价类有效等价类无效等价类白酒数量eq \o\ac(○,1)在50~5000之间eq \o\ac(○,2)在0~49之间eq \o\ac(○,3)在5000以上不包括5000红酒数量eq \o\ac(○,4)在30~3000之间eq \o\ac(○,5)在0~29之间eq \o\ac(○,6)在3000以上不包括3000啤酒数量eq \o\ac(○,7)在300~30000之间eq \o\ac(○,8)在0~299之间eq \o\ac(○,9)在30000以上不包括300002)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为①、 eq \o\ac(○,4)、 eq \o\ac(○,7),设计的测试用例如下:测试数据期望结果覆盖的有效等价类(55,40,400)输入有效①、 eq \o\ac(○,4)、 eq \o\ac(○,7)3)为每一个无效等价类设计一个测试用例,设计结果如下:测试数据期望结果覆盖的无效等价类(30,40,400)输入无效eq \o\ac(○,2)(5500,40,400)输入无效eq \o\ac(○,3)(55,25,400)输入无效eq \o\ac(○,5)(55,4000,400)输入无效eq \o\ac(○,6)(55,75,250)输入无效eq \o\ac(○,8)(55,75,33000)输入无效eq \o\ac(○,9)4)?测试结果:所有测试都成功,且测试的覆盖率为百分百2、NextDate问题1)分析它的输入限制?NextDate是一个有三个变量(月份、日期和年)的函数。
函数返回输入日期后面的那个日期。
变量月份、日期和年都是整数值,并满足以下条件:?c1:1<=月份<=12?c2:1<=日期<=31?c3:1812<=年<=2012?2)边界值测试设计编号输入期望输出YearMonthDay0011993-115Month不在1~12中002199315Month不在1~12中00319931151993年1月16日004199311151993年11月16日005199312151993年12月16日00619931315Month不在1~12中00719936-1Day不在1~31中00819936Day不在1~31中0091993611993年6月2日01019936151993年6月16日01119936291992年6月30日01219936301992年7月1日0131993631Day不在1~30中01419932-1Day不在1~29中01519932Day不在1~29中0161993211993年2月2日01719932151993年2月16日01819922281993年2月29日02919932281993年3月1日01919922291993年3月1日0201993229平年2月没有29号0211993230Day不在1~31中0221993231Day不在1~31中023199312-1Day不在1~31中024199312Day不在1~31中02519931211993年12月2日026199312301993年12月31日027199312311994年1月1日02819931232Day不在1~31中03019931-1Day不在1~31中03119931Day不在1~31中0321993111993年1月2日03319931301993年1月31日03419931311993年2月1日0351993132Day不在1~31中3)测试结果:所有测试都成功,且测试的覆盖率为百分百3、自动售货机问题1)分析自动售货机中一共存在5个条件和5个结果:条件:C1、售货机有零钱找C2、投入1元硬币C3、投入5角硬币C4、按下橙汁按钮C5、按下啤酒按钮结果:E1、售货机“零钱找完”灯亮E2、退还1元硬币E3、退还5角硬币E4、送出橙汁饮料E5、送出啤酒饮料2)因果图的分析结果4)有效的条件组合构成的判定表输入C11111 1 1 1 C2 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 C3 0 01 1 1 0 0 0 0 0 1 1 1 0 0 C4 0 1 0 0 1 0 1 0 0 111C5 0111111结果E11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 E2 1 1 1 0 0 0 0 00 0 0 0 0 0 0 E3 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 00 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 E5 0 0 0 0 0 1 0115)测试用例编号输入值状态期望值001(cola,1D)有零钱Type Error002 (OrangeJuice,1D)有零钱送出橙汁,退5角003(Beer,1D)有零钱送出啤酒,退5角004(cola,5C)有零钱Type Error005 (OrangeJuice,5C)有零钱送出橙汁006(Beer,5C)有零钱送出啤酒007 (OrangeJuice,4C)有零钱Money Error008(Beer,4C)有零钱Money Error009(cola,1D)无零钱红灯亮,退1元010 (OrangeJuice,1D)无零钱红灯亮,退1元011(Beer,1D)无零钱红灯亮,退1元012(cola,5C)无零钱退5角013 (OrangeJuice,5C)无零钱送出橙汁014(Beer,5C)无零钱送出啤酒015(OrangeJuice,4C)无零钱Money Error016(Beer,4C)无零钱Money Error6)测试结果:所有测试都成功,且测试的覆盖率为百分百五、分析与讨论该实验借助了Eclipse+JUnit+EclEmma进行了测试。
可以将代码实现的功能过一遍。
更快捷的找到自己的测试用例的不足。
六、教师评语签名:日期:成绩附件:佣金问题实现代码:package test4;import java.util.Scanner;public class Commission {double totalspirit=0; 白酒总销售量double totalredwine=0; 红酒总销售量double totalbeer=0; 啤酒总销售量double spiritprice=168; 白酒的单价double redwineprice=120; 红酒的单价double beerprice=5; 啤酒的单价double spiritsales;double redwinesales;double beersales;double sales;double commission; 佣金String resultSales;public Commission(double spirit, double redwine, double beer) {totalspirit+=spirit;totalredwine=+redwine;totalbeer+=beer;}public String operation(double spirit, double redwine, double beer) {if(spirit>=50&&spirit<=5000){if(redwine>=30&&redwine<=3000){if(beer>=300&&beer<=30000){spiritsales=spiritprice*totalspirit;redwinesales=redwineprice*totalredwine;beersales=beerprice*totalbeer;sales=spiritsales+redwinesales+beersales;if(sales<=20000)commission=sales*0.04;else if(sales>20000&&sales<=45000)commission=20000*0.04+(sales-20000)*0.01;elsecommission=45000*0.01+(sales-45000)*0.005;resultSales="Current State\n" +"白酒销售量: " + totalspirit + "\n" +"红酒销售量: " + totalredwine + "\n" +"啤酒销售量: " + totalbeer + "\n" +"公司总销售额: " + sales+"\n"+"本月获得佣金:"+commission;}else if(beer<300){resultSales="You did not complete the company's sales index,at least a month to sell 300 bottles of beer.";}else if(beer>30000){resultSales="Monthly supply of 30000 bottles of beer";}}else if(redwine<30){resultSales="You did not complete the company's sales index,at least a month to sell 30 bottles of red wine.";}else if(redwine>3000){resultSales="Monthly supply of 3000 bottles of red wine";}}else if(spirit<50){resultSales="You did not complete the company's sales index,at least a month to sell 50 bottles of spirit.";}else if(spirit>5000){resultSales="Monthly supply of 5000 bottles of spirit";}return resultSales;}}测试代码:package test4;import test3.SaleMachine;import junit.framework.TestCase;public class TestCommission extends TestCase {public void testOperation1(){Commission saleMan1=new Commission(55,40,400);String expectedResult="Current State\n" +"白酒销售量: " + 55.0 + "\n" +"红酒销售量: " + 40.0 + "\n" +"啤酒销售量: " + 400.0 + "\n" +"公司总销售额: " + 16040.0+"\n"+"本月获得佣金:"+641.6;assertEquals(expectedResult, saleMan1.operation(55,40,400));}public void testOperation2(){Commission saleMan2=new Commission(30,40,400);String expectedResult="You did not complete the company's sales index,at least a month to sell 50 bottles of spirit.";assertEquals(expectedResult, saleMan2.operation(30,40,400));}public void testOperation3(){Commission saleMan3=new Commission(5500,40,400);String expectedResult="Monthly supply of 5000 bottles of spirit";assertEquals(expectedResult, saleMan3.operation(5500,40,400));}public void testOperation4(){Commission saleMan4=new Commission(55,25,400);String expectedResult="You did not complete the company's sales index,at least a month to sell 30 bottles of red wine.";assertEquals(expectedResult, saleMan4.operation(55,25,400));}public void testOperation5(){Commission saleMan5=new Commission(55,4000,400);String expectedResult="Monthly supply of 3000 bottles of red wine";assertEquals(expectedResult, saleMan5.operation(55,4000,400));}public void testOperation6(){Commission saleMan6=new Commission(55,75,250);String expectedResult="You did not complete the company's sales index,at least a month to sell 300 bottles of beer.";assertEquals(expectedResult, saleMan6.operation(55,75,250));}public void testOperation7(){Commission saleMan7=new Commission(55,75,33000);String expectedResult="Monthly supply of 30000 bottles of beer";assertEquals(expectedResult, saleMan7.operation(55,75,33000));}public void testOperation8(){Commission saleMan8=new Commission(100,150,1000);String expectedResult="Current State\n" +"白酒销售量: " + 100.0 + "\n" +"红酒销售量: " + 150.0 + "\n" +"啤酒销售量: " + 1000.0 + "\n" +"公司总销售额: " + 39800.0+"\n"+"本月获得佣金:"+998.0;assertEquals(expectedResult, saleMan8.operation(100,150,1000)); }public void testOperation9(){Commission saleMan9=new Commission(250,1000,5000);String expectedResult="Current State\n" +"白酒销售量: " + 250.0 + "\n" +"红酒销售量: " + 1000.0 + "\n" +"啤酒销售量: " + 5000.0 + "\n" +"公司总销售额: " + 187000.0+"\n"+"本月获得佣金:"+1160.0;assertEquals(expectedResult, saleMan9.operation(250,1000,5000)); }}NextDate问题实现代码:package test4;public class NextDay {int year;int month;int day;int nextday;int nextmonth;int nextyear;String resultDate;public NextDay(int year,int month,int day){nextday=day;nextmonth=month;nextyear=year;}public String operation(int year,int month,int day) {if(1>month || month>12){resultDate="This month not between 1 and 12"; }if(1>day || day>31){resultDate="This day not between 1 and 31";}else{switch(month){case (1):case (3):case (5):case (7):case (8):case (10):if(day<31){nextday=day+1;}else if(day==31){nextday=1;nextmonth=month+1;}resultDate="Tomorrow's date is:"+nextyear+"-"+nextmonth+"-"+nextday; break;case (4):case (6):case (9):case (11):if(day<30){nextday=day+1;}else if(day==30){nextday=1;nextmonth=month+1;}else if(day==31){resultDate="Sorry.This month no 31 days!";break;}resultDate="Tomorrow's date is:"+nextyear+"-"+nextmonth+"-"+nextday; break;case (12):if(day<31){nextday=day+1;}else{nextday=1;nextmonth=1;nextyear=year+1;}resultDate="Tomorrow's date is:"+nextyear+"-"+nextmonth+"-"+nextday; break;case (2):if(day<28){nextday=day+1;}else if(day==28){if((year%4==0&&year%100!=0)||year%400==0){nextday=29;}else{nextday=1;nextmonth=3;}}else if(day==29){if((year%4==0 && year%100!=0) || year%400==0){nextday=1;nextmonth=3;}else{resultDate="Sorry.This year's 2nd month no 29 days!";break;}}else if(day==30||day==31){resultDate="Sorry.This month no 30 or 31 days!";break;}resultDate="Tomorrow's date is:"+nextyear+"-"+nextmonth+"-"+nextday; break;}}return resultDate;}}测试代码:package test4;import junit.framework.TestCase;public class TestNextDay extends TestCase {public void testOperation1(){NextDay next1=new NextDay(1993,-1,15);String expectedResult="This month not between 1 and 12"; assertEquals(expectedResult, next1.operation(1993,-1,15));}public void testOperation2(){NextDay next2=new NextDay(1993,0,15);String expectedResult="This month not between 1 and 12"; assertEquals(expectedResult, next2.operation(1993,0,15));}public void testOperation3(){NextDay next3=new NextDay(1993,1,15);String expectedResult="Tomorrow's date is:"+1993+"-"+1+"-"+16; assertEquals(expectedResult, next3.operation(1993,1,15));}public void testOperation4(){NextDay next4=new NextDay(1993,11,15);String expectedResult="Tomorrow's date is:"+1993+"-"+11+"-"+16; assertEquals(expectedResult, next4.operation(1993,11,15));}public void testOperation5(){NextDay next5=new NextDay(1993,12,15);String expectedResult="Tomorrow's date is:"+1993+"-"+12+"-"+16;assertEquals(expectedResult, next5.operation(1993,12,15));}public void testOperation6(){NextDay next6=new NextDay(1993,13,15);String expectedResult="This month not between 1 and 12"; assertEquals(expectedResult, next6.operation(1993,13,15));}public void testOperation7(){NextDay next7=new NextDay(1993,6,-1);String expectedResult="This day not between 1 and 31"; assertEquals(expectedResult, next7.operation(1993,6,-1));}public void testOperation8(){NextDay next8=new NextDay(1993,6,0);String expectedResult="This day not between 1 and 31"; assertEquals(expectedResult, next8.operation(1993,6,0));}public void testOperation9(){NextDay next9=new NextDay(1993,6,1);String expectedResult="Tomorrow's date is:"+1993+"-"+6+"-"+2; assertEquals(expectedResult, next9.operation(1993,6,1));}public void testOperation10(){NextDay next10=new NextDay(1993,6,15);String expectedResult="Tomorrow's date is:"+1993+"-"+6+"-"+16; assertEquals(expectedResult, next10.operation(1993,6,15));}public void testOperation11(){NextDay next11=new NextDay(1993,6,29);String expectedResult="Tomorrow's date is:"+1993+"-"+6+"-"+30; assertEquals(expectedResult, next11.operation(1993,6,29));}public void testOperation12(){NextDay next12=new NextDay(1993,6,30);String expectedResult="Tomorrow's date is:"+1993+"-"+7+"-"+1; assertEquals(expectedResult, next12.operation(1993,6,30));}public void testOperation13(){NextDay next13=new NextDay(1993,6,31);String expectedResult="Sorry.This month no 31 days!";assertEquals(expectedResult, next13.operation(1993,6,31));}public void testOperation14(){NextDay next14=new NextDay(1993,2,-1);String expectedResult="This day not between 1 and 31";assertEquals(expectedResult, next14.operation(1992,3,-1));}public void testOperation15(){NextDay next15=new NextDay(1993,2,0);String expectedResult="This day not between 1 and 31";assertEquals(expectedResult, next15.operation(1993,2,0));}public void testOperation16(){NextDay next16=new NextDay(1993,2,1);String expectedResult="Tomorrow's date is:"+1993+"-"+2+"-"+2; assertEquals(expectedResult, next16.operation(1993,2,1));}public void testOperation17(){NextDay next17=new NextDay(1993,2,15);String expectedResult="Tomorrow's date is:"+1993+"-"+2+"-"+16; assertEquals(expectedResult, next17.operation(1993,2,15));}public void testOperation18(){NextDay next18=new NextDay(1992,2,28);String expectedResult="Tomorrow's date is:"+1992+"-"+2+"-"+29; assertEquals(expectedResult, next18.operation(1992,2,28));}public void testOperation29(){NextDay next29=new NextDay(1993,2,28);String expectedResult="Tomorrow's date is:"+1993+"-"+3+"-"+1; assertEquals(expectedResult, next29.operation(1993,2,28));}public void testOperation19(){NextDay next19=new NextDay(1992,2,29);String expectedResult="Tomorrow's date is:"+1992+"-"+3+"-"+1; assertEquals(expectedResult, next19.operation(1992,2,29));}public void testOperation20(){NextDay next20=new NextDay(1993,2,29);String expectedResult="Sorry.This year's 2nd month no 29 days!"; assertEquals(expectedResult, next20.operation(1993,2,29));}public void testOperation21(){NextDay next21=new NextDay(1993,2,30);String expectedResult="Sorry.This month no 30 or 31 days!"; assertEquals(expectedResult, next21.operation(1993,2,30)); }public void testOperation22(){NextDay next22=new NextDay(1993,2,31);String expectedResult="Sorry.This month no 30 or 31 days!"; assertEquals(expectedResult, next22.operation(1993,2,31)); }public void testOperation23(){NextDay next23=new NextDay(1993,12,-1);String expectedResult="This day not between 1 and 31"; assertEquals(expectedResult, next23.operation(1993,12,-1)); }public void testOperation24(){NextDay next24=new NextDay(1993,12,0);String expectedResult="This day not between 1 and 31"; assertEquals(expectedResult, next24.operation(1993,12,0)); }public void testOperation25(){NextDay next25=new NextDay(1993,12,1);String expectedResult="Tomorrow's date is:"+1993+"-"+12+"-"+2; assertEquals(expectedResult, next25.operation(1993,12,1));}public void testOperation26(){NextDay next26=new NextDay(1993,12,30);String expectedResult="Tomorrow's date is:"+1993+"-"+12+"-"+31; assertEquals(expectedResult, next26.operation(1993,12,30));}public void testOperation27(){NextDay next27=new NextDay(1993,12,31);String expectedResult="Tomorrow's date is:"+1994+"-"+1+"-"+1; assertEquals(expectedResult, next27.operation(1993,12,31));}public void testOperation28(){NextDay next28=new NextDay(1993,12,32);String expectedResult="This day not between 1 and 31";assertEquals(expectedResult, next28.operation(1993,12,32));}public void testOperation30(){NextDay next30=new NextDay(1993,1,-1);String expectedResult="This day not between 1 and 31";assertEquals(expectedResult, next30.operation(1993,1,-1));}public void testOperation31(){NextDay next31=new NextDay(1993,1,0);String expectedResult="This day not between 1 and 31";assertEquals(expectedResult, next31.operation(1993,1,0));}public void testOperation32(){NextDay next32=new NextDay(1993,1,1);String expectedResult="Tomorrow's date is:"+1993+"-"+1+"-"+2; assertEquals(expectedResult, next32.operation(1993,1,1));}public void testOperation33(){NextDay next33=new NextDay(1993,1,30);String expectedResult="Tomorrow's date is:"+1993+"-"+1+"-"+31; assertEquals(expectedResult, next33.operation(1993,1,30));}public void testOperation34(){NextDay next34=new NextDay(1993,1,31);String expectedResult="Tomorrow's date is:"+1993+"-"+2+"-"+1; assertEquals(expectedResult, next34.operation(1993,1,31));}public void testOperation35(){NextDay next35=new NextDay(1993,1,32);String expectedResult="This day not between 1 and 31"; assertEquals(expectedResult, next35.operation(1993,1,32));}}自动售货机问题实现代码:package test4;public class SaleMachine {private int countOfBeer, countOfOrangeJuice, countOfFiveCents, countOfOneDollar;private String[] typeOfGoods={ "Beer", "OrangeJuice" }; private String resultOfDeal;public SaleMachine() {initial();}public void initial() {countOfBeer=6;countOfOrangeJuice=6;countOfFiveCents=6;countOfOneDollar=6;}public SaleMachine(int fiveCents, int oneDollar, int OfBeer, int OfOrange){countOfFiveCents=fiveCents;countOfOneDollar=oneDollar;countOfBeer= OfBeer;countOfOrangeJuice= OfOrange;}public String operation(String type, String money){if (countOfFiveCents <=0) {if (money.equalsIgnoreCase("5C")) {if (type.equals(typeOfGoods[0])) {resultOfDeal="give you a bottle Beer.";return resultOfDeal;} else if (type.equals(typeOfGoods[1])) {resultOfDeal="give you a bottle OrangeJuice.";return resultOfDeal;} else {resultOfDeal="Back 5 Cents.";return resultOfDeal;}}if (money.equalsIgnoreCase("1D")) {if (type.equals(typeOfGoods[0])) {resultOfDeal="Turn on the red light \n" + "Back 1 Dollar"; return resultOfDeal;} else if (type.equals(typeOfGoods[1])) {resultOfDeal="Turn on the red light \n" + "Back 1 Dollar"; return resultOfDeal;} else {resultOfDeal="Back 1 Dollar";return resultOfDeal;}} else {resultOfDeal="Money Error.";return resultOfDeal;。