2013下半年软件评测师考试真题及答案-下午卷
试题一
【说明】
逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现程序
的覆盖。针对以下由C语言编写的程序,按要求回答问题。
int XOR(char * filename, unsigned long key){
FILE * input = NULL,*output = NULL; //1
char * outfilename = NULL;
int len = strlen(filename);
unsigned char buffer;
if((filename[len-2] == ‘.’) && (filename[len-l] == ‘c’)){ //2,3
outfilename = new char[len+l]; //4
strcpy(outfilename,filename); outfilename[len-2] = ‘\0’;
}
else{ //5 outfilename = new char[len+5];
strcpy(outfilename , filename);
strncat(outfilename,”.c”,2);
}
input = fopen(filename,”rb”);
if( input = NULL){ //6
cout<<"Error opening file " << filename < delete [] outfilename; outfilename = NULL; return 1; } output = fopen(outfilename,”'wbf”); if( output = NULL) { //8 cout<< "Error creating output file ”<< outfilename < delete [] outfilename; outfilename = NULL; return 1; } while(! feof(input)){ //10 if( fread(&buffer,sizeof(unsigned char), 1,input) != 1 ){ //11 if( ! feof(input)){ //12 delete [] outfilename; //13 outfllename = NULL; fclose(input); fclose(output); return 1; } } else{ //14 buffer A= key; fwrite(&buffer,sizeof(unsigned char), 1,output); } } fclose(input); //15 fclose(output); delete [] outfllename; return 0; } 【问题1】(6分) 请给出满足100%DC(判定覆盖)所需的逻辑条件。 【问题2】(10分) 请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。 【问题3】(4分) 请给出问题2中控制流图的线性无关路径。 答案: 【问题1】 (filename[len-2] == ‘.’) && (filename[len-l] == ‘c’)真,假input = NULL真,假 output = NULL真,假 ! feof(input)真,假 fread(&buffer,sizeof(unsigned char), 1,input) != 1真,假 ! feof(input)真,假 【问题2】 V(G)=8 【问题3】 1、1 2 3 4 6 7 2、1 2 3 5 6 7 3、1 2 5 6 7 4、1 2 5 6 8 9 5、1 2 5 6 8 10 6、1 2 5 6 8 10 11 12 13 7、1 2 5 6 8 10 11 14 8、1 2 5 6 8 10 11 12 或者其它符合要求的等价的路径组合 解析 【问题1】 判定覆盖:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真“分支和取”假“分支至少都经历一次 逻辑条件为: (filename[len-2] == ‘.’) && (filename[len-l] == ‘c’)真,假 input = NULL真,假 output = NULL真,假 ! feof(input)真,假 fread(&buffer,sizeof(unsigned char), 1,input) != 1真,假 ! feof(input)真,假 【问题2】 控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示: 控制流程图的环路复杂性 V(G)等于: (1)控制流程图中的区域个数。 (2)边数-结点数+2。 (3)判定数+1。 V(G)=8 【问题3】 线性无关路径是指包括一组以前没有处理的语句或条件的一条路径。从控制流图来看,一条线性无关路径是至少包含有一条在其他线性无关路径中从未有过的边的路径: 1、1 2 3 4 6 7 2、1 2 3 5 6 7 3、1 2 5 6 7 4、1 2 5 6 8 9 5、1 2 5 6 8 10 6、1 2 5 6 8 10 11 12 13 7、1 2 5 6 8 10 11 14 8、1 2 5 6 8 10 11 12 试题二 【说明】 某软件公司为某银行设计开发了一套网上银行系统,该系统提供基本的支付、查询、转账和信息修改等功能。银行对网上银行系统提出了初步的性能指标: (1)交易响应时间不超过2s (2)并发用户数>=1000 (3)CPU利用率不超过80% (4)系统需要7*24小时不间断的稳定运行 (5)每秒事务数为7 (6)交易成功率为100% 现需要对该软件进行性能测试。 【问题1】(4分) 常见的性能测试包括负载测试、压力测试、并发性能测试、疲劳强度测试和大数据量测试等。针对题目中所述的6个性能指标,并发性能测试和疲劳强度测试所涉及的指标各有哪些? 【问题2】 性能测试中,针对一个单独的性能指标,往往需要采用多种不同的测试方法。该软件公司需要测试性能指标(1)和(5),设计了如下的测试方案: 测试常规情况下的并发用户数,逐步增加并发用户数,分别测试: (1)在响应时间为2s时,系统所能承受的最大并发访问用户的数量; (2)系统在多大的并发访问用户数量下,响应时间不可接受(例如超过2s)。 请指出这两项测试分别属于哪种类型的测试,并分别解释这两种测试类型的基本概念。 【问题3】 在测试性能指标(5)时,该软件公司在客户端模拟大量并发用户来执行业务操作,统计平均的每秒事务数。该软件公司认为客户端接收响应信息与该性能指标的测试无关,因此在模拟客户端上发起正常业务申请,接收系统响应后直接丢弃响应信息,没有进行功能校验。请说明该软件公司的做法正确与否,并简要说明原因以及执行功能校验的副作用。 答案: 【问题1】 并发性能测试涉及的指标有(1)、(2)、(5) 疲劳强度测试涉及的指标有(4) 【问题2】 第一种测试属于负载测试,第二种属于压力测试。 负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。 压力测试是通过逐步增加系统负载,测试系统性能变化,并最终确定在什么负载条件下系统性能处于失效状态,以此来获得系统能提供的最大服务级别的测试。 【问题3】 该软件公司的做法是错误的。 该软件公司在负载压力测试中没有进行功能校验,忽略了负载压力情况下的功能不稳定问题。没有正确的功能保证,负载压力性能测试就失去了意义。 在测试过程中进行功能校验,需要记录业务操作结果,会导致资源消耗、操作行为增加以及产生大量日志等问题。 解析: 【问题1】 本题主要考查负载压力测试相关知识及应用。 负载压力测试是指在一定约束条件下测试系统所能承受的并发用户量、运行时间、数据量等,以确定系统所能承受的最大负载压力。负载压力测试是性能测试的重要组成部分,包括负载测试、压力测试、并发性能测试、疲劳强度测试、大数据量测试等内容。 本问题考查负载压力测试的基本概念。 负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量所进行的测试。 压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下,系统性能处于失效状态,以此来获得系统能提供的最大服务级别的测试。所以说,压力测试是一种特定类型的负载测试。 并发性能测试,包含了负载测试和压力测试。通过逐渐增加并发用户数负载,直到系统的瓶 颈或者不能接收的性能点,通过综合分析交易执行指标、系统资源监控指标来确定系统并发性能。并发性能测试是负载压力测试中的重要内容。 疲劳强度测试,通常是采用系统稳定运行情况下能够支持的最大并发用户数,或者日常运行用户数,持续执行一段时间业务,保证达到系统疲劳强度需求的业务量,通过综合分析交易执行指标、系统资源监控指标,确定系统处理最大工作量强度1生能的过程。一般情况下利用疲劳强度测试老模拟系统日常业务操作。 大数据量测试,包括独立的数据量测试和综合数据量测试。独立的数据量测试是针对某些系统存储、传输、统计、査询等业务进行的大数据量测试;综合数据量测试是指和压力测试、负载性能测试、疲劳强度测试相结合的综合测试。 从题干列举的6种性能指标看,根据各类测试的定义,可以得出(1)、(2)、(5)属于并发性能测试,(4)属于疲劳强度测试。(3)属于一种系统资源监控的指标,而(6)的定义不明确,因为交易成功率取决多种因素,包括业务数据、用户请求数据、基础软件、网络环境等等。 【问题2】 本问题考查负载测试和压力测试的区别。 从问题1的分析中可以看出,负载测试强调的是在满足性能指标的情况下,系统所能承受的最大负载量的测试,前提是系统正常工作;而压力测试则是要使得系统性能处于失效状态,即压力测试是为了发现在什么条件下系统的性能会变得不可接受。 因此,通过对本问题描述的分析可以得出,“在响应时间为2s时,系统所能承受的最大并发访问用户的数量”属于负载测试,而“系统在多大的并发访问用户数量下,响应时间不可接受(例如超过2s)”属于压力测试。 【问题3】 本问题考查负载压力测试中的功能内容校验。 负载压力测试中的功能内容校验,指的是在进行负载压力测试时,需要核查功能的执行是否正常,在功能异常或错误时,需要记录所产生的错误。如果没有幻能执行结果正确的保证,负载压力性能测试失去了意义。对本为题而言,如果不能保证业务操作的正确,则平均每秒事务数的指标是不正确的。 执行功能内容校验也会带来一些副作用,包括资源消耗、操作行为增加,以及产生大量日志等问题。 试题三 【说明】 某高校开发了一套基于Web的教务管理系统,实现教务管理人员课程设置、学生选课和成绩查询、教师上传成绩以及特殊情况下教务处对成绩进行修改等功能。系统基于JavaEE 平台实现,采用表单(Form)实现用户数据的提交并与用户交互。 系统要支持: (1)在特定时期内100个用户并发时,主要功能的处理能力至少要达到10个请求/秒,平均数据量8KB/请求; (2)用户可以通过不同的移动设备、操作系统和浏览器进行访问。 【问题1】(4分) 简要叙述教务管理系统表单测试的主要测试内容。 【问题2】(5分) 简要叙述为了达到系统要支持的(2),需要进行哪些兼容性测试,并设计一个兼容性测试矩阵。 【问题3】(5分) 在满足系统要支持的(1)时,计算系统的通信吞吐量。 【问题4】(6分) 系统实现时,对成绩更新所用的SQL语句如下: “UPDATE StudentScore SET score = ” + intClientSubmitScore + “ WHERE Stuent_ID=+strStudentID + “’;” 设计1个测试用例,以测试该SQL语句是否能防止SQL注入,并说明该语句是否能防止SQL注入,以及如何防止SQL注入。 答案: 【问题1】 表单测试是Web应用功能测试的重要内容,教务管理系统主要测试如下内容: ①每个字段的验证; ②字段的缺省值; ③表单中的输入; ④提交操作的完整性。 【问题2】 浏览器兼容性测试、操作系统兼容性测试、移动终端浏览测试、打印测试等。 在设置的兼容性测试矩阵肯定要包含平台和浏览器的内容,矩阵的行可以是不同的平台,而列是不同的浏览器,同时平台和浏览器都是合理的,还要提醒出移动的元素在里面即可。 【问题3】 通信吞吐量:P=N(并发用户的数量=100)×T(每单位时间的在线事务数量=10)×D (事务服务器每次处理的数据负载=8KB/s)=100×10×8=8000KB/s。 【问题4】 设计如下测试:【注:设计类似如下用例的一个即可,其中包含SQL功能符号使SQL变为不符合设计意图即可,如包含',DROP等】。 (1)intClientSubmitScore:100--,strStudentID:20130002,则该SQL变为: UPDATE StudentScore SET score = 100 – WHERE Student_ID=‘20130002’ (2)intClientSubmitScore:100,strStudentID:20130002’;DROP TABLE StudentScore -’ 则该SQL语句变为: 从测试用例所拼接处的SQL可以看出,该SQL语句不安全,容易造成SQL注入。防止SQL注入的方法主要有:拼接SQL之前对特殊符号进行转义,使其不作为SQL语句的功能符号。 UPDATE StudentScore SET score = 100 WHERE Student_ID=20130002‘;DROP TABLE StudentScore –’; 解析: 【问题1】 本题考查Web应用测试相关内容。Web应用测试除了类似传统软件系统测试性能测试、压力测试等之外,还需要测试链接、浏览器、表单和可用性等多个方面。 本问题考查表单测试的主要内容。表单是Web应用的重要组成部分,用于获取用户的信息并和用户进行交互。因此,表单测试是Web应用功能测试的重要内容,需要测试: ①首先检查每个字段的所有验证; ②检查字段的缺省值; ③表单中的错误输入; ④如果有创建、删除、查看和修改表单,要进行测试。 【问题2】 本问题考查Web应用兼容性测试的内容。Web应用的兼容性是测试工作的重要方面,包括:浏览器兼容性、操作系统平台兼容性、移动浏览、打印选项等。本系统用户可以通过不同的移动设备、操作系统和浏览器进行访问,因此需要针对普通设备和移动设备,进行操作系统平台和浏览器的兼容性测试。 【问题3】 本问题考查Web应用系统的性能指标计算。通信吞吐量,设定如下指标参数: N:并发用户的数量; T:每单位时间的在线事务数量; D:事务服务器每次处理的数据负载; P:系统的通信吞吐量。 有如下计算公式: P=N×T×D 本题中系统要求支持的(1)中给出100个用户并发,即N=100;主要功能的处理能力至少要达到10个请求/秒,即T=10;平均数据量8KB/请求,即D=10KB/s。 则:通信吞吐量P=100×10×8=8000KB/S 【问题4】 本问题考查Web应用安全性方面的SQL注入,SQL注入是Web应用安全性测试的重要方面。 许多Web应用系统采用某种数据库,接收用户从Web页面中输入,完成展示相关存储的数据(如检查用户登录信息)、将输入数据存储到数据库(如用户输入表单中数据域并点击提交后,系统将信息存入数据库)等操作。在有些情况下,将用户输入的数据和设计好的SQL框架拼接后提交给数据库执行,就可能存在用户输入的数据并非设计的正确格式,从而给恶意用户提供了破坏的机会。即SQL注入。恶意用户输入不期望的数据,拼接后提交给数据库执行,造成可能使用其他用户身份、查看其他用户的私密信息,还可能修改数据库的结构,甚至是删除应用的数据库表等严重后果。因此需要在测试阶段进行认真严格的测试。本系统实现时,对成绩更新所用的如下SQL语句: “UPDATE StudentScore SET score = “ + intClientSubmitScore + ”WHERE Student_ID=‘” + strStudentID + “’;” 采用拼接字符串方式,无法防止SQL注入。例如intClientSubmitScore:100--,strStudentID:20130002,则该SQL变为: UPDATE StudentScore SET score = 100 – WHERE Student_ID=’20130002’; --是SQL中注释符号,其后的内容为注释,这样上述语句中--之后的内容变为注释,只要StudentScore表中所有的记录的score都变为100,而没有受到WHERE子句后的学号限制。 UPDATE StudentScore SET score = 100 WHERE Student_ID=’20130002’or‘a’=‘a; 因为’a'='a'条件总是成立,因此,SQL执行结果包括学生成绩表中所有行的score都更新为100分。 更为严重的情况下,用户输入DROP等功能性命令,会造成数据库表的永久删除等严重后果,如strStudentID:20130002’;DROPTABLEStudentScore--,则该SQL语句: UPDATE StudentScore SET score = 100 WHERE Student_ID=‘20130002’;DROP TABLE StudentScore –’; 防止SQL注入的方法主要有:拼接SQL之前对特殊符号进行转义或者等价方式,使其不作为SQL语句的功能符号。验证所有输入数据能从输入层面防止SQL注入。 SQL注入在使用SSL的应用中仍然存在,甚至是防火墙也无法防止SQL注入。因此,在测试Web应用时,需要认真仔细设计测试用例,采用Web漏洞扫描工具等进行检查,以保证不存在SQL注入机会。 试题四 【说明】 某企业最近上线了ERP系统,该系统运行的网络环境如图4-1所示。企业信息中心目前拟对该系统相关安全防护体系进行全面的安全性测试,以提供全面的安全测评报告。 【问题1】(6分) 企业ERP系统上线后,企业主要业务的日常运作都高度依赖该系统的正常运行,因此ERP系统的稳定性与可靠性对企业至关重要。故障恢复与容灾备份措施是提高系统稳定性与可靠性的重要因素。对于故障恢复与容灾备份措施,参与测试的王工认为应从故障恢复、数据备份和容灾备份等三个方面进行测试。请用300字以内文字,对这三方面的测试内容进行简要说明。 【问题2】(4分) 数据库服务器中目前主要存储ERP系统业务数据,后续还需要存储企业网站相关数据,当前ERP系统的用户认证方式包含口令认证方式,相应的用户权限和口令也存储在数据库二维表中。针对上述实际情况,参与测试的李工认为在对数据库权限进行测试时,除数据库账号保护及权限设置相关的常规测试外,还必须对敏感数据加密保护及对数据库访问方式进行相应测试。请用200字以内文字,对敏感数据加密保护和数据库访问方式两个方面的测试内容进行简要说明。 【问题3】(10分) 为对抗来自外网或内网的主动攻击,系统通常会采用多种安全防护策略,请给出四种常见的安全防护策略并进行简要解释。结合一种在图4-1中明确标识出的安全防护策略机制,说明针对该机制的安全测试应包含哪些基本测试点。 答案: 【问题1】 对于故障恢复与容灾备份措施,应从以下三个方面进行测试: ①故障恢复:测试整个ERP系统是否存在单点故障;任何一台设备失效时,能否按照预定义的规则实现快速切换;是否采用磁盘镜像技术,实现主机系统到磁盘系统的高速连接。 ②数据备份:ERP系统关键业务是否具备必要的双机热备或磁盘镜像等热备份机制;对于整个ERP业务,是否提供外部存储器备份和恢复机制,保证系统能够根据备份策略恢复到指定时间的状态。 ③容灾备份:ERP系统是否建立异地容灾备份中心,当主中心发生灾难性事件时,可由备份中心接管所有务;备份中心是否有足够的带宽确保与主中心的数据同步,是否有足够处理能力来接管主中心的业务,能否确保快速可靠地与主中心的应用切换。 【问题2】 敏感数据加密保护和数据库访问方式的测试内容为: ①敏感数据的加密保护:由于ERP系统的用户权限和口令存储在数据库午,因此需要测试相应敏感数据是否采用加密算法进行加密保护。 ②数据库访问方式测试:是否为不同应用系统或业务设置不同的专门用户用于数据库访问,应杜绝在代码中使用超级用户及默认密码对数据库进行访问。 【问题3】 安全防护策略是软件系统对抗攻击的主要手段,常见的安全防护策略有以四种: ①安全日志:安全日志用于记录非法用户的登录名称、操作时间及内容等信息,以便发现问题并提出解决措施;安全日志仅记录相关信息,不对非法行为做出主动反应,属于被动防护的策略; ②入侵检测系统:入侵检测系统是一种主动的网络安全防护措施,从系统内部或各种网络资源中主动采集信息,从中分析可能的网络入侵或攻击,通常入侵检测系统还应对入侵行为做出紧急响应; ③漏洞扫描:漏洞扫描是对软件系统及网络系统进行与安全相关的检测,以找出安全隐患和可被黑客利用的漏洞; ④隔离防护:隔离防护是将系统中的安全部分与非安全部分进行隔离的措施,主要的技术手段有防火墙和隔离网闸等,其中防火墙主要用于内网和外网的逻辑隔离,而网闸则主要 用于实现内网和外网的物理隔离。 图4-1中明确标识出的安全防护策略机制为防火墙和入侵检测系统。(可选择防火墙或入侵检测系统中的任一机制描述相应安全测试的测试点) 针对防火墙的测试点: (1)是否支持交换和路由两种工作模式; (2)是否支持对FTP、HTTP、SMTP等服务类型的访问控制; (3)是否考虑防火墙的冗余设计; (4)是否支持对日志的统计分析功能,日志是否可存储在本地或网络数据库中; (5)对防火墙或受保护内网的非法攻击,是否提供多种告警方式和多种级别的告警。针对入侵检测系统的测试点: ①能否在检测到入侵事件时,自动执行切断服务、记录入侵过程、报瞥等动作; ②是否支持攻击特征信息的集中式发布和攻击取证信息的分布式上载; ③能否提供多种方式对监视引擎和检测特征进行定期更新; ④内置的网络能否使用状态监控工具或网络监听工具。 解析: 【问题1】 本问题考查故障恢复与容灾备份措施测试内容。 针对故障恢复与容灾备份措施的安全性测试一般包括故障恢复、数据备份与容灾备份三个测试点,其包含的基本测试内容为: ①故障恢复:整个系统是否存在单点故障;对于关键应用系统,当任何一台设备失效时,能否按照预定义的规则实现快速切换;是否采用磁盘镜像技术,实现主机系统到磁盘系统的高速连接; ②数据备份:对于关键业务,是否具备必要的双机热备或磁盘镜像等热备份机制;对于所有业务,是否提供外部存储器备份和恢复机制,保证系统能够根据备份策略恢复到指定时间的状态; ③容灾备份:是否建立异地容灾备份中心,当主中心发生灾难性事件时,可由备份中心接管所有业务;备份中心是否有足够的带宽确保与主中心的数据同步,是否有足够处理能力来接管主中心的业务,能否确保快速可靠地与主中心的应用切换。 【问题2】 本题考查考生对数据库权限测试内容的理解。 根据本题说明,ERP系统的用户权限和口令信息存储在数据库中,因此需要测试相应敏感数据是否采用加密算法进行加密保护;而数据库中还需要存储ERP系统之外的其他系统业务数据,因此应为不同应用系统或业务设置不同的专门用户用于数据库访问,且应杜绝在代码中使用超级用户及默认密码对数据库进行访问。 【问题3】 本题考查基本的安全防护策略的相关知识。 安全防护策略是软件系统对抗来自外网或内网的主动攻击的主要手段,常见的安全防护策略包括安全日志、入侵检测、隔离防护与漏洞扫描等,本题首先要求考生对常见安全防护策略的有基本的理解,了解其基本原理与主要措施。 图4-1中明确标识出的安全防护策略机制为防火墙和入侵检测系统,考生可自主选择其中一种,描述对其进行安全性测试时需要完成的测试点。