基于逻辑覆盖方法的测试用例设计与执行doc.docx
- 文档编号:8364241
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:19
- 大小:57.13KB
基于逻辑覆盖方法的测试用例设计与执行doc.docx
《基于逻辑覆盖方法的测试用例设计与执行doc.docx》由会员分享,可在线阅读,更多相关《基于逻辑覆盖方法的测试用例设计与执行doc.docx(19页珍藏版)》请在冰豆网上搜索。
基于逻辑覆盖方法的测试用例设计与执行doc
脂无r修沆
基于逻辑覆盖方法的测试用例设计
与执行
题目:
多功能电子计时器
课程名称:
软件测试方法和技术
院系:
XX学院
专业班级:
mx
组号:
m
小组成员:
XXXXXXXXX
实验报告成绩:
指导教师:
XXX
2017年X月X日
一、被测程序介绍3
1.1程序背景3
1.2程序功能3
二、被测程序主要测试代码3
三、测试代码的程序流程图4
3.1程序流程图4
四、基于逻辑覆盖方法的测试用例设计7
4.1判定覆盖7
4.2条件覆盖7
4.3判定.条件覆盖7
4.4条件组合覆盖8
五、程序源代码8
六、程序运行截图16
七、实验总结16
参考文献17
一、被测程序介绍
LJL住ATR早
该程序是一个图形界面的简单的java小时钟嵌套一个可以排序的多功能秒表,具有良好的、简洁的界面。
它是图形界面、线程、流与文件等技术的综合运用,其界面主要采用了java,awt包,javax.swing等。
程序实现了电了时钟的基本功能。
可以从电脑上获得准确的背景时间,其时间精确到秒。
时钟的界面静中带动,秒表跳动。
使用人员能快捷简单地进行操作秒表,即时准确地计算时间,对人们的生活有一定的帮助。
1.2程序功能
功能1
获得准确的背景时间,这时小时钟最基本的功能。
功能2
按下“start”键,开始计时,秒表跳动。
功能3
按下“stop”键,停止计时,秒表的时间停留在按下“停止”键的那一刻。
功能4
按下“sort”键,按历时最短的顺序进行排序。
功能5
按下“reset”键,秒表归零。
二、被测程序主要测试代码
if(hour<=9)
{
timelnfo+=zz0//+hour+//:
}
else
{
timelnfo+=hour+z,:
";
if(minute〈=9)timelnfo+=〃O〃+minute+〃:
〃;
)
else
{
timeInfo+=/,,,+minute+z/:
";
}
if(second〈二9)
{
timeTnfo=〃0〃+second;
}
else
(
timelnfo+^second;
三、测试代码的程序流程图
3.1程序流程图
根据上述的程序代码,绘制如图1所示的程序流程图,为了方便分析测试用例,将图1简化为图2,其中:
条件A=(hour<=9}
条件B={minute<=9}
条件C={second<=9}
语句O=(timelnfo+=hour+n:
n)
语句P={timeInfo+=””+minute+”:
”}
语句Q={timelnfo+=second}
语句X={timelnfo+=”0”+hour+”:
”}
语句Y=(timeInfo+=,'0,,+minute+,,:
M}
语句Z={timelnfo="0"+second)
开始
输出timeinfo
四、基于逻辑覆盖方法的测试用例设计
4.1判定覆盖
判定覆盖:
设计若干个测试用例,运行所测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
根据判定覆盖的思想,就是要设计相应的测试用例,以使判定A、B、C分别为真和假,如表1第一个用例覆盖了A=T,B=T,C=T,第二个用例覆盖了A=F,B=F,C=F,从而达到判定覆盖。
如下为判定覆盖的测试用例表lo
测试用例
取值条件
具体取值条件
判定条件
输入:
时=5,分=5渺=5输出:
05:
05:
05
T1,T2,T3
hour<=9uninute<=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个条件取值(Tl,Fl,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
Pl(l・3・5・7)
1,3,5
输入:
时二20,分二20,秒二20输出:
20:
20:
20
F1,F2,F3
P2(l-2-4-6)
2,4,6
表5
packagetest4;
importjava.awt.*;
importjavax.swing.*;
importjava.util.*;
importjava.text.SimpleDateFormat;
importjava.awt.event.*;
publicclassjishiqi_2extendsJFrameimplementsRunnable,ActionListener
JPaneljplJp2;
JLabeljlbl,jlb2,jlb3;
JButtonjb1,jb2,jb3,jb4,jb5,jb6;
JButtonjbll,jb22;
JTextAreajtal,jta2;
JTextFieldjtf1jtf2,jtf3,jtf4,jtf5Jtf6,jtf7jtf8;
Threadclock;
JScrollPanejsp;
publicjishiqi_2()
{
〃对象的实例化
jpl=newJPanel();
jp2=newJPanel();
jlbl=newJLabel("NowTime");
jib1.setFont(newFont("楷体",Font.BOLD,20));
jib1.setForeground(Color.RED);
jlb2=newJLabel("recordln);
jlb2.setFont(newFont("楷体",Font.BOLD,l1));
jlb2.setForeground(Co!
or.RED);
jbl=newJButton(HstartH);
jbl.setFont(newFont("楷体'Font.BOLD,10));
jb1.setForeground(Color.RED);
jb2二newJButton(Hstopn);
jb2.setFont(newFont("楷体”,Font.BOLD,10));
jb2.setForeground(Color.RED);
jb3=newJButton("usetime");
jb3.setFont(newFont。
楷体”,Font.BOLD,10));
jb3.setForeground(Color.RED);
jbll=newJButton("resetn);
jbll.setFont(newFont("楷体”,Font.BOLD,13));
jbl1.setForeground(Color.RED);
jb11.setBounds(280,58,10,15);
jb22=newJButton("sortn);
jb22.setFont(newFont。
楷体二Font.BOLD,13));
jb22.setForeground(Color.RED);
jbl.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jlb3=newJLabel(Hrecord2");
jlb3.setFont(newFont("楷体",Font.BOLD,l1));
jlb3.setForeground(Co!
or.RED);
jb4=newJButton(HstartH);
jb4.setFont(newFont("楷体”,Font.BOLD,10));
jb4.setForeground(Color.RED);
jb5=newJButton(nstop");
jb5.setFont(newFont("楷体”,Font.BOLD,10));jb5.setForeground(ColorRED);
jb6=newJButton(Husetime”);
jb6.setFont(newFont(u楷体”,Font.BOLD,10));
jb6.setForeground(Color.RED);
〃注册监听
jb4.addActionListener(this);
jb5.addActionListener(this);
jb6.addActionListener(this);
jbll.addActionListener(this);
jb22.addActionListener(this);
〃实例化对象
jtal=newJTextArea("”,2,10);
jtfl=newJTextField(””,5);
jtf2=newJTextField(n”,5);
jtf3=newJTextField(n”,2);
jtf4=newJTextField("n,5);
jtf5=newJTextField(Hn,5);
jtf6=newJTextField(H”,2);
jtf7=newJTextField(”S”,2);
jtf8=newJTextFieId(”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);
jtal.setBorder(BorderFactory.createLineBorder(Color.red));
jta2=newJTextArea(n记录排序:
”,2,8);
jta2.setEditable(false);
jta2.setFont(newFont(H楷体H,Font.BOLD,l7));
jta2.setBackground(Color.red);
jp2.setBackground(Color.black);
jsp=newJScrollPane();
jsp.setViewportView(jta2);
〃将各组件加入面板容器中
jpl.add(jlbl);
jpl.add(jtal);
jpl.add(jbll);
jpl.add(jb22);
jp2.add(jlb2);
jp2.add(jbl);
jp2.add(jtfl);
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(jpl);
this.add(jp2);
this.add(jsp);
this.add(jp2);
〃设置界面管理布局
jp1-setBackground(Color.black);
this.setBackground(Color.black);
BorderLayoutbordei-newBorderLayout();
this.setLayout(border);
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.CENTER);
this-add(jsp,BorderLayout.EAST);
this.setTitle(H多功能计时器,
startQ;
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)
{
timelnfo+=”0”+hour+”:
”;
}
else
{
timelnfo+=hour+'*:
";
}
if(minute<=9)
{
timelnfo+二”0”+minute+”:
”;
}
else
{
timelnfb+=minute+n:
";
}
if(second<=9)
{
timelnfo+=u0n+second;
}
else
{
timelnfo+=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)
{
repaintQ;
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)
{
timelnfo+=n0"+hour+n:
";
}
else
{
timelnfo+=hour+n:
”;
}
if(minute<=9)
timelnfo+二”0”+minute+”:
”;
else
timeInfo+=””+minute+":
”;
}
if(second<=9)
{
timelnfo="0n+second;
}
else
{
timelnfo+=second;
}
if(e.getSource()==jbl)
{
jtf1.setText(timeInfo+"");
jtf1.setFont(newFont("楷体H,Font.BOLD,l1));
jtf1.setForeground(Color.RED);
}
elseif(e.getSource()==jb2)
{
jtf2.setText(timeInfo+,H,);
jtf2.setFont(newFont("楷体",Font.BOLD,11));
jtf2.setForeground(Color.RED);
}
elseif(e.getSource()==jb3)
{
Stringdl=jtfl.getText();
Stringd2=jtf2.getText();
SimpleDateFormatsdf=newSimpleDateFormat(nhh:
mm:
ssn);
try
{
longm=(sdf.parse(d2).getTime())-(sdf.parse(dl).getTime());
longres1;
resl=m/1000;
jtf3.setText("''+res1);
jtf3.setFont(newFont("楷体二Font.BOLD」1));
jtf3.setForeground(Color.RED);
}
catch(Exceptione2)
{
e2.printStackTrace();
elseif(e.getSource()==jb4)
{
jtf4.setText(timeInfo+,H,);
jtf4.setFont(newFont("楷体",Font.BOLDJ1));
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=newSimpleDateFormatC'hh:
mm:
ss");
try
{
longm=(sdf.parse(d4).getTime())-(sdf.parse(d3).getTime());
longres2;
res2=m/1000;
jtf6.setText(n,'+res2);
jtf6.setFont(newFont(n楷体H,Font.BOLD,l1));
jtf6.setForeground(Color.RED);
catch(Exceptione3)
{
e3.printstackTrace();
}
}
elseif(e.getSource()==jbl1)
{
jtfl.setText(,n,);
jtf2.setText(,,n);
jtf3.setText(,n,);
jtf4.setText(nn);
jtf5.setText(nn);
jtf6.setText(n");
}
elseif(e.getSource()==jb22)
intnuml,num2;
numl=Integer.parseInt(jtf3.getText());
num2=Integer.parseInt(jtf6.getText());
if(numl<=num2)
jta2.setText(n记录排序:
\r\nH+nrecordl”+”\r\n"+”record2”);
jta2.setFont(newFont("楷体二Font.BOLD,17));
jta2.setForeground(Color.black);
}
else
{
jta2.setText(n记录排序:
\r\n"+"record2”+"\r\n"+"recordl");
jta2.setFont(newFont("楷体二Font.BOLD,17));
jta2.setForeground(Color.black);
}
}
}
publicstaticvoidmain(String[largs)
{
jishiqi_2jsq=newjishiqi_2();
}
六、程序运行截图
国多功能计时SS
七、实验总结
通过这次基于逻辑覆盖方法的测试用例设计与执行的测
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 逻辑 覆盖 方法 测试 设计 执行 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)