新版Junit单元测试实验报告.docx | 您所在的位置:网站首页 › 软件测试逻辑覆盖实验报告 › 新版Junit单元测试实验报告.docx |
新版Junit单元测试实验报告.docx 新版Junit单元测试实验报告 软件工程与计算Ⅰ 实 验 报 告 试验名称: Junit单元测试 试验分组号: 实验人: 陈燕珠 班级: H13软件工程 学号: _ 试验指导老师: 陈国明 试验场地: 花都校区试验楼709 试验时间: 、6、9 成绩: 试验四Junit单元测试 一、试验目 1.掌握白盒测试方法,并按单元测试要求设计测试用例。 2.能熟练应用junit测试工具进行单元测试。 3.进行代码覆盖检验。 二、试验要求 掌握系统测试基础原理,按试验内容及步骤完成操作,完成试验汇报,全部试验步骤均由每位学生独立完成,严禁剽窃她人试验结果。 依据白盒法设计测试用例,并撰写单元测试计划书。 依据每个测试用例,编写基础Junit单元测试脚本。 生成html格式代码覆盖测试汇报。 三、试验环境 主流PC机一套,windows操作系统eclipse开发平台。 四、原理知识 1.测试基础方法 黑盒测试和白盒测试 (1)黑盒测试(Black_Boxtesting) 黑盒测试把程序看作一个不能打开黑盒子,在完全不考虑程序内部结构和内部特征情况下、重视于测试软件功效性要求,测试者在程序接口处进行测试,只检验程序功效是否根据规格说明书要求正常使用,程序是否能接收输入数据而产生正确输出信息,而且保持数据库和文件完整性 黑盒测试通常能发觉以下几类错误: 1、功效不对或遗漏 2、界面错误 3、数据结构或外部数据库访问错误 4、性能错误 5、初始化和终止错误 采取黑盒技术设计测试用例方法 1、等价类划分 2、边值分析法 3、因果图 4、猜错 5、测试 图1: 白盒测试 (2)白盒测试(White_Boxtesting) 盒测试关键用于检验程序内部结构、逻辑、循环和路径。 常见白盒测试用例设计方法有代码检验法、静态结构分析法、静态质量度量法、逻辑覆盖法、基础路径测试法、符号测试法等。 其中最关键方法就是逻辑覆盖法。 1、语句覆盖 2、判定覆盖 3、条件覆盖 4、条件判定覆盖 5、多条件覆盖 图2: 黑盒测试 手工测试和自动化测试 (1)手工测试 手工测试有其不可替换地方,因为人含有很强判定能力,而工具没有,所以手工测试不可替换性表现在以下多个方面: ①测试用例设计: 测试人员经验和对错误判定能力是工具不可替换; ②界面和用户体验测试: 人类审美观和心理体验是工具不可模拟; ③正确性检验: 大家对是非判定、逻辑推理能力是工具不含有。 (2)自动化测试 自动化测试是把人为驱动测试行为转化为机器实施一个过程 自动化测试技术关键有: 录制/回放、脚本技术、数据驱动、关键字驱动、业务驱动等 常见自动化测试工含有: 负载压力测试工具、功效测试工具、白盒/黑盒测试工具、测试管理工具、测试辅助工具、GUI接口自动化测试工具。 系统测试 系统测试是指将经过集成测试软件系统或子系统,作为基于计算机系统一个元素,与计算机硬件、外设、一些支持软件、数据和人员等其它系统元素组合在一起所进行测试工作,目在于经过与系统需求定义(系统方案说明书、需求说明书等)作比较,发觉软件与系统需求定义不符合或矛盾地方。 1、功效测试(FunctionalTesting) 2、性能测试(PerformanceTesting) 3、负载测试(LoadTesting) 4、强度测试(StressTesting) 5、容量测试(VolumeTesting) 6、安全性测试(SecurityTesting) 7、用户界面测试(UITesting) 8、有效性测试(ValidityTesting) 9、配置测试(ConfigurationTesting) 10、故障恢复测试(RecoveryTesting) 11、安装测试(InstallabilityTesting) 12、可靠性测试(ReliablityTesting) 2.编写测试用例: 采取条件覆盖法设计用例,使判定中每个条件可能取值 测试用例设计步骤: 1、测试需求分析 2、业务步骤分析 3、测试用例设计 4、测试用例评审 5、测试用例更新完善 测试用例ID abc 测试用例名称 abcTest 测试目 过程是否正确 前置条件 前午夜符合什么条件,后午夜 操作步骤与输入 输入startHour,endHour,startMinute,endMinute 预期结果 程序还没开始运行,自己手工计算结果为13.6 实际结果 一样输入条件比较预期结果与运行结果,判定试验正确性 实施人 陈燕珠 日期 -6-13 实施人 陈燕珠 表1: 测试用例 3.测试计划: (1)编写源代码,并经过JunitTestCase生成测试代码,并编写测试用例代码。 (2)经过不一样测试用例,分别对源代码进行结构化测试。 (3)生成测试代码覆盖率,并对数据进行分析。 五.试验内容 1、用java语言编写上述章节案例 2、设计白盒测试用例,达成分支覆盖 3、依据以上设计测试用例,编写junit测试代码,并进行测试。 4、完成测试代码覆盖分析,并生成html格式代码覆盖测试汇报。 测试用例ID abc 测试用例名称 abcTest 测试目 过程是否正确 前置条件 前午夜符合什么条件,后午夜 操作步骤与输入 输入startHour,endHour,startMinute,endMinute 预期结果 程序还没开始运行,自己手工计算结果为13.6 实际结果 一样输入条件比较预期结果与运行结果,判定试验正确性 实施人 陈燕珠 日期 -6-13 实施人 陈燕珠 试验源代码: abc.java importjava.util.Scanner; interfacewage{ publicdoublemoney(); } classabcd{ staticintstartHour; staticintstartMinute; staticintendHour; staticintendMinute; doubletotalprice; publicstaticintinputStartHour() {intaaa=0; System.out.println("pleaseinputstarthour18-23"); Scannerbbb=newScanner(System.in); Stringstr=bbb.nextLine(); try{ if(str.matches("[1][8-9]|[2][0-3]")) { System.out.println("correct"); aaa=Integer.parseInt(str); returnaaa; } elsethrownewException("Exception"); } catch(Exceptionex) { System.out.println("pleaseinputagain"); inputStartHour(); } returnaaa; }//input publicstaticintinputStartMinute() {intaaa=0; System.out.println("pleaseinputstartminute"); Scannerbbb=newScanner(System.in); Stringstr=bbb.nextLine(); try{ if(str.matches("[0-5][0-9]|[0-9]")) { System.out.println("correct"); aaa=Integer.parseInt(str); returnaaa; } elsethrownewException("Exception"); } catch(Exceptionex) { System.out.println("pleaseinputagain"); inputStartMinute(); } returnaaa; }//input publicstaticintinputEndHour() {intaaa=0; System.out.println("pleaseinputEndhour21-230-4"); Scannerbbb=newScanner(System.in); Stringstr=bbb.nextLine(); try{ if(str.matches("[2][1-3]|[0-4]")) { System.out.println("correct"); aaa=Integer.parseInt(str); returnaaa; } elsethrownewException("Exception"); } catch(Exceptionex) { System.out.println("pleaseinputagain"); inputEndHour(); } returnaaa; }//input publicstaticintinputEndMinute() {intaaa=0; System.out.println("pleaseinputendminute"); Scannerbbb=newScanner(System.in); Stringstr=bbb.nextLine(); try{ if(str.matches("[0-5][0-9]|[0-9]")) { System.out.println("correct"); aaa=Integer.parseInt(str); returnaaa; } elsethrownewException("Exception"); } catch(Exceptionex) { System.out.println("pleaseinputagain"); inputEndMinute(); } returnaaa; }//input } classtotalbeforeextendsabcdimplementswage{ publicdoublemoney(){ totalprice=(endHour-startHour)*3.4+(endMinute-startMinute)/60*3.4; returntotalprice; } } classtotalaferextendsabcdimplementswage{ publicdoublemoney(){ totalprice=(24-startHour-1)*3.4+(60-startMinute)/60*3.4+endHour*3.9+endMinute/60*3.9; returntotalprice; } } publicclassabc{ publicstaticvoidmain(Stringargs[]){ abcd.startHour=abcd.inputStartHour(); abcd.endHour=abcd.inputEndHour(); abcd.startMinute=abcd.inputStartMinute(); abcd.endMinute=abcd.inputEndMinute(); if(abcd.endHour0){ totalaferaa=newtotalafer(); aa.startHour=abcd.startHour; aa.startMinute=abcd.startMinute; aa.endHour=abcd.endHour; aa.endMinute=abcd.endMinute; System.out.println("moneyis"+aa.money()); } elseif(abcd.endHour>=21&&abcd.endHour totalbeforeaa=newtotalbefore(); aa.startHour=abcd.startHour; aa.startMinute=abcd.startMinute; aa.endHour=abcd.endHour; aa.endMinute=abcd.endMinute; System.out.println("moneyis"+aa.money()); } } } abcTest.java importjunit.framework.TestCase; importjunit.framework.Assert; publicclassabcTestextendsTestCase{ //@Test publicvoidtesttotalprice(){ doubleactual; doubleexpecteds=3.4; try{ abcppp=newabc(); ppp.main(null); totalbeforep=newtotalbefore(); //totalpricepp=newtotalprice(); abcd.startHour=abcd.inputStartHour(); abcd.endHour=abcd.inputEndHour(); abcd.startMinute=abcd.inputStartMinute(); abcd.endMinute=abcd.inputEndMinute(); //pp.WelcomeScreen.addCommand(pp.Into); //pp.WelcomeScreen.setCommandListener(pp); //pp.display.setCurrent(pp.WelcomeScreen); //pp.newWelcomeThread().start(); p.startHour=22; p.startMinute=0; p.endHour=23; p.endMinute=0; actual=p.money(); Assert.assertEquals(expecteds,actual,0.0f); }catch(Exceptione){ e.printStackTrace(); } } } 六.试验结果及结论 运行程序,其覆盖情况以下:
图3: 测试代码覆盖分析 图4: 测试用例编写 图5: 导出覆盖率汇报
图6: 自动生成Html覆盖率分析汇报
结论: 当运行测试用例程序abcTest.java来测试用例abc.java时,输入对应输入startHour,endHour,startMinute,endMinute,就会输出对应计算结果。 若是用CoverageAs运行,则能够看到程 序abc覆盖结果和覆盖率。 将其覆盖结果导出为网页模式则能够在生成index.html网页中查看各个程序及函数运行结果及覆盖率。
七.总结(存在问题及处理措施、心得体会等) 此次试验是一个有趣而且实用试验。 程序运行过后,运行到代码和没有运行到代码都用鲜艳颜色覆盖了,鲜明想我们展示了程序代码运行情况。 经过此次试验,我对程序利用率有了更深刻了解。 知道了原来运行一个程序,当输入不一样数据,程序就会运行不一样程序块。 而对应,也会有部分程序块是没有运行到,一个程序中有很多地代码没有使用到。 这让我知道,以后我们写程序就要尽可能写些有用代码,尽可能地让程序运行覆盖率更高,让程序运行愈加快。
八.老师对学生试验情况评价: ☐不能掌握试验内容☐能基础掌握试验内容 ☐能很好掌握试验内容☐能熟练掌握试验内容
老师签字: 年6月13日 |
CopyRight 2018-2019 实验室设备网 版权所有 |