哈尔滨工业大学 2012年秋季学期
软件工程 试题(A)
一 二 题号 1(10分)
2(13分)
3(13分)
4(12分)
1(10分)
2(12分) 总分(70) 分数
第
1 页 (共 1
2 页)
学号 姓名
一 分析与设计题(48分)
2012年夏,大型专业音乐真人秀节目“中国好声音”(The V oice of China )登陆浙江卫视,刘欢、那英、庾澄庆、杨坤四位明星作为导师言传身教,为中国乐坛寻找一批怀揣梦想、具有才华的新人,短短三个月吸引了大量关注,俨然成为中国电视音乐选秀节目的新标杆。
这种娱乐模式上的创新离不开IT 和软件的支持。将中国好声音节目看作一个项目的运
作,涉及到对导师、学员、节目日程安排、与观众互动等各方面的有效管理。某IT 公司与浙江卫视展开合作,为中国好声音第二季开发软件系统支持。
对该系统的初步构思如下(注:为节省考试时间,以下需求做了大幅简化,请勿与现实
中的中国好声音节目对号入座,勿要随意扩展或改变):
(1) 节目开始前,制作方通过现实中的沟通选定若干明星,将其录入系统,观众在系统
中对他们进行投票,制作方根据投票情况选择最受欢迎的四位形成导师团队。制作方通过现实面试选定有潜质的一组学员,并将他们的信息(姓名、年龄、职业、擅长曲风)录入系统。
(2) 节目开始前,制作方编排节目的日程。日程由多个阶段构成,分为导师盲选、组内
淘汰、总决赛三个阶段。每个阶段由若干场次构成,每个场次需要规划其主题、地点、赞助商等,但尚未包含具体的播出时段。针对该日程每个场次,浙江卫视(节目的播出方)需在系统中指定其播出时段(例如第一阶段中的第一场次为2012年7月13日21:15-23:15)。根据节目的进展情况,制作方在系统中动态更新参与每个场次的学员名单。
(3) 在导师盲选阶段中,每个学员可在特定场次被导师选中,或者落选(意即没有导师
选择他加入自己的队伍)。被某导师选中的所有学员构成该导师的“队伍”。若某学员在某个场次中落选,无法再参加后续的场次。由制作方在系统中进行相应的“选中”或“落选”操作,形成相应的盲选记录,其信息包括:学员、场次、所唱曲目、加入的队伍、落选原因。
(4) 在组内淘汰阶段,属于同一队伍的两个学员之间进行PK ,由导师或媒体团决定谁胜
出、谁被淘汰。若某学员在某个场次中胜出,则仍处于原队伍中;若被淘汰,则从队伍中离开。由制作方在系统中进行相应的“胜出”或“淘汰”操作,形成相应的PK 记录,其信息包括:学员、场次、对手(与该学员竞争的学员)、本次PK 所唱曲目、结果(胜出还是淘汰)。最终每个队伍剩下1名学员参加总决赛阶段。一个学员可以参加多次PK 。
(5) 总决赛阶段与组内淘汰阶段类似,唯一的区别在于:每次参加PK 的两个学员分属不
同的队伍。
(6) 节目开始前,学员是“待定”状态;若被某导师选中,则进入“在队伍中”状态;若落选,则处于“落选”状态;若被淘汰,则进入“已淘汰”状态。
(7) 观众可在系统中完成以下查询:查询学员信息、查询节目日程安排、查询各导师队
伍情况、查询各学员的盲选/PK 记录。观众可对自己喜欢的学员进行投票,系统做出记录并按投票情况对所有学员受欢迎程度进行动态实时的排序。
1. (10分) 针对上述功能需求,识别外部参与者、用例和通讯关联,给出用例模型。用例名称请用中文表述。
第2页(共12页)
2. (13分) 该系统设计之初使用了下图所示的B/S架构,各功能模块均由PHP语言书写,每个PHP 程序由用户界面代码、业务逻辑代码、与后台数据库交互的代码构成,都部署在应用服务器上,观众等通过浏览器请求PHP页面以访问系统。
随着节目进展,系统需求出现了以下变化:
(1) 新浪网与制作方合作,当中国好声音系统中的比赛相关数据发生更新时,新浪网可自动获取到变化的信息而无需人工参与;
(2) 观众希望在看电视时通过智能手机来访问网站,并可通过手机短信与系统互动(例如为支持的学员或导师投票),而不是只能傻乎乎待在电脑屏幕前;
(3) 制作方工作人员认为通过浏览器访问系统的效率太低了,跟不上舞台上快速发生的各种事件,造成系统中的数据与现实中有某些延迟;
(4) 总决赛期间,全国观众的热情将异常高涨,会在节目播出的2个小时内高频度的集中访问系统,这可能造成系统宕机的严重后果;
(5) 比赛规则容易发生变化,开发该系统的软件公司希望以尽量少的代码更改来适应变化。
针对上述情况,考虑采用哪些设计决策对上图架构进行改进,使用UML部署模型描述系统新的物理架构,并简要阐述上述(1)~(5)各项新需求是如何被解决的。
第3页(共12页)
第4页(共12页)
3. (13分) 识别该系统中所用到的实体类(概念类),分析它们之间的静态结构关系,建立领域模型,以类图的形式展现出来。模型中需包含各类的关键属性和方法,并详细标识出类间关联关系的必需信息。类的名称、属性、方法名称均用中文表述。
第5页(共12页)
4. (12分) 针对第3题中的“学员”实体类,以表格的形式列出其主要属性。属性需给出名称、数据类型、含义。识别该对象的各种状态,使用状态图描述各状态之间的转换关系,并在每个状态转换上标识出相应的操作。属性、状态、操作名称均用中文表述。
第6页(共12页)
二测试题 (22分)
1. (10分) 观众可通过手机向系统发送短消息,表示自己对特定学员或导师的支持。系统中有一个短消息接收模块,其参数为客户发来的短消息,格式遵循以下规则:
(a)分为三部分,依次为:对象、编号、文字,三部分之间直接相连;
(b)“对象”部分的长度为1,取值范围为{X, D},分别表示学员、导师;
(c)“编号”部分:若对象部分取值为X,则该部分由三位数字构成,取值范围为[001, 120],表示学
员编号;若对象部分取值为D,则该部分取{NY, LH, YCQ, YK}之一,表示导师身份;
(d)文字部分无任何限定,可以为空,也可以任意长度。
对符合上述规则的短消息,模块返回结果为“合法”,否则返回“非法”。例如,你强烈支持刘欢的短消息为“DLH刘欢你是最棒的导师!”,你简单支持学员金志文(002)的短消息为“X002”,均属合法的短消息。
利用黑盒测试的相关知识,完成以下题目:
(1) (5分) 使用等价类划分方法,以表格形式给出所有的有效等价类和无效等价类;
(2) (5分) 设计一组黑盒测试用例(包括输入数据、覆盖的等价类、期望的输出结果)。
第7页(共12页)
第8页(共12页)
2. (12分) “中国好声音”系统中有一个函数用于从观众发来的短消息序列中找出受支持最多的学员,其伪代码如下所示。输入一个整型数组,其值为观众支持的学员编号,输出一个字符串,其值为“学员编号@被支持次数”的格式。
1 String getChampionFromSMS (int[] sms) {
2 sms.sort(); //按升序对sms中字符串排序
3 int count = 0, value = sms[0]-1;
4 int count_new = 0, value_new = sms[0]-1;
5 int i = 0;
6 while(i < sms.length()) { //sms.length()返回sms数组的长度
value_new)
7 if(sms[i]
==
++;
8 count_new
9 if(sms[i] != value_new || i == sms.length-1) {
count)
>
{
if(count_new
10
=
count_new;
count
11
value_new;
=
value
12
}
13
=
sms[i];
value_new
14
1;
=
count_new
15
}
16
i++;
17
18 }
19 return value + “@” + count;
20}
基于上述源代码,利用白盒测试方法,完成以下题目:
(1) (4分) 绘制该程序的控制流图;
(2) (2分) 计算其环形复杂度(圈复杂度);
(3) (3分) 列出所有的基本路径;
(4) (3分) 针对每条基本路径来设计测试用例,测试用例中至少应包含输入数据和期望结果。
答题中请务必使用程序中的代码行号(1~20)。若需要将某一行拆分为多行,请以n1、n2、n3的形式表示,n为需要拆分的行号。
第9页(共12页)
第10页(共12页)
第11页(共12页)
第12页(共12页)