《IBMRational软件测试工具实验报告完整版.docx》由会员分享,可在线阅读,更多相关《IBMRational软件测试工具实验报告完整版.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、IBM Rational软件测试工具实验报告目录IBM Rational软件测试工具实验报告1实验一 使用Rational Purify工具测试代码中内存相关错误2实验二 使用Rational Quantify对程序代码做性能分析15实验三 使用Rational PureCoverage对程序代码做性能分析23实验四 Rational Performance Tester 的根本使用30实验五 Rational Performance Tester 中数据池的使用54实验六 Rational Performance Tester 中调度的使用67实验七 Rational Functional
2、Tester的使用90实验一 使用Rational Purify工具测试代码中内存相关错误一、目的和要求1了解应用程序代码中与内存有关的错误,以及由此引发的后果;2掌握Rational Purify的根本设置;3掌握Rational Purify的根本操作方法,学会使用该工具;4能够分析Rational Purify输出的内存错误报告。二、实验内容1学习讲义01,掌握Rational Purify的使用方法;2完成以下实验: 1分析以下C程序代码,找出其中的内存错误用注释说明错误类型;#include using namespace std;int main() char * str1 = h
3、ello; char * str2 = new char5; char * str3 = str2; coutstr2endl; strcpy(str2,str1); coutstr2Run3.3 选择可执行文件,点击run按钮3.4 程序的运行结果:从程序运行的结果上看,第一行的输出不是预期的结果,按照以往的经历,在c/c+程序中输出了非预期的字符和乱码往往是因为数组越界读取造成的或者是指针在分配内存区域后未经初始化就直接读取造成的。3.5 查看和保存报告在程序运行完毕后,Rational Purify会为我们生成一份报告,具体内容如图:保存错误报告:点击保存4分析Rational Puri
4、fy输出的内存错误报告。对内存错误报告0逐条分析:4.1 Rational Purify报告在源程序的第10行存在UMR未初始化的内存读错误:原因分析:虽然char * str2 = new char5;这句代码完成了对内存的初始化,但是并没有为字符数组中的每个字符赋初值,而在C语言中,对于变量来讲,没有赋初值意味着这个变量的值是随机的,因为C语言的变量没有默认值。所以输出的内容中第一行有乱码,这行乱码就是源代码第10行执行后输出的。以上三条UMR错误描述的是同一个问题。4.2 Rational Purify报告在源程序的第10行存在ABR内存越界读错误:原因分析: C语言中字符串是以“0作为
5、完毕标志的,当输出语句遇到第一个“0时就会认为字符串已经完毕,然后就会终止读取,否那么将一直读取下去,直到遇到“0或者操作系统检测到程序读取了不该读取的内容之后终止程序运行为止。在源程序中,虽然指针str2指向的内存正确的申请了内存,但却没有对字符数组的每个元素进展初始化应当有这样的习惯和意识:在C语言中,变量声明的时候一定要赋初值。一开场没有初始化字符数组的每个元素为“0,这就导致了在读取str2指向的字符数组时cout发生了越界,程序无休止的向下读,期望碰到“0终止读取。发生这样的情况是非常危险的,轻那么导致乱码输出,重那么导致程序异常终止。所以声明变量尤其是指针变量后,记得赋初值。4.3
6、 Rational Purify报告在源程序的第10行存在IPR非法指针读错误:原因同,不再赘述。4.4 Rational Purify报告在源程序的第12行存在ABW数组越界写错误:原因分析:C语言中字符串是以“0作为完毕标志的,当输出语句遇到第一个“0时就会认为字符串已经完毕,然后就会终止读取,否那么将一直读取下去,直到遇到“0或者操作系统检测到程序读取了不该读取的内容之后终止程序运行为止。在源程序中,按照C语言的规那么“hello这个字符串应该是占6个字节大小包括“0,而指针str2指向的内存区域中只有5个字节的大小。Strcpy是头文件中的一个函数,其作用是字符串拷贝,strcpy(s
7、tr2,str1);这句代码试图将占6个字节的“hello字符串放入str2所指向的存储空间只有5个字节大小之中,这样的操作必然导致数组越界,越界的局部被写到了指针str2指示的区域之外,这样的操作会造成比越界读更严重的后果,严重的时候可能因为破坏了其他程序的内存空间造成其他程序崩溃和操作系统异常。这类错误相比照拟隐蔽,不一定每次都会引起操作系统报警,但是问题一旦出现就有可能造成严重的后果。4.5 Rational Purify报告在源程序的第18行存在FMR空闲内存读错误:原因分析:从图中可以看出,程序在第7行为指针str2指向的内存区域分配了5个字节大小的空间,但是程序在第16行使用了de
8、lete关键字,在C+中delete相当于c语言中的free,是释放内存空间用的。由于程序执行到第18行的时候,str2指向的内存空间已经在第16行释放,所以程序读取了已经释放的内存空闲内存就是指已经释放的内存,这样的事情是不应该发生的,程序应当读取已经分配的内存空间,对于已经释放的内存空间不应该去读取。这样的操作也是容易发生问题的,因为已经释放的内存存储的内容很可能不是指针指向的数据类型的,在读取时可能因为类型不匹配导致程序发生问题,或者已经释放的这片内存已经不归这个程序所有也是有可能的,取出的内容可能会是乱码或者直接引起程序崩溃。4.6 Rational Purify报告在源程序的第18行
9、存在FMW空闲内存写错误:原因分析:正如分析的那样,空闲内存写比空闲内存读危害更大,因为写操作本身就带有一定的破坏性。如果写到了其他正常程序的内存空间还会导致其他程序崩溃。4.7 Rational Purify报告在源程序的第20行存在FFM再次释放已经释放的内存错误:原因分析:char * str3 = str2;这句代码使得str2和str3指向同一块内存空间,在程序的第16行释放了str2指向的内存,也就间接释放了str3指向的内存。在20行再次尝试释放str3指向的内存空间就有会出现FFM再次释放已经释放的内存错误。综合上述分析,源代码中存在以下错误:#include using na
10、mespace std;int main() char * str1 = hello; char * str2 = new char5; char * str3 = str2; coutstr2endl; /UMR、ABR、IPR strcpy(str2,str1); /ABW coutstr2endl; /ABR delete str2; str20+=2; /FMR、FMW delete str3; /FFM getchar(); return 0;实验二 使用Rational Quantify对程序代码做性能分析一、目的和要求1了解应用程序性能的相关概念;2掌握Rational Quan
11、tify的根本设置;3掌握Rational Quantify的根本操作方法,学会使用该工具;4能够分析Rational Quantify输出的性能分析报告。二、实验内容1学习讲义02,掌握Rational Quantify的使用方法;2阅读以下C程序,该程序对二维数组中的每行进展排序,行与行之间不排序,完成以下实验: #include using namespace std;const int N=3;void sort(int iArrayNN) int iRow,iCol,iCur,iMin,iMinAdd,iTemp; for( iRow = 0; iRow N; iRow+ )for(
12、 iCol =0 ; iCol N-1;iCol+ ) iMin = iArrayiRowiCol; iMinAdd = iCol; /在当前行中,从当前元素开场往后找最小的元素 for( iCur = iCol + 1; iCur N ;iCur+ ) if( iArrayiRowiCur iMin ) iMin = iArrayiRowiCur; iMinAdd = iCur; /在当前行中,从当前元素开场往后找最小的元素 iArrayiRowiMinAdd = iArrayiRowiCol; iArrayiRowiCol = iMin; /对每行进展排序 int main()int AN
13、N;int i,j;cout请输入N*N个整数:endl;for( i = 0; i N ; i+ ) for( j = 0; jAij;cout对每行排序前的数组为:endl;for( i = 0; i N ; i+ ) for( j = 0; j N ; j+ ) coutAij ;coutendl;sort(A);cout对每行排序后的数组为:endl;for( i = 0; i N ; i+ ) for( j = 0; j N ; j+ ) coutAij ;coutendl;return 0; (1) 使用Dev-C+编译该源代码,并生成可执行程序;(2) 在Rational Qua
14、ntify中运行该程序,分析应用程序的性能;2.1 翻开Rational Quantify2.2 运行刚刚生成的可执行文件输入9个整数,回车确认3分析Rational Quantify输出的性能分析报告:通过Rational Quantify的主窗口,分析程序的函数调用关系,并找出关键路径;关键路径就是粗线条标识的路径:通过函数列表窗口,分析程序执行过程中涉及到的函数,执行成功后所有性能的参数指标;点击图标找到函数列表:双击Main函数查看调用关系,发现main函数调用了sort函数:从图中可以看出,sort函数运行的时间占到了main函数运行时间的0.04%,main函数绝大局部的时间用于执
15、行了标准库函数,其中就包括输出语句。再双击sort函数,查看其调用者和被它调用的函数:从图中可以看出,sort函数是被main函数调用的,而sort函数自身没有再调用其他函数。在工具栏中单击Run Summary,从显示的窗口中分析程序运行过程中每个线程的状态。实验三 使用Rational PureCoverage对程序代码做性能分析一、目的和要求1了解什么是代码覆盖率测试;2掌握Rational PureCoverage的根本设置;3掌握Rational PureCoverage的根本操作方法,学会使用该工具;4能够分析Rational PureCoverage输出的代码覆盖率检测报告。二、
16、实验内容1学习讲义03,掌握Rational PureCoverage的使用方法;2实验代码同实验二略 1使用Dev-C+编译该源代码,并生成可执行程序;2在Rational PureCoverage中运行该程序,输入的9个数据为:1,2,3,4,5,6,7,8,9;在该输入数据下,分析Rational PureCoverage输出的代码覆盖率检测报告;从图中可以看出:函数被调用的次数为2次,函数未被执行到的次数为0次,函数被执行到的次数为2次,函数被执行到的百分比为100%,函数中未被执行到的代码行数为14行,函数执行到代码的行数为24行,函数被执行到的代码数占总代码数的63.16%。再看一
17、下摘要窗口:从图中可以看到模块调用的次数和模块中函数、过程或方法命中的百分比。查看函数列表:双击sort函数可以看到函数的源代码:从窗口中左边的LineCoverage可以看到每一行执行的次数。3重新在Rational PureCoverage中运行该程序,输入的9个数据为:9,8,7,6,5,4,3,2,1;在该输入数据下,分析Rational PureCoverage输出的代码覆盖率检测报告。生成的报告如下:从图中可以看出:函数被调用的次数为2次,函数未被执行到的次数为0次,函数被执行到的次数为2次,函数被执行到的百分比为100%,函数中未被执行到的代码行数为0行,函数执行到代码的行数为3
18、8行,函数被执行到的代码数占总代码数的100.00%。可以明显看到,随着两次输入数据的不同,代码的覆盖率大不一样。从图中可以看到模块调用的次数和模块中函数、过程或方法命中的百分比。可以看到这一次的命中率20.86%比上一次17.84%要高。查看函数列表:双击sort函数可以看到函数的源代码:从窗口中左边的LineCoverage可以看到每一行执行的次数。此次行的执行次数总体比前一次高得多。实验四 Rational Performance Tester 的根本使用一、目的和要求1了解Rational Performance Tester工具的根本操作方法,学会使用该工具;2学会在该环境中建立一个
19、Web测试工程,录制性能测试脚本;3运行简单的性能测试脚本,初步了解性能测试的特点; 4理解测试检查点的作用。二、实验内容1 学习该工具的根本操作,包括如何查看帮助样例、建立测试工程及录制脚本等;2学习如何使用该工具提供的快捷键;3,建立一个测试工程并任选一个网站录制性能测试脚本;4在上述录制的脚本中设置三种检查点:页面标题VP,响应代码VP及响应大小VP5运行自己录制的脚本,分析测试报告。1.启动软件,选择工作空间按照默认的工作空间启动,翻开软件主界面2.点击欢送页上面的“性能测试入门查看测试用例进入工作台之后右边有向导提示,根据向导帮助文档,可以快速入门性能测试脚本的录制。点击“点击以开场
20、可以看到提示:3.尝试录制一段脚本,先新建一个性能测试工程:名字叫做wk_test1_mail126,因为接下来要录制的是一个126邮箱的登陆操作。点击“完成,弹出窗口“从新记录测试因为到目前为止我们还没有创立任何测试,选择 测试:创立一个性能测试工程:选择IE作为测试浏览器:点击完成:IE浏览器启动,要求清空临时文件:在Internet选项中清空临时文件:点击删除:点击全部删除:在地址栏中敲入126邮箱的域名:输入正确的用户名和密码登陆:登陆成功:关闭浏览器停顿脚本的录制:等待测试记录的生成:测试完成,点击翻开测试从结果来看,录制脚本成功了,确实生成了对应的测试数据:4.回放录制的脚本,点击
21、工具栏上面的运行按钮或:等待测试完毕当进度条到达完成时测试完毕:脚本回放完成,总体一栏中柱形图中两个柱体均为100%并且错误日志没有提示错误信息,说明性能测试的过程中没有发生错误,回放是成功的。查看各项参数:a)摘要显示了测试的一些概要信息,主要包括运行的用户数、运行总体耗时、页面尝试总数和命中总数、页面的响应时间等信息:b)页面性能一栏显示的是页面响应时间的相关信息单位:毫秒,包括页面的平均响应时间、最长响应时间及最短响应时间,可以据此对系统的性能作出大体的判断。其中可以清楚地看到“网易邮箱版就是进入邮箱后的主界面 的访问速度是最慢的,柱形图用红色表示,说明该页面访问的性能较差当然了,也和实
22、验室的网络环境差存在很大关系。c)响应与时间摘要一栏显示的是页面响应和时间及性能摘要,页面元素响应和时间性能摘要。可以明显的看出,折线图中存在一个很大的峰值,这个峰值就是登陆进入主界面的时候由于主界面加载时间较长造成的。d)响应与时间详细信息以图形和表格的形式详细的展示了平均页面响应时间及性能摘要信息。可以明显的看到“网易邮箱这个页面的响应时间很慢,也间接的证明了刚刚的数据分析的正确性。e)页面吞吐量一栏显示了页面点击率,用户负载等信息。f)效劳器吞吐量一栏显示了效劳器单位时间内传输的字节数,作为吞吐量的描述。用户负载描述了单位时间内完成的用户数和活动的用户数。g)效劳器运行状况概要一栏的运行
23、状况和页面元素的运行状况。由于此次请求的页面和页面元素全部取得,中间没有出现错误,所以结果是全部命中。h)效劳器运行状况详细信息一栏显示了状态码的成功记数,百分比等信息。i)资源一栏暂无数据5.尝试在已有的录制测试的根底上添加验证点VP添加页面标题VP,如果脚本运行的过程中目标页面标题与验证点设置的标题不一致,回放脚本时就会在测试报告中出现提示信息。设置页面标题的期望值:正常应该是“网易邮箱版,为了测试时让他验证失败,改为“网易邮箱。注意勾选正那么表达式,否那么如果你的预期结果是运行时结果的字串也会匹配成功,验证点就起不到验证作用了。保存后重新运行脚本之后的情况:可以看到第三根状态条不满,说明
24、存在未通过的验证点,由于只设置了一个验证点,而且该验证点还没通过,所以通过率为0%。可以通过事件日志来查看失败的位置和具体原因:双击错误行,事件的详细信息给出了错误的位置和原因:标题不匹配5.2 添加响应代码VP响应代码要求是200,匹配方法选择模糊: 这一次运行验证点应该有一个通过响应代码VP,一个不通过响应标题VP。从图中可以清楚地看到,页面响应代码验证点通过了绿色柱100%,但是响应代码VP没有通过黄色柱0%5.3 添加响应大小VP响应大小的匹配方法可以是准确到多少字节,至多少字节,至多多少字节,介于一个范围之间或一个百分比。我选择设置范围0到90000之间。这次运行结果应该是两个验证点
25、响应代码VP和响应大小VP通过,一个页面标题不通过:运行结果说明了验证点是生效的。实验五 Rational Performance Tester 中数据池的使用一、目的和要求1了解数据池、等价类、变量及记录的含义和作用;2学会在Performance Tester中创立、导人、导出及使用数据池;3运行性能测试脚本,查看性能测试结果。二、实验内容1选定一个有输入框的网站,输入用户名及密码,录制性能测试脚本。2 以自定义等价类、变量建立一数据池,向该数据池中添加局部测试记录。3用数据池的变量替代脚本中的输入数据。4运行自己录制的脚本,分析测试报告。 1. 之前如何建性能测试工程和录制脚本的内容省略。只展示结果和分析性能信息。这次录制的是我做的一个J2EE小程序用户登录。27:8080/UserLogin登陆系统,录制脚本2.建立数据池,并向其中添加数据输入数据池的名称:设置数据池表格的行数对应测试记录的条数和列数每条测试记录中包含几个变量,然后点击完成:编辑数据池的数据之前先更改一以下的名称,单击列名:向数据池中参加数据:3. 用数据池的变量替代脚本中的输入数据。把数据池和测试用例关联起来点击完成:选中对应页面,找到用户名和密码两个变量,点击替换按钮: