软件设计师考试大纲.docx
《软件设计师考试大纲.docx》由会员分享,可在线阅读,更多相关《软件设计师考试大纲.docx(57页珍藏版)》请在冰豆网上搜索。
软件设计师考试大纲
2012软件设计师考试大纲
一、考试说明
1.考试目标
通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。
2.考试要求
(1)掌握计算机内的数据表示、算术和逻辑运算方法;
(2)掌握相关的应用数学及离散数学基础知识;
(3)掌握计算机体系结构以及各主要部件的性能和基本工作原理;
(4)掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
(5)熟练掌握常用数据结构和常用算法;
(6)熟悉数据库、网络和多媒体的基础知识;
(7)掌握C程序设计语言,以及C++、Java中的一种程序设计语言;
(8)熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;
(9)掌握软件设计的方法和技术;
(10)了解信息化、常用信息技术标准、安全性,以及有关法律、法规的基础知识;
(11)正确阅读和理解计算机领域的英文资料。
3.考试科目
(1)计算机与软件工程知识,考试时间为150分钟,笔试,选择题;
(2)软件设计,考试时间为150分钟,笔试,问答题。
二、考试范围
考试科目1:
计算机与软件工程知识
1.计算机科学基础知识
1.1数制及其转换
●二进制、八进制、十进制和十六进制等常用数制及其相互转换
1.2计算机内数据的表示
●数的表示(补码表示,整数和实数的表示,精度和溢出)
●非数值表示(字符和汉字表示,声音表示、图像表示)
1.3算术运算和逻辑运算
●计算机中的二进制数运算方法
●逻辑代数的基本运算
1.4其他数学基础知识
●常用数值计算
●排列组合,概率论应用,应用统计(数据的统计分析)
●编码基础
●命题逻辑、谓词逻辑、形式逻辑的基础知识
●运筹基本方法
2.计算机系统知识
2.1计算机硬件基础知识
2.1.1计算机系统的组成、体系结构分类及特性
●CPU、存储器的组成、性能和基本工作原理
●常用I/O设备、通信设备的性能以及基本工作原理
●I/O接口的功能、类型和特性
●CISC/RISC,流水线操作,多处理机,并行处理
2.1.2存储系统
●虚拟存储器基本工作原理,多级存储体系
●RAID类型和特性
2.1.3可靠性与系统性能评测基础知识
●诊断与容错
●系统可靠性分析评价
●计算机系统性能评测方法
2.2计算机软件知识
2.2.1数据结构与算法知识
●数组
●链表
●队列、栈
●树
●图的定义、存储和基本操作
●杂凑(Hash表)
●常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法
●算法描述和分析
2.2.2操作系统知识
●操作系统的内核
●处理机管理
●存储管理
●设备管理
●文件管理
●作业管理
●网络操作系统和嵌入式操作系统基础知识
●操作系统的配置
2.2.3程序设计语言和语言处理程序知识
●汇编、编译、解释系统的基础知识和基本工作原理
●程序设计语言的基本成分(数据、运算、控制和传输),程序调用的实现机制
●各类程序设计语言的主要特点和适用情况
2.2.4数据库知识
●数据库模型(概念模式、外模式、内模式)
●数据模型,ER图,规范化
●数据操作
●数据库语言
●数据库管理系统的功能和特征
●数据库的控制功能
●数据仓库和分布式数据库基础知识
2.3计算机网络知识
●网络体系结构
●传输介质,传输技术,传输方法,传输控制
●常用网络设备和各类通信设备的特点
●Client-Server结构,Browser-Server结构
●LAN(拓扑,存取控制,组网,网间互连)
●Internet和Intranet基础知识以及应用
●网络软件
●网络管理,网络性能分析
2.4多媒体基础知识
●多媒体系统基础知识
●简单图形的绘制,图像文件的处理方法
●音频和视频信息的应用
●多媒体应用开发过程
3.系统开发和运行知识
3.1软件工程知识
●软件生存周期与软件生存周期模型
●软件开发方法
●软件开发项目管理
●软件开发工具与软件开发环境
3.2系统分析基础知识
●系统分析的主要步骤
●机构化分析方法
3.3系统设计基础知识
●概要设计与详细设计的基本任务
●系统设计的基本原理
●系统模块结构设计
●结构化设计方法
●面向数据结构的设计方法
●系统详细设计
3.4系统实施基础知识
●系统实施的基本内容
●程序设计方法
●程序设计的基本模块
●系统测试
●系统转换
3.5系统运行和维护基础知识
●系统可维护性的概念
●系统维护的类型
●系统评价的概念和类型
3.6软件质量管理基础知识
●软件质量特性(ISO/IEC9126软件质量模型)
●软件质量保证
●软件复杂性的概念及度量方法(McCabe度量法)
●软件评审(设计质量评审、程序质量评审)
●软件容错技术
3.7软件过程改进基础知识
●软件能力成熟度模型CMM
●统一过程(UP)与极限编程(XP)的基本概念
4.面向对象基础知识
●面向对象的基本概念
●面向对象分析与设计知识
●分析模式与设计模式知识
●面向对象程序设计知识
●面向对象数据库、分布式对象基础知识
5.信息安全知识
●信息系统安全基础知识
●信息系统安全管理
●保障完整性与可用性的措施
●加密与解密机制基础知识
●风险管理(风险分析、风险类型、抗风险措施和内部控制)
●计算机安全相关的法律、法规基础知识
6.标准化、信息化和知识产权基础知识
6.1标准化基础知识
●标准化意识,标准化组织机构,标准的内容、分类、代号与编号规定,标准制订过程
●国际标准、国家标准、行业标准、企业标准
●代码标准、文件格式标准、安全标准、互联网相关标准、软件开发规范和文档标准、基于构件的软件标准
6.2信息化基础知识
●全球信息化趋势、国家信息化战略、企业信息化战略和策略
●互联网相关的法律、法规
●个人信息保护规则
●远程教育、电子商务、电子政务等基础知识
●企业信息资源管理基础知识
6.3知识产权基础知识
●保护知识产权有关的法律、法规
7.计算机专业英语
●具有工程师所要求的英语阅读水平
●理解本领域的英语术语
考试科目2:
软件设计
1.外部设计
1.1理解系统需求说明
1.2准备进行系统开发
●选择开发方法、准备开发环境、制订开发计划
1.3设计系统功能
●选择系统结构
●设计各子系统的功能和接口
●设计安全性策略、需求和实现方法
●制订详细的工作流和数据流
1.4设计数据模型
●设计ER模型及其他数据模型
1.5编写外部设计文档
●系统配置图、各子系统关系图
●系统流程图、系统功能说明书
●输入输出规格说明、数据规格说明、用户手册框架
●设计系统测试要求
1.6外部设计的评审
2.内部设计
2.1设计软件结构
●按构件分解,确定构件功能、规格以及构件之间的接口
●数据结构与算法设计
●采用中间件和工具
2.2设计输入输出
2.3设计物理数据
2.4构件的创建和重用
●创建构件、重用构件
●使用子程序库或类库
2.5编写内部设计文档
●构件划分图、构件间的接口、构件处理说明
●屏幕界面设计文档、报表设计文档、文件设计文档、数据库设计文档
2.6内部设计的评审
3.数据库应用分析与设计
●设计关系模式
●数据库语言(SQL)
●数据库访问
4.程序设计
4.1模块划分
4.2编写程序设计文档
4.3程序设计评审
5.系统实施
5.1配置计算机系统及环境
5.2选择合适的程序设计语言
5.3用C程序设计语言以及C++、Java中的任一种程序设计语言进行程序设计
5.4系统测试
●指导程序员进行模块测试,并进行验收
●准备系统集成测试环境和测试工具
●准备测试数据
●写出测试报告
6.软件工程应用
6.1软件开发周期模型
6.2需求分析
6.3软件设计
●软件设计的基本原则
●软件设计方法
●程序设计(结构化程序设计、面向对象程序设计)
6.4软件测试的原则与方法
6.5软件质量(软件质量特性、软件质量控制)
6.6软件过程评估基本方法、软件能力成熟度评估基本方法
6.7软件开发环境和开发工具
6.8面向对象技术
●面向构件技术
●统一建模语言(UML)
●软件过程改进模型和方法
6.9网络环境软件技术
三、题型举例
(一)选择题
1.某系统的可靠性结构框图如下图所示。
该系统由4个部件组成,其中2、3两部件并联冗余,再与1、4部件串联构成。
假设部件1、2、3的可靠度分别为0.90、0.70、0.70。
若要求该系统的可靠度不低于0.75,则进行系统设计时,分配给部件4的可靠度至少应为
(1)。
(1)A.
B.
C.
D.
2.结构化开发方法中,数据流图是
(2)阶段产生的成果。
(2)A.需求分析B.总体设计C.详细设计D.程序编码
3.在进行面向对象设计时,采用设计模式能够(3)。
(3)A.复用相似问题的相同解决方案B.改善代码的平台可移植性
C.改善代码的可理解性D.增强软件的易安装性
4.Model-drivenanalysisemphasizesthedrawingofpictorialsystemmodelstodocumentandvalidatebothexistingand/orproposedsystems.Ultimately,thesystemmodelsbecomethe(5)fordesigningandconstructinganimprovedsystem.(6)issuchatechnique.Theemphasisinthistechniqueisprocess-centered.Systemsanalystsdrawaseriesofprocessmodelscalled(7).(8)isanothersuchtechniquethatintegratesdataandprocessconcernsintoconstructscalledobjects.
(4)A.PrototypingB.AcceleratedC.Model-drivenD.Iterative
(5)A.imageB.pictureC.layoutD.blueprint
(6)A.StructuredanalysisB.InformationEngineering
C.DiscoveryPrototypingD.Object-Orientedanalysis
(7)A.PERTB.DFDC.ERDD.UML
(8)A.StructuredanalysisB.InformationEngineering
C.DiscoveryPrototypingD.Object-Orientedanalysis
(二)问答题
试题一软件设计必做样题
阅读下列说明以及图1-1和图1-2,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
某电话公司决定开发一个管理所有客户信息的交互式网络系统。
系统的功能如下:
1.浏览客户信息:
任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。
2.登录:
电话公司授予每个客户一个帐号。
拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。
3.修改个人信息:
客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。
4.删除客户信息:
只有公司的管理人员才能删除不再接受公司服务的客户的信息。
系统采用面向对象方法进行开发,在开发过程中认定出的类如下表所示:
编号
类名
描述
1
InternetClient
网络用户
2
CustomerList
客户信息表,记录公司所有客户的信息
3
Customer
客户信息,记录单个客户的信息
4
CompanyCustomer
公司客户
5
InternalClient
公司的管理人员
图1-1
图1-2
【问题1】
在需求分析阶段,采用UML的用例图(usecasediagram)描述系统功能需求,如图1-1所示。
请指出图中的A、B、C和D分别是哪个用例?
【问题2】
在UML中,重复度(Multiplicity)定义了某个类的一个实例可以与另一个类的多少个实例相关联。
通常把它写成一个表示取值范围的表达式或者一个具体的值。
例如图3-2中的类InternetClient和CustomerList,InternetClient端的“0..*”表示:
一个CustomerList的实例可以与0个或多个InternetClient的实例相关联;CustomerList端的“1”表示:
一个InternetClient的实例只能与一个CustomerList的实例相关。
请指出图1-2中
(1)到(4)处的重复度分别为多少?
【问题3】
类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。
在面向对象建模中,提供了四种关系:
依赖(dependency)、概括(generalization)、关联(association)和聚集(aggregation)。
请分别说明这四种关系的含义,并说明关联和聚集之间的主要区别。
试题二C语言选做样题
阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【预备知识】
(1)对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。
例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如下所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)。
最优二叉树
数组下标
ch
weight
parent
lchild
rchild
1
a
2
5
0
0
2
b
7
7
0
0
3
c
4
5
0
0
4
d
5
6
0
0
5
6
6
1
3
6
11
7
4
5
7
18
0
2
6
结构数组Ht
结构数组Ht的类型定义如下:
#defineMAXLEAFNUM20
structnode{
charch;/*当前结点表示的字符,对于非叶子结点,此域不用*/
intweight;/*当前结点的权值*/
intparent;/*当前结点的父结点的下标,为0时表示无父结点*/
intlchild,rchild;
/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/
}Ht[2*MAXLEAFNUM];
(2)用‘0’或‘1’标识最优二叉树中分支的规则是:
从一个结点进入其左(右)孩子结点,就用‘0’(‘1’)标识该分支(示例见上图)。
(3)若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由‘0’、‘1’组成的一个序列,称此序列为该叶子结点的前缀编码。
例如上图所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。
【函数说明】
函数voidLeafCode(introot,intn)的功能是:
采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。
其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。
在构造过程中,将Ht[p].weight域用作被遍历结点的遍历状态标志。
【函数】
char**Hc;
voidLeafCode(introot,intn)
{/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/
inti,p=root,cdlen=0;charcode[20];
Hc=(char**)malloc((n+1)*sizeof(char*));/*申请字符指针数组*/
for(i=1;i<=p;++i)
Ht[i].weight=0;/*遍历最优二叉树时用作被遍历结点的状态标志*/
while(p){/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/
if(Ht[p].weight==0){/*向左*/
Ht[p].weight=1;
if(Ht[p].lchild!
=0){p=Ht[p].lchild;code[cdlen++]=′0′;}
elseif(Ht[p].rchild==0){/*若是叶子结点,则保存其前缀编码*/
Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));
(1);strcpy(Hc[p],code);
}
}
elseif(Ht[p].weight==1){/*向右*/
Ht[p].weight=2;
if(Ht[p].rchild!
=0){p=Ht[p].rchild;code[cdlen++]=′1′;}
}
else{/*Ht[p].weight==2,回退*/
Ht[p].weight=0;
p=
(2);(3);/*退回父结点*/
}
}/*while结束*/
}
【函数说明】
函数voidDecode(char*buff,introot)的功能是:
将前缀编码序列翻译成叶子结点的字符序列,并输出。
其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。
【函数】
voidDecode(char*buff,introot)
{intpre=root,p;
while(*buff!
=′\0′){
p=root;
while(p!
=0){/*存在下标为p的结点*/
pre=p;
if((4))p=Ht[p].lchild;/*进入左子树*/
elsep=Ht[p].rchild;/*进入右子树*/
buff++;/*指向前缀编码序列的下一个字符*/
}
(5);
printf("%c",Ht[pre].ch);
}
}
试题三C++语言选做样题
阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。
当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。
一个OfficeDoc对象能够关联一组DocExplorer对象。
当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。
以下代码写在一个C++源文件中,能够正确编译通过。
【C++代码】
#include
constOBS_MAXNUM=20;//最多与OfficeDoc对象相关联的DocExplorer对象的个数
(1);
classDocExplorer{//关注OfficeDoc公文对象的类
public:
DocExplorer(
(2)*doc);//构造函数
(3)voidupdate(OfficeDoc*doc)=0;//更新自身状态的函数
//其它相关属性和方法省略
};
classOfficeDoc{//公文类
private:
DocExplorer*myObs[OBS_MAXNUM];
//关注此公文类的DocExplorer类对象指针数组
intindex;//与OfficeDoc对象关联的DocExplorer对象的个数
public:
OfficeDoc(){
index=0;
}
voidattach(DocExplorer*o){
//将一DocExplorer对象与OfficeDoc对象相关联
if(index>=OBS_MAXNUM||o==NULL)return;
for(intloop=0;loopif(myObs[loop]==o)return;
myObs[index]=o;
index++;
}
voiddetach(DocExplorer*o){
//解除某DocExplorer对象与OfficeDoc对象的关联
if(o==NULL)return;
for(intloop=0;loopif(myObs[loop]==o){
if(loop<=index-2)myObs[loop]=myObs[index-1];
myObs[index-1]=NULL;
index--;
break;
}
}
}
private:
voidnotifyObs(){//通知所有的DocExplorer对象更改自身状态
for(intloop=0;loopmyObs[loop]->(4);//DocExplorer对象更新自身状态
}
}
//其它公文类的相关属性和方法
};
DocExplorer:
:
DocExplorer(OfficeDoc*doc){//DocExplorer类对象的构造函数
doc->(5);//将此DocExplorer对象与doc对象相关联
}
试题四Java语言选做样题
阅读以下说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在一公文处理系统中,开发者定义了一个公文类Of