软件测试实践报告
姓名:指导老师:
由安博测试空间技术中心/提供问题描述:
完成一个银行贷款利息计算的程序,具体计算方式如下:贷款利息=贷款金额利率
不同基本点下的利率不同,基本点为13及以上的年利率为5.56%,基本点为13以下的年利率为6.05%
基本点具体计算情况如下:
输入范围:1、年龄:输入为整数,有效范围为20-99
2、信用度:输入为整数,有效范围1-10
3、房产所有情况:有效值只能取“property”(有房产)“nonproperty”(无房产)
源代码:XXX.;XXX.;
publicclassloanFee{
publicdoubleloanStype(intloanPoint){/根据基本点决定利率}publicintloanPoint(intloanAge,intloanCre,intloanProperty){/计算基本点}publicintloanAge(intage){/根据年龄判断点数intloanAge;if(age<20||age>99){}if(age>=20age<=32){/年龄20-32基本点为2}else{loanAge=2;loanAge=-20;returnloanAge;intloanPoint;loanPoint=loanAge+loanCre+loanProperty;returnloanPoint;doubleloanRate;if(loanPoint>=13){}else{}returnloanRate;loanRate=0.0605;loanRate=0.0556;
}}if(age>=33age<=50){/年龄33-50基本点为6}else{/年龄在50以上基本点为4}loanAge=4;loanAge=6;returnloanAge;publicintloanCre(Intcredit){/根据信用度判断点数}publicintloanProperty(Stringhousing){/根据房产所有状况判断点数}publicdoublefinalResult(intage,intcredit,Stringhousing,doubleamount){doubleresult;intloanProperty;if(!XXX("property")!XXX("nonproperty")){}if(XXX("property")){}else{}returnloanProperty;loanProperty=3;loanProperty=5;loanProperty=-20;returnloanProperty;intloanCre;if(credit<1||credit>10){}if(credit>=1credit<=5){}else{}returnloanCre;loanCre=5;loanCre=3;loanCre=-20;returnloanCre;
}intpoint=loanPoint(loanAge(age),loanCre(credit),loanProperty(housing);if(point<-1){}doublestype=loanStype(point);result=amountstype;/贷款金额利率returnresult;XXX.print("Inputerror!");XXX(0);privateintage;privateintloanCre;privateStringhousing;privatedoubleamount;publicstaticvoidmain(String[]args)throwsFileNotFoundE_ceptionScannerin=newScanner(newFile("XXX"));intinde_;loanFeefee=newloanFee();while(XXXine()){inde_=XXX();XXX=XXX();XXX.ne_t();XXX.ne_t();XXX.ne_tDouble();
XXX.println(inde_+"TheLoanfee="+
XXX(XXX,XXX,
}}}XXX,XXX));
1.黑盒测试:
考虑到变量之间主要采用物理量以及它们之间的依赖关系,决定采用弱健壮等价类测试以及决策表进行测试。
输入变量等价类划分:
有效等价类:
年龄:A1={20<=age<=32}
A2={33<=age<=50}
A3={age>50}
信用度:C1={1<=credit<=5}
C2={6<=credit<=10}
房产所有情况:P1={housing=property}
P2={housing=nonproverty}
无效等价类:
年龄:A4={age<20}
A5={age>=100}
信用度:C3={credit<1}
C4={credit>10}
房产所有情况:P3={housing!=规定字符串}
1、弱健壮等价类测试:
2、基于决策表的测试:
基于决策表的用例,由决策表共得7个
2、白盒测试:
采用DD-路径图和基路径来完成测试1、程序图:(见附表)
2、DD-路径图:(见附表)
主要代码段:
1publicdoubleloanStype(intloanPoint){/根据基本点决定利率23doubleloanRate;if(loanPoint>=13){}}loanRate=0.0556;else{loanRate=0.0605;4returnloanRate;}5publicintloanPoint(intloanAge,intloanCre,intloanProperty,intinsuFosterNum){/计算基本点intloanPoint;6loanPoint=loanAge+loanCre+loanProperty;7}returnloanPoint;8publicintloanAge(intage){/根据年龄判断点数intloanAge;9if(age<20||age>99){loanAge=-20;returnloanAge;
10else{
11if(age>=20age<=32){/年龄20-32基本点为2
}loanAge=2;12else{13if(age>=33age<=50){/年龄33-50基本点为6}}loanAge=6;14else{/年龄在50以上基本点为4loanAge=4;}15returnloanAge;}16publicintloanCre(Intcredit){/根据信用度判断点数
intloanCre;17if(credit<1||credit>10){loanCre=-20;returnloanCre;}18else{19if(credit>=1credit<=5){}}loanCre=3;20else{loanCre=5;21returnloanCre;}22publicintloanProperty(Stringhousing){/根据房产所有状况判断点数intloanProperty;23if(!XXX("property")!XXX("nonproperty")){loanProperty=-20;returnloanProperty;}
24else{
25if(XXX("property")){loanProperty=5;
}26else{loanProperty=3;}27returnloanProperty;}28publicdoublefinalResult(intage,intcredit,Stringhousing,doubleamount){doubleresult;29intpoint=loanPoint(loanAge(age),loanCre(credit),loanProperty(housing);30if(point<-1){XXX.print("Inputerror!");32}XXX(0);33doublestype=loanStype(point);34result=amountstype;/贷款金额利率35returnresult;
3、基路径
可行的基路径共有8条:
基于基路径生成的用例:
3、Junit测试:
XXX.TestCase;publicclassTestSamplee_tendsTestCase{/检测年龄/
publicvoidtestLoanAge(){
}assertEquals(6,XXX(37));
/检测信用度/
publicvoidtestLoanCre(){
assertEquals(5,XXX(8));}
/检测房产所有情况/
publicvoidtestLoanProperty(){
}}assertEquals(3,XXX("nonproperty"));
心得体会:
在没有真正意义上接触到软件测试这门技术之前我对于软件测试在认识上一直存在一个误区,认为所谓软件测试就是在软件设计过程中完成代码检查等扫尾工作。然而真正学习了软件测试课程之后才明白我对软件测试的定义不过是其功能的九牛一毛。软件测试固然是要对已开发完成的软件进行纠察,但它拥有一套独立的体系,应当是与软件开发并行存在的。可以说,要想创造出一款出色的软件,好的软件设计和完善的软件测试过程是缺一不可的。
自己在这份报告中设计了一个很简单的程序,程序的主体在于判断。通过大量的if-else条件选择语句完成对参与最终计算的数据的选择。而其中最可能出错的部分就是逻辑选择控制以及数据的输入上。因此我在测试中也主要针对这两方面展开了测试。虽然程序整体上来讲比较简单,数据的定义域设计地也并不复杂,但还是会产生各种各样的bug,有些bug被一时疏忽忽略了的,而一些则是隐藏在逻辑中的,通过黑盒和白盒测试方法设计出来的测试用例可以从这两个方面对整个程序展开非常完备的测试。这是以往我们所用的静态检查代码的方式所力有未逮的。
虽然利用系统的软件测试方法对程序进行测试可以取得非常好的效果,但是由于是第一次使用,感觉理论上所理解的和实际使用上还是有比较大的差异。很多东西在课堂上感觉理解了,然而真正在进行操作的时候却发现自己理解的实际上存在一定的误差,而且并不够深入。
尤其是在测试最后构建从未接触过的Junit测试框架时,感觉还有较大的难度的。不仅如此,自己编写的代码也毕竟不同于课件中给出的实例,编写的不规范亦或是程序功能的选择不当都无形中为测试工作增加了一定难度。像是我刚开始选择的完成输入转换的题目就因为功能过于简单,输入变量过于单一而几乎没有办法进行多样化的测试。通过自己对于课件的反复分析,对测试方法的几番修改,我可以明显感觉到自己对于黑盒、白盒测试部分的理解更为深入,对知识点的贯彻也更为牢固了。所以对我而言,这次的测试不仅仅是对于自己动手能力的考察,更是在知识点上进行查漏补缺的一个过程。我想,这对于我更深刻的理解软件测试技术有极大的推动作用。唯一令我感到遗憾的是我们现阶段的时间及技术有限,在这次测试中主要只进行了单元测试,而没有办法参与到集成测试或是系统测试的过程中去。这次的测试给了我很大的鞭策启发,让我充分意识到了软件测试工作的重要性。我也会在今后的学习中努力将在软件测试课程中学到的方法付诸实践。培养良好的编程素质,争取早日成为一名合格的程序员。
因篇幅问题不能全部显示,请点此查看更多更全内容