期刊专题 | 加入收藏 | 设为首页 12年实力经营,12年信誉保证!论文发表行业第一!就在400期刊网!

全国免费客服电话:
当前位置:首页 > 免费论文 > 经济论文 > 区域经济 >

软件测试实验教学设计论文

软件测试是保证软件质量的重要手段之一。目前社会上对软件测试人才需求非常旺盛,据报道其人才缺口高达30万人[1],高校学生毕业后直接从事软件测试工作的占据了软件测试行业从业人员的48%[2],许多高校都开设了软件测试课程,如苏州大学[3],北京工业大学[4]等,以培养相应的软件测试人才。我校计算机科学与技术专业2008版教学设计中新增了软件测评课程,含理论课28学时及实验课8学时,于2011年首次在大四上学期开设。软件测试主要是一门技能型课程[5],其理论性相对较弱,且和软件工程概论课存在较多内容的重复。吸取了首次授课时重理论轻实践的教训,我们将软件测试课程的目标定位为在一定理论基础的指导下使学生熟练掌握软件测试的技能,因此2012年第二次授课时将理论课减少为24学时,实验课增加到12学时。借鉴同济大学朱少民教授[6-7]的经验,实验课着重讲述一些常用开源软件测试工具的使用,包括功能测试工具Selenium和AutoIT,单元测试工具Junit,代码覆盖工具Emma以及性能测试工具Jmeter等。Jmeter是Apache组织开发的一个用于压力测试和性能测试的纯Java桌面工具,可用于对服务器、网络或对象等模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能[8]。性能测试是保证应用程序发布后能够稳定可靠运行的必要手段之一。以我们为某机场开发的战略规划管理系统为例,由于发布前未进行全面的性能测试,客户使用一段时间后经常反映系统响应速度慢。利用Jmeter对主要模块进行了性能测试,结合测试结果对数据库进行了优化,此后客户再也没有反映过响应速度慢的问题。本着科研服务于教学的宗旨,以该系统为原型,完善了基于Jmeter的性能测试及数据库优化实验教学设计。

1Web应用程序性能测试实验

这部分实验目的是使学生熟练掌握使用Jmeter测试Web应用程序的一般流程和方法。实验任务测试绩效考核子系统中的评分模块。评分人登录系统后进入评分环节,选择其未完成的评分项目(若有多个未评分项,则需要全部对其评分)。每个评分项中包含对多个部门的评分,部门数大于等于3个时需符合正态分布,如可评出优秀3个、良好6个、合格4个、基本合格2个,否则可任意评分。按照循序渐进的原则,设计了3个步骤:一是Jmeter的基本应用,包括脚本录制、添加http请求、添加断言以及查看测试结果等;二是Jmeter的逻辑控制结构,如分支和循环等;三是Jmeter的高级应用,如参数值可变以及参数个数可变等。

1.1Jmeter的基本应用

Jmeter可以手工添加脚本,但更方便的是使用脚本录制软件Badboy[9]。Badboy录制的脚本可以保存为Jmeter格式,然后在Jmeter中直接打开和修改。脚本主要是一系列的http请求,其中可以设置请求的URL,请求方法(get/post)及请求参数等,如图1所示。通过添加断言(如是否含有特定字符串)检查请求是否返回正确结果。添加查看结果树并运行测试脚本查看程序的测试结果。

1.2Jmeter的控制结构

Jmeter具有丰富的逻辑控制结构,包括控制器,switch控制器,while控制器以及forEach控制器等。实验重点练习控制器和forEach控制器。控制器判断Jmeter变量是否满足给定条件,若满足则执行其包含的测试元素,否则不执行。ForEach控制器对Jmeter变量的每一个取值都执行一遍其包含的测试元素。图2是一个控制器,其条件为变量COUNT小于10且变量VAR等于字符串“abcd”。图2Jmeter的控制器图Jmeter的变量引用使用${变量名}的方式,变量一般提取自返回页面中的某些信息,如满足特定条件记录的行数或某个特定位置的字符串取值等。变量提取可采用正则表达式或Xpath进行匹配,讲解其匹配原则并现场演示。图3利用正则表达式提取需评选优秀的单位个数,其中引用名称youxiu就是变量名。匹配失败则取设置的缺省值0。如对于页面中返回的html代码“…您当前可以评出优秀<spanid="ltYSMsg">3</span>个…”可提取出优秀个数为3。

1.3Jmeter的高级应用

本部分着重解决实际测试过程中的一些常见问题,如参数内容可变及参数个数可变等。测试登录环节时需模拟不同的用户登录行为,即图1的http请求中txtUserName一项的值应是变化的。Jmeter提供的CSVDataSetConfig可解决这一问题,如图4所示。将所有评分人的信息存储在一个CSV文件中,把其中的列名填入VariableNames项,之后将图1中的txtUserName值改为userAccount(即CSV文件的第1列)实现参数值的动态变化。进入评分项后需根据情况选择优秀和良好等的个数,且要反映在http请求的参数中。由于参评单位的个数因评分人和评分项各异,因此无法在GUI界面中一一添加。需动态添加的参数包括评分列表中的name及其value,value的取值从优秀到基本合格依次为1234。为简单起见,我们按顺序对单位进行评分。如系统要求评出3个优秀,则测试中前3个部门打优秀,其余依次类推。由于同一部门的优秀良好等单选按钮的name值相同(如图5所示),我们选择提取该组唯一的ID号,然后将其转换为name,其对应关系是用$代替下划线(如ID号为gbBSCExamList_ctl02_rbExamerLevel,name为gbBSCExamList$ctl02$rbExamerLevel)。Jmeter的Beanshellpreprocessor可在提交http请求前动态调整参数个数及参数值。下面给出了Beanshellpreprocessor的代码。其中ExamerLevel_matchNr为Jmeter的系统变量,提供了正则表达式匹配项ExamerLevel匹配成功的个数(即参评单位的个数)。如前所述匹配数量小于3时可任意评分,为简单起见我们均将其评为优秀。N=Integer.parseInt(vars.get("ExamerLevel_match-Nr"));(N>=3){YX=Integer.parseInt(vars.get("youxiu"));LH=Integer.parseInt(vars.get("lianghao"))+YX;HG=Integer.parseInt(vars.get("hege"))+LH;BHG=Integer.parseInt(vars.get("jibenhege"))+HG;for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");(i<=YX){sampler.addArgument(item,"1");}else(i<=LH){sampler.addArgument(item,"2");}else(i<=HG){sampler.addArgument(item,"3");}else(i<=BHG){sampler.addArgument(item,"4");}}}else{for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");sampler.addArgument(item,"1");}}设计了含35个并发线程的线程组,模拟实际35个评分人的评分过程。全部线程在1秒钟之内启动,比实际情况更严格。得到聚合报告如图6所示,其中点击考核评分页面响应时间最长,为335毫秒。且测试过程中无错误发生,说明系统评分模块可靠。

2数据库性能优化实验

除应用程序外,数据库设计的优劣亦影响系统性能。这部分实验目的是使学生熟练掌握使用SQLServer测试数据库性能的一般流程和方法,并进行简单的数据库调优。为减少复杂性,设计一个简单的由三张表组成的人员组织结构数据库:user、or-gan及userorgan表。其中user表含4586条记录,or-gan表含1722条记录,userorgan表含6804条记录(一人可在多部门任职)。实验任务根据账号查询其姓名及所在单位信息。

2.1SQL语句执行计划对应用程序中频繁执行的SQL语句检查执行计划非常重要。初始时,三张表均未建立任何索引,下面SQL语句的执行计划如图7所示。由图7知,三张表均采用全表扫描的方式。对大表全表扫描可能涉及多次磁盘I/O,非常费时,应尽力避免此种情况。SQLServer报告由于缺少索引影响了查询性能,并给出了相关建议。selectA.vcAccount,A.vcName,C.vcNamefromtest.dbo.[user]Ainnerjointest.dbo.[useror-gan]BonA.vcAccount=B.cnvcempidinnerjointest.dbo.organConB.cnvcorgid=C.nNodeIDwhereA.vcAccount='testuser'为表格建立以下索引:indexIND_USERACCOUNTontest.dbo.[user](vcAccount)clusteredindexPK_ORGANontest.dbo.[organ](nNodeID)indexIND_USERORGANontest.dbo.[userorgan](cnvcempid,cnvcorgid)再次运行后显示执行计划如图8所示。可见所有表扫描均已替换为相应的索引查找,且SQLServ-er未报告缺少索引影响查询性能。两次执行查询的磁盘I/O和CPU时间见表1,可见为表添加正确的索引可提高查询性能。

2.2索引建立原则总结

建立索引的一般满足原则如下[10](篇幅所限,未给出实例):(1)为主键所在的列创建索引。为经常进行连接但未指定为外键的字段建立索引。(2)在频繁进行排序或分组的字段上建立索引。(3)在条件表达式中经常用到的不同值较多的字段上建立索引,在不同值较少的字段上不建立索引,如性别字段。不在查询很少引用的列上创建索引。(4)若经常同时使用多个字段排序,可在这些字段上建立复合索引。要尽量使关键查询形成索引覆盖,其前导字段一定是使用最频繁的字段。(5)查看索引并删除不使用的索引。需频繁进行数据查入操作的数据库应有较少的索引,需频繁进行读取操作的数据库应有更多的索引。(6)在聚集索引中,避免包括不必要的列,尽可能使用较小的数据类型。(7)在支持排序和范围查询的字段上考虑使用聚集索引。(8)具有高选择性的列是索引的好候选列,具有高密度的列是索引最糟糕的候选列。

3结语

软件测试是保证软件质量的关键步骤。在软件正式发布前一般都需要经过性能测试,以保证软件在一定负荷下的平稳可靠运行。Jmeter是一款优秀的开源性能测试工具,可测试繁重负载下的系统表现。软件性能表现还取决于数据库设计的优劣,建立适当的索引可减轻数据库查询和处理负担,进而提高系统处理能力。通过本教学设计实验学生普遍反映认识到了性能测试的重要性,了解了执行计划在数据库性能优化中的作用。

作者:张志远冯兴杰单位:中国民航大学


    更多区域经济论文详细信息: 软件测试实验教学设计论文
    http://www.400qikan.com/mflunwen/jjlw/qyjj/119824.html

    相关专题:婴幼儿营养食谱1688例 金融论文


    上一篇:宫颈癌患者临床病理特征及预后
    下一篇:酒店管理专业实习管理改革

    认准400期刊网 可信 保障 安全 快速 客户见证 退款保证


    品牌介绍