实验二+138+牟平

被测代码地址:http://www.cnblogs.com/lyz007/p/6530327.html

一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

//@105032014019李悦洲
#include"iostream"
#include"string"
#include"math.h"

#define DENGBIAN 0
#define DENGYAO 1
#define ZHIJIAO 2
#define YIBAN 3

#define WUCHAZHI 0.00001

using namespace std;

class CTriangle
{
private:
int a;
int b;
int c;
protected:
void setTriangle(int a,int b,int c); //赋值
bool checkTheOne()const; //检查范围条件
bool checkTheTwo()const; //检查是否组成三角形
int checkType()const; //判断三角形种类
public:
string triangle(const int &a,const int &b,const int &c);//题目要求的函数
};

void CTriangle::setTriangle(int a,int b,int c)
{
this->a = a;
this->b = b;
this->c = c;
}

bool CTriangle::checkTheOne()const//检查范围条件
{
if((a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100))
return true;
else
return false;
}
bool CTriangle::checkTheTwo()const//检查是否组成三角形
{
if((a<(b+c))&&(b<(a+c))&&(c<(a+b)))
return true;
else
return false;
}
int CTriangle::checkType()const//判断三角形种类
{
if(a==b&&a==c&&b==c)
return DENGBIAN;
if(a==b||a==c||b==c)
return DENGYAO;
if(a*a+b*b==c*c||a*a==b*b+c*c||b*b==a*a+c*c)
return ZHIJIAO;
return YIBAN;
}
string CTriangle::triangle(const int &a,const int &b,const int &c)//题目要求的函数
{
setTriangle(a,b,c);
if(!checkTheOne())
{
return "边的值不在范围内!";
}
else if(!checkTheTwo())
{
return "不构成三角形";
}
switch(checkType())
{
case DENGBIAN: return "等边三角形";
case DENGYAO: return "等腰三角形";
case ZHIJIAO: return "直角三角形";
case YIBAN: return "一般三角形";
}
return "ERROR?";
}

bool inputInteger(int &a,int &b,int &c) //完成用户输入并且判断是否输入整数,返回输入是否合法
{
int i = 0;
double d[3] = {0.0f};
if (scanf("%lf,%lf,%lf",&d[0],&d[1],&d[2])!=3)
{
return false;
}
for(i=0;i<3;i++)
{
if(fabs((double)(int)d[i]-d[i])>WUCHAZHI)
{
return false;
}
}
a = d[0];
b = d[1];
c = d[2];
}

int main()//测试代码
{
CTriangle Test;
int a,b,c;
printf("请输入三角形的三条边\n");
if(inputInteger(a,b,c))
{
cout<<Test.triangle(a,b,c)<<endl;
}
else printf("输入信息错误\n");
return 0;
}

2)依据覆盖技术,测试用例列表:

图片突然旋转步过来

DD-路径(只压缩链路经)


程序图节点


DD-路径


a


A


b


B


f


C


c


D


g


E


d


F


h


G


e


H


I


I


j


J

(I)语句覆盖:

A-B-E-J

A-B-D-G-J

A-B-D-F-I-J

A-B-D-F-H-J

A-C-J

测试用例:


用例ID


输入值


执行路径


预期输出


a


b


c


结果


1


5


5


5


A-B-E-J


等边三角形


2


8


8


8


A-B-E-J


等边三角形


3


5


5


8


A-B-D-G-J


等腰三角形


4


50


50


8


A-B-D-G-J


等腰三角形


5


5


6


7


A-B-D-F-I-J


一般三角形


6


5


6


9


A-B-D-F-I-J


一般三角形


7


5


4


3


A-B-D-F-H-J


直角三角形


8


6


8


10


A-B-D-F-H-J


直角三角形


9


5


5


30


A-C-J


不构成三角形


10


8


5


30


A-C-J


不构成三角形


11


110


110


110


A-H-J


边的值不在范围


12


0


0


1


A-H-J


边的值不在范围

(II)分支覆盖(判断覆盖):

A-B-E-J

A-B-D-G-J

A-B-D-F-I-J

A-B-D-F-H-J

A-C-J

测试用例同语句覆盖测试用例

(III)路径覆盖:

A-B-E-J

A-B-D-G-J

A-B-D-F-I-J

A-B-D-F-H-J

A-C-J

测试用例同语句覆盖测试用例

(IV)条件覆盖:各个条件取真或假的可能至少执行一次

A-B-E-J

A-B-D-G-J

A-B-D-F-H-J

A-B-D-F-I-J

A-C-J


编号


a==b


b==c


c==a


(a==b) || (b==c) || (a==c)


覆盖路径


1


F


F


F


F


D-F


2


F


F


T


T


D-G


3


F


T


F


T


D-G


4


F


T


T


T


D-G


5


T


T


T


T


D-G


6


T


T


F


T


D-G


7


T


F


T


T


D-G


8


T


F


F


T


D-G


编号


a==b


b==c


c==a


(a==b)&& (b==c)&&(c==a)


覆盖路径


9


F


F


F


F


A-C


10


F


F


T


F


A-C


11


F


T


F


F


A-C


12


F


T


T


F


A-B


13


T


T


T


T


A-B


14


T


T


F


F


A-C


15


T


F


T


F


A-C


16


T


F


F


F


A-C


编号


a<=b+c


b<=a+c


c<=a+b


a<=b+c ||b<=a+c || c<=a+b


覆盖路径


17


F


F


F


F


A-C


18


F


F


T


T


A-B


19


F


T


F


T


A-B


20


F


T


T


T


A-B


21


T


T


T


T


A-B


22


T


T


F


T


A-B


23


T


F


T


T


A-B


24


T


F


F


T


A-B


编号


a*a+b*b==c*c


b*b+c*c==a*a


a*a+c*c==b*b


a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b


覆盖路径


25


F


F


F


F


F-I


26


F


F


T


T


F-H


27


F


T


F


T


F-H


28


F


T


T


T


F-H


29


T


T


T


T


F-H


30


T


T


F


T


F-H


31


T


F


T


T


F-H


32


T


F


F


T


F-H

测试用例:


用例ID


输入值


执行路径


预期输出


a


b


c


结果


1


5


5


5


A-B-E-J


等边三角形


2


8


8


8


A-B-E-J


等边三角形


3


5


5


8


A-B-D-G-J


等腰三角形


4


50


50


8


A-B-D-G-J


等腰三角形


5


5


6


7


A-B-D-F-I-J


一般三角形


6


5


6


9


A-B-D-F-I-J


一般三角形


7


5


4


3


A-B-D-F-H-J


直角三角形


8


6


8


10


A-B-D-F-H-J


直角三角形


9


5


5


30


A-C-J


不构成三角形


10


8


5


30


A-C-J


不构成三角形


11


110


110


110


A-H-J


边的值不在范围


12


0


0


1


A-H-J


边的值不在范围

3)相应Junit测试脚本、执行结果

4、测试小结:

测试找到的缺陷清单:未发现缺陷

对源代码的修改建议:尽量按老师规定输出,应先判断等腰再判断等边三角形,这样逻辑更顺畅;应在代码关键处添加注释,同学人很好,马上就改了一下

测试总结与心得体会:测试用例都成功通过。

在我们平常的项目开发中,测试是显得越来越重要。我们很多的时候,必须得测试与开发同步,测试代码和工作代码应同步编译和更新。而junit可以大大减少代码量和文件量,为测试提供了很大的灵活性。所以不要认为压力大,就不写测试代码。相反编写测试代码会使压力逐渐减轻,因为通过编写测试代码地编写出有效率的工作代码。在编写测试用例时要充分覆盖各个路径,以确保每个判断条件都能被执行。

通过此次的实验,我对于白盒测试有了进一步的理解,掌握了程序的控制流图及其路径图的画法,并对各种覆盖方法有了更深层次的理解。同时还了解到了Junit测试的好处,能够使测试代码与产品代码分离、针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试等等,也学到了两种测试参数测试和打包测试。

时间: 2024-10-09 12:39:38

实验二+138+牟平的相关文章

实验三+138+牟平

实验三+138+牟平 一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实践.(作业若雷同,后上传者判定0分) 三.实验内容 1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结. 要求写出测试用例表.执行情况和测试小结. 2.对手机上任意一款音乐软件进行黑盒测试. 要求:1)使用思维导图 2)根据场景法.状态图法 设计测试用例

实验四+138+牟平

一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) (3)写出该程序的缺陷. 三.实验内容 1.对QTP的样例小程序飞机订票系统,实现自动化测试.(学号被3整除,测3a;余1,测3b:余2,测4a) 2.要求: 1)写出飞机订票系统的被测需求. 自行选择需要测试的部分,根据自己的能力,可大,可小. 描述,被测程序,与被测部分的功能. 2)设计测试用例.

实验二十四:SD卡模块

  驱动SD卡是件容易让人抓狂的事情,驱动SD卡好比SDRAM执行页读写,SD卡虽然不及SDRAM的麻烦要求(时序参数),但是驱动过程却有猥琐操作.除此此外,描述语言只要稍微比较一下C语言,描述语言一定会泪流满面,因为嵌套循环,嵌套判断,或者嵌套函数等都是它的痛.. 史莱姆模块是多模块建模的通病,意指结构能力非常脆弱的模块,暴力的嵌套行为往往会击垮模块的美丽身躯,好让脆弱结构更加脆弱还有惨不忍睹,最终搞垮模块的表达能力.描述语言预想驾驭SD卡,关键的地方就是如何提升模块的结构能力.简单而言,描述

操作系统(实验二、作业调度模拟程序实验)

实验二.作业调度模拟程序实验 专业 商业软件工程   姓名 丘惠敏 学号 201406114203 一.        实验目的   (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 三.        实验方法.步骤及结果测试   1.   

1111《操作系统教程》实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF

实验二作业调度模拟程序实验报告

实验二作业调度模拟程序 网络工程专业   姓名:蔡利聪  学号:201306114117 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进

MySQL数据库实验二:单表查询

实验二   单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. SELECT Sname,S#,Sdept FROM S: 2.查询全体学生的详细记录. SELECT  * FROM S: 3.查全体学生的姓名及其出生年份. SELECT Sname,2011-Sage    /*假定当年的年份为2011年*/ FROM S: 4.查询选修了课程的学生学号.

20145221高其&amp;20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的

实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.        实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)      采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间