软件评测师真题含答案.docx
《软件评测师真题含答案.docx》由会员分享,可在线阅读,更多相关《软件评测师真题含答案.docx(8页珍藏版)》请在冰豆网上搜索。
软件评测师真题含答案
2014年下半年软件评测师下午真题(含答案)
试题一(共20分)
阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。
【C程序】
intGetMaxDay(intyear,intmonth){
intmaxday=0; //1
if(month>=1&&month<=12){ //2,3
if(month==2){ //4
if(year%4==0){ //5
if(year%100==0){ //6
if(year%400==0) //7
maxday=29; //8
else //9
maxday=28;
}
else //10
maxday=29;
}
else
maxday=28; //11
}
else{ //12
if(month=4||month=6||month=9||month=11)//13,14,15,16
maxday=30; //17
else //18
maxday=31;
}
}
returnmaxday; //19
}
【问题1】(6分)
请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。
【问题2】(9分)
请画出上述程序的控制流图,并计算其环路复杂度V(G)。
【问题3】(5分)
请给出问题2中控制流图的线性无关路径。
参考答案:
【问题1】:
Month>=1&&month<=12
Month==2
Year%4==0
Year%100==0
Year%400==0
Month==2
Month==4
Month==6
Month==9
Month==11
【问题2】:
V(G)=11
【问题3】:
1、2
1、2、3
1、2、3、4、12、13、17、19
1、2、3、4、12、13、14、17、19
1、2、3、4、12、13、14、15、17、19
1、2、3、4、12、13、14、15、16、17、19
1、2、3、4、12、13、14、15、16、18、19
1、2、3、4、5、11、19
1、2、3、4、5、6、10、19
1、2、3、4、5、6、7、9、19
1、2、3、4、5、6、7、8、19
试题分析:
判断覆盖:
设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称分支覆盖
对于本题中判定的条件有:
Month>=1&&month<=12
Month==2
Year%4==0
Year%100==0
Year%400==0
Month==2
Month==4
Month==6
Month==9
Month==11
【问题2】
控制流图是描述程序控制流的一种图示方法。
其基本符号有圆圈和箭线:
圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。
基本结构如下所示:
控制流程图的环路复杂性V(G)等于:
(1)控制流程图中的区域个数。
(2)边数-结点数+2。
(3)判定数+1。
V(G)=11
【问题3】
线性无关路径是指包括一组以前没有处理的语句或条件的一条路径。
从控制流图来看,一条线性无关路径是至少包含有一条在其他线性无关路径中从未有过的边的路径:
1)1、2
2)1、2、3
3)1、2、3、4、12、13、17、19
4)1、2、3、4、12、13、14、17、19
5)1、2、3、4、12、13、14、15、17、19
6)1、2、3、4、12、13、14、15、16、17、19
7)1、2、3、4、12、13、14、15、16、18、19
8)1、2、3、4、5、11、19
9)1、2、3、4、5、6、10、19
10)1、2、3、4、5、6、7、9、19
11)1、2、3、4、5、6、7、8、19
试题二(共15分)
阅读希埃尔说明,回答问题1至问题3,将解答填入答题纸的对应栏内.
【说明】
某商店为购买不同数量商品的顾客报出不同的价格,其报价规则如表2-1所示.
如买11件需要支付10*30+1*27=327元,买35件需要支付10*30+10*27+10*25+5*22=930元
现在该商家开发一个软件,输入为商品数C(1<=C<=100),输出为因付的价钱P
【问题一】(6分)
请采用等价类划分法为该软件设计测试用例(不考虑C为非整数的情况).
【问题二】(6分)
请采用边界值分析法为该软件设计测试用例(不考虑健壮性测试,既不考虑C不在1到100之间或者是非整数的情况).
【问题三】(3分)
列举除了等价类划分法和边界值分析法以外的三种常见的黑盒测试用例测试反法.
参考答案:
【问题1】:
测试用例1:
31~100中任意一个数
测试用例2:
101
测试用例3:
0
测试用例4:
1~10中任意一个数
测试用例5:
11~20中任意一个数
测试用例6:
21~30中任意一个数
【问题2】:
0、1、10、11、20、21、30、31、100、101
【问题3】:
错误推测法、因果图法、判断表法、正交试验法、功能图法、场景法
试题分析:
【问题1】
划分等价类的6条原则:
(1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类
(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
(6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则再将该等价类进一步地划分为更小的等价类
本题中主要范围限制为1<=C<=100,即可以划分为两个无效和一个有效等价,但由于每一个小的等价类是单独处理的,因此需要再进一步的划分:
测试用例1:
31~100中任意一个数
测试用例2:
101
测试用例3:
0
测试用例4:
1~10中任意一个数
测试用例5:
11~20中任意一个数
测试用例6:
21~30中任意一个数
【问题2】
边界值设计测试用例,应遵循的原则:
1)如果输入条件规定了值得范围,则应取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据
2)如果输入条件规定了值得个数,则用最大个数、最小个数、比最小个数少、比最大个数多1的数作为测试数据
3)根据规格说明的每个输出条件,使用前面的原则1
4)根据规格说明的每个输出条件,应用前面的原则2
5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例
7)分析规格说明,找出其他可能的边界条件
依据边界值设计测试用例的原则,本题测试用例应选择:
0、1、10、11、20、21、30、31、100、101
【问题3】
黑盒测试的方法有等价类划分、边界值分析、因果图法、判定表法、正交试验法、功能图法、场景法、错误推测法等
因此本题可选:
错误推测法、因果图法、判断表法、正交试验法、功能图法、场景法中的3种
试题三(共20分)
阅读下列说明,回答问题l至问题4,将解答填入答题纸的对应栏内。
【说明】
某大型披萨加工和销售商为了有效管理披萨的生产和销售情况,欲开发一套基于Web的信息系统。
其主要功能为销售、生产控制、采购、运送、存储和财务管理等。
系统采用JavaEE平台开发,页面中采用表单实现数据的提交与交互,使用图形(Graphics)以提升展示效果。
【问题1】(6分)
设计两个表单项输入测试用例,以测试XSS(跨站点脚本)攻击。
系统设计时可以
采用哪些技术手段防止此类攻击。
【问题2】(3分)
简述图形测试的主要检查点。
【问题3】(5分)
简述页面测试的主要方面。
【问题4】(6分)
系统实现时,对销售订单的更新所用的SQL语句如下:
PreparedStatementpStmt=connection,prepareStatementC(“UPDATESalesOrderSET
status=?
WHEREOrderID=?
;”);
然后通过setString(...);的方式设置参数值后加以执行。
设计测试用例以测试SQL注入,并说明该实现是否能防止SQL注入。
参考答案:
【问题1】:
用例1:
alert('XSS');">;
用例2:
\nt:
alert('XSS');">
防御XSS攻击方法:
验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。
防御规则:
1.不要在允许位置插入不可信数据
2.在向HTML元素内容插入不可信数据前对HTML解码
3.在向HTML常见属性插入不可信数据前进行属性解码
4.在向HTMLJavaScriptDATAValues插入不可信数据前,进行JavaScript解码
5.在像HTML样式属性插入不可信数据前,进行CSS解码
6.在向HTMLURL属性插入不可信数据前,进行URL解码
【问题2】:
图形测试主要检查点:
●颜色饱和度和对比度是否合适
●需要突出的链接的颜色是否容易识别
●是否正确加载所有的图像
【问题3】:
●页面的一致性如何
●在每个页面上是否设计友好的用户界面和直观的导航系统
●是否考虑多种浏览器的需要
●是否建立了页面文件的命名体系
●是否充分考虑了合适的页面布局技术,如层叠样式表、表格和帧结构等
【问题4】:
能防止SQL注入
Pstmt.setString('1'or'1'='1',status)
Pstmt.setString('2'or'1'='1',orderID)
试题分析:
【问题1】
XSS攻击:
跨站脚本攻击(CrossSiteScripting)是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
比如这些代码包括HTML代码和客户端脚本。
用例1:
alert('XSS');">;
用例2:
\nt:
alert('XSS');">
防御XSS攻击方法:
验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。
防御规则:
不要在允许位置插入不可信数据
在向HTML元素内容插入不可信数据前对HTML解码
在向HTML常见属性插入不可信数据前进行属性解码
在向HTMLJavaScriptDATAValues插入不可信数据前,进行JavaScript解码
在像HTML样式属性插入不可信数据前,进行CSS解码
在向HTMLURL属性插入不可信数据前,进行URL解码
【问题2】
图形测试,主要检查点如下:
颜色饱和度和对比度是否合适
需要突出的链接颜色是否容易识别
是否正确加载所有的图形
【问题3】
页面是信息的载体,直接体现WEB沾点的设计水平,一个好的页面因信息层次清晰而让用户一目了然;因涉及巧妙、精致美观而让用户流连忘返;因恰当使用各种元素能完成许多功能而不显拥挤。
对页面设计的测试可以从以下几个方面进行:
页面的一致性如何
在每个页面上是否设计友好的用户界面和直观的导航系统
是否考虑多种浏览器的需要
是否建立了页面文件的命名体系
是否充分考虑了合适的页面布局技术,如层叠样式表、表格和帧结构等
【问题4】
SQL注入是黑客攻击数据库的一种常用方法,其实就是通过把SQL命令插入到Web表单或页面请求的查询字符串中提交,最终达到欺骗服务器执行恶意的SQL命令,来达到攻击的目的。
本题中给出的SQL语句不能防止SQL注入,设置的这个测试用例只要包含SQL功能符号,然后使得SQL语句不符合原设计意图即可。
例如,包含了“--”或“’”等,那么整个语句为:
将intClientSubmitScore为85 DELETEFROMscore -- ;strStudentID为1000
这样SQL语句执行就变成:
UPDATEStudentScoreSETscore=85 DELETEFROMscore --WHEREStuent_ID= 1000 ;
防止SQL注入的有些方法主要有:
拼接SQL之前先对特殊符合进行转义,使其不作为SQL的功能符合即可。
对于本题由于将SQL语句中的输入值,使用参数方式传送,而且SQL语句进行预编译,这样由于防止注入式攻击,测试用例设计可参考:
Pstmt.setString('1'or'1'='1',status)
Pstmt.setString('2'or'1'='1',orderID)