2012 下半年软件评测师考试真题及答案-下午卷
试题一
某酒店预订系统有两个重要功能:检索功能和预订功能。检索功能根据用户提供的关键
字检索出符合条件的酒店列表;预订功能是对选定的某一酒店进行预订。现需要对该系统执
行负载压力测试。
该酒店预订系统的性能要求为:
(1)交易执行成功率 100%;
(2)检索响应时间在 3s 以内;
(3)检索功能支持 900 个并发用户;
(4)预订功能支持 100 个并发用户;
(5) CPU 利用率不超过 85%;
(6)系统要连续稳定运行 72 小时。
【问题 1】(3 分)
简述该酒店预订系统在生产环境下承受的主要负载类型。
【问题 2】(5 分)
对该系统检索功能执行负载压力测试,测试结果如表 1-1 所示,请指出响应时间和交易
执行成功率的测试结果是否满足性能需求并说明原因。
表 1-1 检索功能测试结果
检索执行情况
响应时间(s)
(平均值)
1.3
3.7
6.6
交易执行成功率
100%
100%
98%
并发用户数
500
900
1000
【问题 3】(5 分)
对该系统执行负载压力测试,测试结果如表 1-2 所示,请指出 CPU 占用率的测试结果是
否满足性能需求并说明原因。
表 1-2 系统测试结果
服务器资源利用情况
并发用户数
CPU 占用率(%)
检索功能并发用户数
预订功能并发用户数
(平均值)
500
900
1000
【问题 4】(6 分)
50
100
120
35.5
87.3
92.6
根据【问题 2】和【问题 3】的测试结果,试分析该系统的可能瓶颈。
答案:
【问题 1】
该酒店预订系统在生产环境下承受的主要负载类型有:
1)并发用户数属于并发执行负载。
2)连续稳定运行 72 小时属于疲劳强度负载。
3)大量检索操作属于大数据量负载。
【问题 2】
测试结果不满足性能指标。当并发用户数为 900 时,响应时间为 3.7s,不满足响应时
间小于 3s 的要求;当并发用户数为 1000 时,响应时间为 6.6s,交易成功率为 98%, 但要
求检索功能的并发用户数最多为 900,当用户数为 1000 时,不能算作不满足。
【问题 3】
测试结果不满足性能指标。当 900 个检索并发用户和 100 个预订并发用户时,CPU 利用
率超过 85%;要求检索功能支持 900 个并发用户,预订功能支持 100 个并发用户,所以在 1000
个检索并发用户和 120 个预订并发用户时 CPU 占用率超过 85%不能算不满足。
【问题 4】
(1)系统没有采用合适的并发/并行策略。
(2)服务器 CPU 性能不足。
(3)数据库设计不足或者优化不够。
(4)服务器网络带宽不足。
解析:
【问题 1】
本问题考查系统的负载类型。
系统可能的负载类型包括并发执行负载、疲劳强度负载以及大数据量负载。针对这些负
载,在进行负载压力测试时,分别需要进行并发性能测试、疲劳强度测试以及大数据量测试。
本题中,要求检索功能支持 900 个并发用户,预订功能支持 100 个并发用户,这两个功能都
有并发访问的要求,这属于并发执行负载;要求系统能连续稳定运行 72 小时,这属于疲劳
强度负载;系统存在大量并发用户进行大量的检索和预订操作,这属于大数据量负载。
【问题 2】
本问题考查对负载压力测试的测试结果进行分析。
对检索功能来说,当检索并发用户数为 900 时,检索响应时间为 3.7 秒,不满足检索响
应时间在 3 秒以内的要求。因此该测试结果不满足性能指标。
当检索并发用户数为 1000 时,检索响应时间为 6.6 秒。而需求要求检索功能在支持 900
个并发用户的情况下响应时间在 3 秒以内,这样当 1000 个并发用户响应时间超出 3 秒时,
不能算作不满足性能指标。
【问题 3】
本问题考查对负载压力测试的测试结果进行分析。
当检索功能并发用户数为 900,预订功能并发用户数为 100 时,CPU 占用率为 87.3%,不
满足 CPU 利用率不超过 85%的要求。因此该测试结果不满足性能指标。
当检索功能并发用户数为 1000,预订功能并发用户数为 120 时,CPU 占用率为 92.6%o
而需求要求检索功能并发用户数为 900,预订功能并发用户数为 100 的情况下,CPU 利用率不
能超过 85%。这样当存在 1000 个检索功能并发用户和 120 个预订功能并发用户,而 CPU 占
用率超过了 85%的情况下,不能算作不满足性能指标。
【问题 4】
本问题考查对系统瓶颈的初步判断。
根据问题 2 可以看出,当并发用户数过多时,检索响应时间不满足需求。这个问题的可
能原因有三个,一是该模块程序没有采用合适的并发/并行策略,二是数据库本身的设计或
者优化不够,三是服务器网络带宽不足。
根据问题 3 可以看出,当并发用户数过多时,CPU 占用率不满足需求。这个问题的可能
原因是服务器 CPU 本身性能不够或者程序没有采用合适的并发/并行策略。
综上,根据问题 2 和问题 3 的测试结果,本系统的可能瓶颈包括:(1)系统没有采用合
适的并发/并行策略;(2)数据库设计不足或者优化不够;(3)服务器网络带宽不足;(4)
服务器 CPU 性能不足。
试题二
逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现
程序的覆盖。针对以下由 C 语言编写的程序,按要求回答问题。
struct _ProtobufCIntRange{
int start_value;
unsigned orig_index;
};
typedef struct _ProtobufCIntRange ProtobufCIntRange;
int int_range_lookup (unsigned n_ranges, const ProtobufCIntRange *ranges, int
value){
unsigned start,n;
start=0;
n=n_ranges;
while(n>1){
unsigned mid= start+ n/2;
if(value< ranges[mid].start_value){
n=mid-start; //4
}
else if(value>=ranges[mid].start value+
∥1
//2
//3
(int)(ranges[mid+1].orig_index-ranges[mid].orig_index)){
//5
unsigned new_start= mid+1;
//6
n=start+n-new_start,
start = new_start;
}
else
//7
return ( value - ranges[mid].start_value ) + ranges[mid] ,
orig_index;
}
if(n>0){
//8
unsigned start_orig_index= ranges[start].orig_index;
unsigned range_size=ranges[start+1].orig_index - start_orig_index;
if (ranges[start].start_value<=value
&& value< (int)(ranges[start].start_value+ range_size) )
//9, 10
return (value - ranges[start].start_value)+start_orig_index; //11
}
return -1,
}
【问题 1】
//12
//13
请给出满足 100%DC (判定覆盖)所需的逻辑条件。
【问题 2】
请画出上述程序的控制流图,并计算其控制流图的环路复杂度 V(G)。
【问题 3】
请给出【问题 2】中控制流图的线性无关路径。
答案:
【问题 1】
编号
条件
n>1
n<=1
value < ranges[mid].start_value
value >= ranges[mid].start_value
(value >= ranges[mid].start_value) && value >= ranges[mid].start_value +
(int)(ranges[mid+1].orig_index-ranges[mid].orig_index)
(value >= ranges[mid].start_value) && value < ranges[mid].start_value +
(int)(ranges[mid+1].orig_index-ranges[mid].orig_index)
n>0
n<=0
ranges[start].start_value
<=
value
&&
value
< ( int )
(ranges[start].start_value + range_size))
ranges[start].start_value
>
value
||
value
>= ( int )
1
2
3
4
5
6
7
8
9
10
(ranges[start].start_value + range_size))
【问题 2】
环路复杂度 V(G)=7
【问题 3】
线性无关路径:
1) 1-2-3-4-2 …
2) 1-2-3-5-6-2…
3) 1-2-3-5-7-13
4) 1-2-8-9-10-11-13
5) 1-2-8-9-10-12-13
6) 1-2-8-9-12-13
7) 1-2-8-12-13
解析:
【问题 1】
本题考查白盒测试方法中的判定覆盖法。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”
值和“假”值,从而使程序的每一个分支至少都通过一次。
本题中程序一共有 5 个判定,所以满足判定覆盖一共就需要 10 个逻辑条件,这些条件