基于逻辑覆盖方法的测试用例设计与执行.docx
- 文档编号:11696668
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:19
- 大小:84.31KB
基于逻辑覆盖方法的测试用例设计与执行.docx
《基于逻辑覆盖方法的测试用例设计与执行.docx》由会员分享,可在线阅读,更多相关《基于逻辑覆盖方法的测试用例设计与执行.docx(19页珍藏版)》请在冰豆网上搜索。
基于逻辑覆盖方法的测试用例设计与执行
XXXX学院
基于逻辑覆盖方法的测试用例设计与执行
题目:
多功能电子计时器
课程名称:
软件测试方法和技术
院系:
XX学院
专业班级:
XXXX
组号:
XXX
小组成员:
XXXXXXXXX
实验报告成绩:
指导教师:
XXX
2017年X月X日
一、被测程序介绍
1.1程序背景
该程序是一个图形界面的简单的java小时钟嵌套一个可以排序的多功能秒表,具有良好的、简洁的界面。
它是图形界面、线程、流与文件等技术的综合运用,其界面主要采用了java.awt包,javax.swing等。
程序实现了电子时钟的基本功能。
可以从电脑上获得准确的背景时间,其时间精确到秒。
时钟的界面静中带动,秒表跳动。
使用人员能快捷简单地进行操作秒表,即时准确地计算时间,对人们的生活有一定的帮助。
1.2程序功能
功能1
获得准确的背景时间,这时小时钟最基本的功能。
功能2
按下“start”键,开始计时,秒表跳动。
功能3
按下“stop”键,停止计时,秒表的时间停留在按下“停止”键的那一刻。
功能4
按下“sort”键,按历时最短的顺序进行排序。
功能5
按下“reset”键,秒表归零。
二、被测程序主要测试代码
if(hour<=9)
{
timeInfo+="0"+hour+":
";
}
else
{
timeInfo+=hour+":
";
}
if(minute<=9)
{
timeInfo+="0"+minute+":
";
}
else
{
timeInfo+=""+minute+":
";
}
if(second<=9)
{
timeInfo="0"+second;
}
else
{
timeInfo+=second;
}
三、测试代码的程序流程图
3.1程序流程图
根据上述的程序代码,绘制如图1所示的程序流程图,为了方便分析测试用例,将图1简化为图2,其中:
条件A={hour<=9}
条件B={minute<=9}
条件C={second<=9}
语句O={timeInfo+=hour+":
"}
语句P={timeInfo+=""+minute+":
"}
语句Q={timeInfo+=second}
语句X={timeInfo+="0"+hour+":
"}
语句Y={timeInfo+="0"+minute+":
"}
语句Z={timeInfo="0"+second}
1
F2
3T
5T
F6
7T
图1
1
F2
3T
5T
F6
7T
图2
四、基于逻辑覆盖方法的测试用例设计
4.1判定覆盖
判定覆盖:
设计若干个测试用例,运行所测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
根据判定覆盖的思想,就是要设计相应的测试用例,以使判定A、B、C分别为真和假,如表1第一个用例覆盖了A=T,B=T,C=T,第二个用例覆盖了A=F,B=F,C=F,从而达到判定覆盖。
如下为判定覆盖的测试用例表1。
测试用例
取值条件
具体取值条件
判定条件
输入:
时=5,分=5,秒=5
输出:
05:
05:
05
T1,T2,T3
hour<=9,minute<=9,second<=9
A=T,B=T,C=T
输入:
时=10,分=10,秒=10
输出:
10:
10:
10
F1,F2,F3
hour>9,minute>9,second>9
A=F,B=F,C=F
表1
4.2条件覆盖
条件覆盖:
设计若干个测试用例,运行所测试程序,使得程序中每个判断的每个条件的取值至少一次。
对于第一个判定条件A,可将其分解成以下条件:
条件hour<=9:
取真时为T1,取假时为F1。
对于第二个判定条件B,可分解成:
条件minute<=9:
取真时为T2,取假时为F2。
对于第三个判定条件C,可分解成:
条件second<=9:
取真时为T3,取假时为F3。
根据条件覆盖的思想,选择T1,T2,T3和F1,F2,F3组合,覆盖了3个条件。
如下为条件覆盖的测试用例表2。
测试用例
取值条件
具体取值条件
输入:
时=6,分=6,秒=6
输出:
06:
06:
06
T1,T2,T3
hour<=9,minute<=9,second<=9
输入:
时=11,分=11,秒=11
输出:
11:
11:
11
F1,F2,F3
hour>9,minute>9,second>9
表2
4.3判定-条件覆盖
判定-条件覆盖:
设计足够的测试用例,使得判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。
即要求各个判断的所有可能的条件取值组合至少执行一次。
判定覆盖的基本思路即至少保证A、B、C取真和取假各一次,并且要保证6个条件取值(T1,F1,T2,F2,T3,F3)也至少被执行一次。
如下为判定-条件覆盖的测试用例表3。
测试用例
取值条件
具体取值条件
判定条件
输入:
时=7,分=7,秒=7
输出:
07:
07:
07
T1,T2,T3
hour<=9,minute<=9,second<=9
A=T,B=T,C=T
输入:
时=12,分=12,秒=12
输出:
12:
12:
12
F1,F2,F3
hour>9,minute>9,second>9
A=F,B=F,C=F
表3
4.4条件组合覆盖
条件组合覆盖:
设计足够的测试用例,运行所测试程序,使得每个判断的所有可能的条件取值组合至少执行一次。
即A、B、C每个条件都出现“真”、“假”两种结果,并且让这些结果的所有可能的组合都至少出现一次。
按照条件组合覆盖的思想,设计存在的6种组合条件示例如表4所示。
组合编号
覆盖条件取值
判定条件取值
判定-条件组合
1
T1
A=T
hour<=9,A取真
2
F1
A=F
hour>9,A取假
3
T2
B=T
minute<=9,B取真
4
F2
B=F
minute>9,B取假
5
T3
C=T
second<=9,C取真
6
F3
C=F
second>9,C取假
表4
由以上6种组合条件,设计能覆盖所有这些组合的测试用例,如表5所示。
测试用例
覆盖条件
覆盖路径
覆盖组合
输入:
时=8,分=8,秒=8
输出:
08:
08:
08
T1,T2,T3
P1(1-3-5-7)
1,3,5
输入:
时=20,分=20,秒=20
输出:
20:
20:
20
F1,F2,F3
P2(1-2-4-6)
2,4,6
表5
五、程序源代码
packagetest4;
importjava.awt.*;
importjavax.swing.*;
importjava.util.*;
importjava.text.SimpleDateFormat;
importjava.awt.event.*;
publicclassjishiqi_2extendsJFrameimplementsRunnable,ActionListener
{
JPaneljp1,jp2;
JLabeljlb1,jlb2,jlb3;
JButtonjb1,jb2,jb3,jb4,jb5,jb6;
JButtonjb11,jb22;
JTextAreajta1,jta2;
JTextFieldjtf1,jtf2,jtf3,jtf4,jtf5,jtf6,jtf7,jtf8;
Threadclock;
JScrollPanejsp;
publicjishiqi_2()
{
//对象的实例化
jp1=newJPanel();
jp2=newJPanel();
jlb1=newJLabel("NowTime");
jlb1.setFont(newFont("楷体",Font.BOLD,20));
jlb1.setForeground(Color.RED);
jlb2=newJLabel("record1");
jlb2.setFont(newFont("楷体",Font.BOLD,11));
jlb2.setForeground(Color.RED);
jb1=newJButton("start");
jb1.setFont(newFont("楷体",Font.BOLD,10));
jb1.setForeground(Color.RED);
jb2=newJButton("stop");
jb2.setFont(newFont("楷体",Font.BOLD,10));
jb2.setForeground(Color.RED);
jb3=newJButton("usetime");
jb3.setFont(newFont("楷体",Font.BOLD,10));
jb3.setForeground(Color.RED);
jb11=newJButton("reset");
jb11.setFont(newFont("楷体",Font.BOLD,13));
jb11.setForeground(Color.RED);
jb11.setBounds(280,58,10,15);
jb22=newJButton("sort");
jb22.setFont(newFont("楷体",Font.BOLD,13));
jb22.setForeground(Color.RED);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jlb3=newJLabel("record2");
jlb3.setFont(newFont("楷体",Font.BOLD,11));
jlb3.setForeground(Color.RED);
jb4=newJButton("start");
jb4.setFont(newFont("楷体",Font.BOLD,10));
jb4.setForeground(Color.RED);
jb5=newJButton("stop");
jb5.setFont(newFont("楷体",Font.BOLD,10));
jb5.setForeground(Color.RED);
jb6=newJButton("usetime");
jb6.setFont(newFont("楷体",Font.BOLD,10));
jb6.setForeground(Color.RED);
//注册监听
jb4.addActionListener(this);
jb5.addActionListener(this);
jb6.addActionListener(this);
jb11.addActionListener(this);
jb22.addActionListener(this);
//实例化对象
jta1=newJTextArea("",2,10);
jtf1=newJTextField("",5);
jtf2=newJTextField("",5);
jtf3=newJTextField("",2);
jtf4=newJTextField("",5);
jtf5=newJTextField("",5);
jtf6=newJTextField("",2);
jtf7=newJTextField("S",2);
jtf8=newJTextField("S",2);
jtf7.setFont(newFont("楷体",Font.BOLD,10));
jtf7.setForeground(Color.RED);
jtf8.setFont(newFont("楷体",Font.BOLD,10));
jtf8.setForeground(Color.RED);
jta1.setBackground(Color.black);
jta1.setBorder(BorderFactory.createLineBorder(Color.red));
jta2=newJTextArea("记录排序:
",2,8);
jta2.setEditable(false);
jta2.setFont(newFont("楷体",Font.BOLD,17));
jta2.setBackground(Color.red);
jp2.setBackground(Color.black);
jsp=newJScrollPane();
jsp.setViewportView(jta2);
//将各组件加入面板容器中
jp1.add(jlb1);
jp1.add(jta1);
jp1.add(jb11);
jp1.add(jb22);
jp2.add(jlb2);
jp2.add(jb1);
jp2.add(jtf1);
jp2.add(jb2);
jp2.add(jtf2);
jp2.add(jb3);
jp2.add(jtf3);
jp2.add(jtf7);
jp2.add(jlb3);
jp2.add(jb4);
jp2.add(jtf4);
jp2.add(jb5);
jp2.add(jtf5);
jp2.add(jb6);
jp2.add(jtf6);
jp2.add(jtf8);
//将个容器加入JFrame这个容器中
this.add(jp1);
this.add(jp2);
this.add(jsp);
this.add(jp2);
//设置界面管理布局
jp1.setBackground(Color.black);
this.setBackground(Color.black);
BorderLayoutborder=newBorderLayout();
this.setLayout(border);
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.CENTER);
this.add(jsp,BorderLayout.EAST);
this.setTitle("多功能计时器");
start();
this.setSize(580,200);
this.setLocation(200,150);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoidpaint(Graphicsg)//绘画时间
{
Graphics2Dg2=(Graphics2D)g;
super.paint(g2);
Calendarnow=newGregorianCalendar();
StringtimeInfo="";
inthour=now.get(Calendar.HOUR_OF_DAY);
intminute=now.get(Calendar.MINUTE);
intsecond=now.get(Calendar.SECOND);
if(hour<=9)
{
timeInfo+="0"+hour+":
";
}
else
{
timeInfo+=hour+":
";
}
if(minute<=9)
{
timeInfo+="0"+minute+":
";
}
else
{
timeInfo+=minute+":
";
}
if(second<=9)
{
timeInfo+="0"+second;
}
else
{
timeInfo+=second;
}
g2.setFont(newFont("楷体",Font.BOLD,20));
g2.setColor(Color.red);
g2.drawString(timeInfo,200,58);
}
publicvoidstart()
{
if(clock==null)
{
clock=newThread(this);
clock.start();
}
}
publicvoidrun()
{
while(clock!
=null)
{
repaint();
try
{
Thread.sleep(1000);
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
publicvoidactionPerformed(ActionEvente)//事件处理机制
{
Calendarnow=newGregorianCalendar();
StringtimeInfo="";
inthour=now.get(Calendar.HOUR_OF_DAY);
intminute=now.get(Calendar.MINUTE);
intsecond=now.get(Calendar.SECOND);
if(hour<=9)
{
timeInfo+="0"+hour+":
";
}
else
{
timeInfo+=hour+":
";
}
if(minute<=9)
{
timeInfo+="0"+minute+":
";
}
else
{
timeInfo+=""+minute+":
";
}
if(second<=9)
{
timeInfo="0"+second;
}
else
{
timeInfo+=second;
}
if(e.getSource()==jb1)
{
jtf1.setText(timeInfo+"");
jtf1.setFont(newFont("楷体",Font.BOLD,11));
jtf1.setForeground(Color.RED);
}
elseif(e.getSource()==jb2)
{
jtf2.setText(timeInfo+"");
jtf2.setFont(newFont("楷体",Font.BOLD,11));
jtf2.setForeground(Color.RED);
}
elseif(e.getSource()==jb3)
{
Stringd1=jtf1.getText();
Stringd2=jtf2.getText();
SimpleDateFormatsdf=newSimpleDateFormat("hh:
mm:
ss");
try
{
longm=(sdf.parse(d2).getTime())-(sdf.parse(d1).getTime());
longres1;
res1=m/1000;
jtf3.setText(""+res1);
jtf3.setFont(newFont("楷体",Font.BOLD,11));
jtf3.setForeground(Color.RED);
}
catch(Exceptione2)
{
e2.printStackTrace();
}
}
elseif(e.getSource()==jb4)
{
jtf4.setText(timeInfo+"");
jtf4.setFont(newFont("楷体",Font.BOLD,11));
jtf4.setForeground(Color.RED);
}
elseif(e.getSource()==jb5)
{
jtf5.setText(timeInfo+"");
jtf5.setFont(newFont("楷体",Font.BOLD,11));
jtf5.setForeground(Color.RED);
}
elseif(e.getSource()==jb6)
{
Stringd3=jtf4.getText();
Stringd4=jtf5.getText();
SimpleDateFormatsdf=newSimpleDateFormat("hh:
mm:
ss");
try
{
longm=(sdf.parse(d4).getTime())-(sdf.parse(d3).getTime());
longres2;
res2=m/1000;
jtf6.setText(""+res2);
jtf6.setFont(newFont("楷体",Font.BOLD,11));
jtf6.setForeground(Color.RED);
}
catch(Exceptione3)
{
e3.printStackTrace();
}
}
elseif(e.getSource()==jb11)
{
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");
jtf4.setText("");
jtf5.setText("");
jtf6.setText("");
}
elseif(e.getSource()==jb22)
{
intnum1,num2;
num1=Integer.par
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 逻辑 覆盖 方法 测试 设计 执行