temp=score[i];
}
System.out.println("成绩最小值为:
"+temp);
//求方差
doublesAve=0;//平均值
doublesVar=0;//方差
intm=score.length;
for(intx:
score){
sAve+=x;
}
sAve/=m;//求得平均值
for(intx:
score){
sVar+=(x-sAve)*(x-sAve);
}
sVar=sVar/m;
System.out.println("成绩的方差为:
"+sVar);
//求标准差
doublesStan=Math.sqrt(sVar);
System.out.println("成绩的标准差为:
"+sStan);
}
intadd(inta,intb){
returna+b;
}
}
TestClass.java
packageExperiment2;
importorg.junit.Assert;
importorg.junit.Test;
publicclassTestClass{
Ex2a=newEx2();
@Test
publicvoidtesta(){
a.calculate(10,5);
}
@Test
publicvoidtestb(){
a.multipleUtility(newint[]{55,88,65,98});
}
@Test
publicvoidtestc(){
intb=a.add(8,10);
//Assert.assertEquals("加法出错了",b,19);
}
}
实验体会
朱青(16046233):
本次的实验使用了Assert方法,通过对Assert.assertEquals方法的使用,学会了当一个方法语法没问题但是逻辑有问题时输出提示语句。
Assert相当于我们给定一个我们认为输出的值,如果返回值与我们认定值不同,则表示逻辑错误,接着输出我们定义好的错误语句,intb=a.add(8,10);Assert.assertEquals("加法出错了",b,19)就是一个很好的例子,当b返回值不是19时,说明程序有问题,于是Junit会提示“加法出错了”。
另外新学会了一种不用更改原程序而测试方法的办法,另起一个方法,在该方法头部注解到@Test,然后在方法体内调用所需要测试的方法,前提是记得先声明一个类的实例,以实例来调用方法,除非是static方法。
朱振宇(16046234):
在本次试验中,我对于白盒测试有了更加深刻和直观的认识。
对于判定覆盖,要注意条件为或的情况;对于条件覆盖测试,保证每个条件真假都取一次的用例可以有很多种,但是不一定保证所有的判定被覆盖,这可能会导致程序的一些逻辑错误无法被发现。
杜欣(16046235):
郭昂(16046236):
本次实验是对上次实验课写的代码进行测试,通过本次实验使我了解到软件测试的便捷性的重要性,让我对软件测试有了初步的了解
郑森及(16046237):
通过控制流图,成功的利用判定覆盖进行测试,对判定覆盖的过程更加熟悉
实验3(验证性)白盒测试(基本路径测试)
实验目的
1.选取一个模块,要求绘制出程序的控制流图。
2.采用判定覆盖方法设计测试用例,执行测试用例,并分析测试结果。
3.可以对代码进行静态检查和动态测试。
实验内容
实验前需熟悉白盒测试及基本路径覆盖的概念,了解如何绘制程序的流程图和如何设计出测试用例。
比较基本路径测试和判断覆盖的区别。
实验步骤及结果
TestSuite和TestCase都是继承自Test接口,同时,TestSuite的建立和使用依赖于TestCase实例,TestCase继承自Assert类,因此TestCase中可以直接使用Assert中的相关方法。
一个简单的Demo:
importjunit.framework.TestCase;
publicclassTestDemoextendsTestCase{
@Override
protectedvoidsetUp()throwsException{
//TODOAuto-generatedmethodstub
super.setUp();
System.out.println("setUp,hashCode="+hashCode());
}
@Override
protectedvoidtearDown()throwsException{
//TODOAuto-generatedmethodstub
super.tearDown();
System.out.println("tearDown,hashCode="+hashCode());
}
publicvoidtestMethod1(){
System.out.println("testMethod1,hashCode="+hashCode());
}
publicvoidtestMethod2(){
System.out.println("testMethod2,hashCode="+hashCode());
}
}
一个简单的例子了解一下TestSuite:
importjunit.framework.Test;
importjunit.framework.TestCase;
importjunit.framework.TestSuite;
publicclassTestSuiteDemoextendsTestSuite{
publicstaticTestsuite(){
//创建TestSuite对象
TestSuitesuite=newTestSuite();
//为TestSuite添加一个测试用例集合,参数为:
Class
extendsTestCase>testClass
//通过参数可以知道,其实该参数就是TestCase的子类
suite.addTestSuite(TestDemo.class);
//创建具体的测试用例
Testtest=TestSuite.createTest(TestDemo.class,"testMethod1");
//添加一个具体的测试用例
suite.addTest(test);
returnsuite;
}
}
实验体会
朱青(16046233):
TestCase和TestSuite类是JUNIT中比较重要的两个类,TestCase和TestSuite可以认为是JAVA的合成设计模式在单元测试中的应用,其实即便我们没有自己声明和创建TestSuite的子类,而且运行的TestCase子类的过程中也会创建TestSuite类,并将要执行的TestCase子类的实例对象添加到TestSuite中去执行。
朱振宇(16046234):
本次试验中,我了解到基本路径测试是在程序控制流程的基础上,通过分析控制结构,导出基本可执行路径集合,从而设计测试用例。
杜欣(16046235):
郭昂(16046236):
本次实验对黑盒测试进行的上机实验,本次实验学会了实际流程图和实际测试用例让我对软件测试有了新的认识。
郑森及(16046237):
熟悉了路径覆盖的过程,路径覆盖是要求覆盖程序中所有可能的路径,判断覆盖是使得程序中每个判断的取真分支和取假分支至少经历一次
实验4(验证性)黑盒测试(等价类划分)
实验目的
1.理解黑盒测试中等价类划分的基本原理。
2.能够根据相应的方法设计测试用例。
3.利用设计的测试用例测试编写的程序。
实验内容
1.实验前需熟悉黑盒测试及等价类划分的概念,了解如何划分等价类和如何设计出测试用例。
2.对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
实验步骤及结果
等价类是指某个输入域的一个特定的子集合,在该子集合中各个输入数据对于揭露程序中的错误都是等效的,也就是说,如果用这个等价类中的代表值作为测试用例未发现程序错误,那么该类中其他数据(测试用例)也不会发现程序中的错误[1]。
有效等价类:
输入满足程序输入的要求(来自规格说明书),通俗的说就是正确的输入。
无效等价类:
输入不满足程序输入的要求,即异常输入,需要系统对此有一定的容错性。
有一个员工管理系统,现对其录入模块进行测试。
其中,人员信息包括:
编号:
系统自动编号,无需手动录入;
姓名:
必须有,要求为不超过5个汉字;
身份证:
必须有,长度为15或18位置,末尾为数字或X,注意大小写;
邮箱:
要么为空白,输入必须包含@和.
年龄:
18-80之间的数字
住址:
可以空白
注意:
如果录入正确,则提示录入成功,如果录入错误,则提示数据不对。
输入:
编号(自动录入)
姓名
身份证号
邮箱
年龄
地址
划分等价类:
实验体会
朱青(16046233):
黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试。
而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试。
朱振宇(16046234):
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。
软件不能直接收合理的数据还要接受无效和不合理的数据,这样软件才有更高的可靠性。
杜欣(16046235):
郭昂(16046236):
本次实验是黑盒测试中等价类的划分,让我熟悉了黑盒测试的基本概念,让我学会了划分等价类和设计测试用例。
郑森及(16046237):
了解了等价类划分为按区间划分、按数值划分、按数值集合划分、按限制条件或规划划分、按处理方式划分。
并且按此设计测试用例
实验5(验证性)黑盒测试(边界值测试)
实验目的
1.理解黑盒测试中边界值测试的基本原理,
2.能够根据相应的方法设计测试用例。
3.利用设计的测试用例测试编写的程序。
实验内容
1.实验前需熟悉黑盒测试及等价类划分的概念,了解如何划分等价类和如何设计出测试用例。
2.对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。
实验步骤及结果
现有一个程序intCheckTel(char*rc,char*n)执行电话号码有效性检查功能,中国的固定电话号码由两部分组成。
这两部分的名称和内容分别是:
●地区码(rc):
以0开头的三位或者四位数字(包括0)。
●电话号码(n):
以非0、非1开头的七位或者八位数字。
对该程序运用健壮性边界条件法设计测试用例,并执行测试,撰写实验报告。
实验步骤:
1分析边界值。
最小值
最大值
最小值-1
最大值+1
地区码(3位)
000
999
-001
1000
地区码(4位)
0000
9999
-0001
10000
电话号码(7位)
2000000
9999999
1999999
10000000
电话号码(8位)
20000000
99999999
19999999
100000000
2运用健壮性边界条件法设计测试用例,得到测试用例表。
用例ID
测试数据
期望结果
地区码
电话号码
1
000
2235688
接受(有效)
2
0000
22347789
接受(有效)
3
087
2235688
接受(有效)
4
087
22347789
接受(有效)
5
0234
2235688
接受(有效)
6
0234
22347789
接受(有效)
7
04A3
2235688
拒绝(无效)
8
122
2235688
拒绝(无效)
9
1223
2235688
拒绝(无效)
10
02
2235688
拒绝(无效)
11
02234
2235688
拒绝(无效)
12
12
2235688
拒绝(无效)
13
12345
2235688
拒绝(无效)
14
078
2334AA4
拒绝(无效)
15
078
234567
拒绝(无效)
16
078
723467890
拒绝(无效)
17
078
0234455
拒绝(无效)
18
078
1234546
拒绝(无效)
③执行测试,填写软件缺陷报告
测试模块:
电话号码检查有效性
开发者:
罗永浩
测试员:
周宏伟
测试日期:
2016年5月9日
软件缺陷列表
缺陷ID
缺陷详细信息
Mistake1
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake2
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake3
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake4
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake5
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake6
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake7
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake8
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake9
地区码=000,电话号码=2235688,预期为有效,输出为
Mistake10
地区码=000,电话号码=2235688,预期为有效,输出为
测试代码:
publicclassCheckNumber{
/*
*执行电话号码有效性检查功能
*
*/
publicstaticvoidmain(String[]args){
while(true){
Scannerscan=newScanner(System.in);
System.out.println("请输入区号:
");
StringareaCode=scan.nextLine();
System.out.println("请输入电话号码:
");
intphoneCode=scan.nextInt();
checkAreaCode(areaCode);
checkPhoneCode(phoneCode);
System.out.println("-----------------------------------------------");
}
}
//检查区号
publicstaticvoidcheckAreaCode(StringareaCode){
if(areaCode.length()!
=3&&areaCode.length()!
=4){
System.out.println("提示信息1:
");
System.out.println("你输入的区号有误");
}
}
//检查电话号码
publicstaticvoidcheckPhoneCode(intphoneCode){
if(phoneCode>=