本书由中国系统分析员顾问团组织编写,作为计算机技术与软件专业资格(水平)考试中的软件设计师级别的考试辅导指定教程。在参考和分析历年考试试题的基础上,着重对新版的考试大纲规定的内容有重点地细化和深化。全书分为上、下两册,内容涵盖了最新的软件设计师考试大纲(2004年修订版)的所有知识点,书中详尽分析和解答了1991-2004年的软件设计师(高级程序员)
第1章 软件设计概述 1
1.1 软件设计基本原则 1
1.1.1 信息隐蔽 1
1.1.2 模块独立性 1
1.2 结构化设计方法 5
1.2.1 系统结构图中的模块 5
1.2.2 系统结构图中的主要成分 7
1.2.3 常用的系统结构图 8
1.3 面向对象设计 11
1.3.i 面向对象的概念 11
1.3.2 面向对象分析方法 12
1.3.3 面向对象设计 12
1.4 用户界面设计 17
1.5 设计评审 18
主要参考文献 20
第2章 数据流图设计 21
2.1 数据流图 21
2.1.1 数据流图基本图形符号 21
2.1.2 数据流图设计要略 22
2.1.3 数据字典 23
2.1.4 分层数据流图 24
2.1.5 分层数据流图的解答要点 24
2.2 系统流程图 25
2.2.1 系统流程图基本处理 25
2.2.2 系统流程图解题要点 26
2.3 程序流程图 27
2.3.1 程序流程图的控制结构 27
2.3.2 程序流程图解题要点 27
2.4 历年试题分析 27
主要参考文献 90
第3章数据设计 91
3.1 数据设计的步骤和原则 91
3.1.1 数据设计步骤 91
3.1.2 数据设计原则 91
3.2 数据字典 g2
3.3 数据字典设计 93
3.3.1 数据流设计 93
3.3.2 数据元素字典设计 94
3.3.3 数据处理字典设计 95
3.3.4数据结构字典设计 96
3.3.5 数据存储设计 96
3.4设计数据的逻辑描述 97
3.5 数据设计的逻辑分析工具 97
3.5.1 结构化语言 98
3.5.2 判定表(Decision Table) 99
3.5.3 判定树(Decision Tree) 100
3.6 数据保护性设计 100
3.7 例题分析 100
主要参考文献 119
第4章 文件设计 121
4.1 文件的基本概念 121
4.2 文件设计概述 121
4.2.1 文件设计的过程 121
4.2.2 顺序文件 122
4.2.3 索引文件 123
4.2.4 散列文件 123
4.2.5 倒排文件 123
4.3 确定文件的存储介质 125
4.4 确定文件的记录格式 125
4.5 估算存取时间 126
4.6 估算文件容量 126
4.7 例题分析 127
主要参考文献 153
第5章 测试用例设计 155
5.1 软件测试概述 155
5.2 边界值分析及用例设计 157
5.3 等价类划分及用例设计 158
5.4 语句覆盖及用例设计 160
5.5 判定覆盖及用例设计 161
5.6 条件覆盖及用例设计 162
5.7 判定/条件覆盖及用例设计 163
5.8 条件组合覆盖及用例设计165
5.9 路径测试及用例设计 166
5.10 例题分析 166
主要参考文献 174
第6章 软件界面设计 175
6.1 输入输出的识别与分类 175
6.2 理解用户界面 175
6.3 界面设计指导原则 176
主要参考文献 179
第7章 UML分析与设计 181
7.1 UML概述 181
7.1.1 UML是什么 181
7.1.2 UML的发展历史 181
7.1.3 UML结构 183
7.1.4 UML的主要特点 184
7.1.5 UML的应用领域 184
7.2 用例图 185
7.2.1 用例基本概念 185
7.2.2 构建用例模型 187
7.2.3 用例的粒度 190
7.3 类图和对象图 191
7.3.1 类与类图的基本概念 191
7.3.2 构建概念模型 194
7.3.3 类模型的发展 196
7.4 交互图 197
7.4.1 顺序图 197
7.4.2 协作图 198
7.5 状态图 198
7.6 活动图 199
7.7 构件图 201
7.8 部署图 202
7.9 例题分析 203
主要参考文献 207
第8章 数据库设计 209
8.1 数据的规范化 209
8.1.1 函数依赖 209
8.1.2码 209
8.1.3 1NF 210
8.1.4 2NF 210
8.1.5 3NF 211
8.1.6 BCNF 211
8.1.7 多值依赖和4NF 211
8.1.8 非规范化处理 212
8.2 数据库设计概述 212
8.2.1 数据库设计特点 213
8.2.2 数据库设计方法 213
8.2.3 数据库设计的基本步骤 218
8.3 需求分析 219
8.3.1 需求分析的任务 219
8.3.2 确定设计目标 222
8.3.3 数据收集与分析 222
8.3.4 面向数据的方法 223
8.3.5 需求说明书 227
8.4 概念结构设计 229
8.4.1 概念结构 230
8.4.2 概念结构设计的方法和步骤 231
8.4.3 数据抽象和局部视图设计 231
8.4.4 视图的集成 244
8.5 逻辑结构设计 252
8.5.1 E-R图向关系模型的转换 253
8.5.2 设计用户子模式 257
8.5.3 数据模型优化 257
8.6 数据库物理设计 259
8.6.1 存储记录的设计 260
8.6.2 关系数据库的集簇设计 261
8.6.3 存取路径的设计 263
8.6.4 物理结构设计的性能评价 266
8.7 本章例题分析 267
主要参考文献 276
第9章 常用算法设计 277
9.1 算法设计概述 277
9.2 迭代法 278
9.2.1 迭代求解方程 279
9.2.2 迭代求解方程组的解 280
9.3 穷举法 282
9.3.1 g.g合问题 282
9.3.2 背包问题 283
9.3.3 变量和相等问题 284
9.4 递推法 286
9.4.1 最小数生成问题 286
9.4.2 阶乘计算 287
9.5 递归法 288
9.5.1 斐波那契(Fibonacci)数列 290
9.5.2 字典排问题 290
9.5.3 本节例题分析 292
9.6 贪婪法 302
9.6.1 背包问题 303
9.6.2 装箱问题 307
9.6.3 马踏棋盘问题 310
9.6.4 货郎担问题 313
9.6.5 哈夫曼编码问题 317
9.6.6 本节例题分析 322
9.7 回溯法 328
9.7.1 g-g-合问题 330
9.7.2 子集和问题 331
9.7.3 八皇后问题 333
9.7.4 迷宫问题 336
9.7.5 本节例题分析 342
9.8 分治法 350
9.8.1 二分法查找 351
9.8.2 汉诺塔问题 352
9.9 其他典型例程汇集 354
9.9.1 有序链表的合并 354
9.9.2 链表多项式加法 354
9.9.3 约瑟夫环问题 357
9.9.4 3良行线路问题 359
9.9.5 迷宫最短路径问题 363
主要参考文献 365
第10章 CSAI模拟试题及试题分析
与解答 367
10.1 模拟试题一上午试题 367
10.2 模拟试题一下午试题 373
10.3 模拟试题二上午试题 380
10.4 模拟试题二下午试题 387
10.5 模拟试题一上午试题分析与解答 393
10.6 模拟试题一下午试题分析与解答 399
10.7 模拟试题二上午试题分析与解答 405
10.8 模拟试题二下午试题分析与解答 412
附录 软件设计师考试大纲(2004年新版) 421
考试说明 421
考试范围 422
考试科目1:计算机与软件工程知识 422
考试科目2:软件设计 426
计算机技术与软件专业技术资格(水平)考试己走过了十几年历程,我们深感该考试对于推进国家信息化建设和软件产业化发展起着重要的作用。
计算机技术与软件专业技术资格(水平)考试广泛调动了专业技术人员工作和学习的积极性,为选拔高素质的专业技术人员起到了积极的促进和推动作用,并且为广大的专业技术人员的专业技术水平和职称的评定提供了一个客观、公正的机会,使得优秀、年轻的专业技术人才能够脱颖而出。
然而,计算机技术与软件专业技术资格(水平)考试是一个难度很大的考试,十多年来,考生平均通过率仅为10%左右。主要原因是考试范围十分广泛,牵涉到计算机专业的每门课程,还要加上数学、外语、系统工程、信息化和知识产权等知识,且注重考查新技术和新方法的应用。考试不但注重广度,而且还有一定的深度。特别是高级资格考试(系统分析师考试),不但要求考生具有扎实的理论知识,还要具有丰富的实践经验。
正是因为考试范围广,如果单凭考试指定教材进行复习,是难以满足学习和考试要求的。《软件设计师考试考点分析与真题详解》是为全国计算机技术与软件专业技术资格(水平)中的软件设计师级别考试编写的辅导用书,分为“计算机与软件工程知识篇”、“软件设计技术篇”两册。其中“计算机与软件工程知识篇”介绍了计算机系统综合知识,内容涵盖了最新的软件设计师考试大纲(2004年新版)的所有知识点。“软件设计技术篇”介绍了软件设计知识,内容包括软件设计的基本方法、数据库设计、常用算法设计等,书中选取了1991--2004年软件设计师(高级程序员)试题的重点和难点部分,并进行了详细的分析和解答。
《软件设计师考试考点分析与真题详解》在参考和分析历年考试试题的基础上,着重对新版的考试大纲的内容有重点地进行了细化和深化。准备考试的人员可通过阅读本书掌握考试大纲规定的知识,熟悉考试方法、试题形式、试题的深度和广度,以及内容的分布、解答问题的方法和技巧等。
本书不仅对准备参加计算机技术与软件专业技术资格(水平)考试的读者有很大的作用,而且对从事软件设计工作的IT从业人员、计算机教学工作的老师,以及参加其他类似考试的读者也是有帮助的。
本书由中国系统分析员顾问团(http://www.csai.cn)组编,张友生、徐锋、周峻松、施游、万火、罗永红、王勇、漆英等参加了本书的编写和审稿工作。
“计算机与软件工程知识篇”第1、5、6、8章由张友生编写,第2章由谢睿、施游编写,第3章由彭世强编写,第4章由殷建民、徐锋编写,第7章由简亮编写,第9章由陈建忠编写,第10、11章由徐锋编写,第12章由张友生、徐锋、田俊国、郑建兵编写,第13章由郑睿、漆英编写,第14、15章由刘兴编写。
“软件设计技术篇”第1、4章由王勇编写,第2章由徐鹏飞编写,第3章由施游编写,第5章由陈建忠编写,第6章由相红利编写,第7章由周峻松编写,第8章由聂作明编写,第9章由施游和王勇编写。
在本书出版之际,要特别感谢全国计算机技术与软件专业技术资格(水平)考试办公室的命题专家们。编者在本书中引用了历年考试的部分真题。同时,本书在编写的过程中参考了许多相关的资料和书籍,在此恕不一一列举(详见各章的参考文献),编者在此对这些参考文献的作者表示真诚的感谢。
读者的进步是我们的心愿。您如果发现书中有任何疑惑之处,可在中国系统分析员网站(http://vyww.csai.cn)“技术论坛”中的“CSAI辅导教程”版块上与作者们进行交流。
由于编者水平有限,且本书涉及的知识点较多,书中难免有不妥和错误之处,编者诚恳地期望各位专家和读者不吝赐教,对此,我们将深为感激。
编写委员会