描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302491224丛书名: 全国计算机技术与软件专业技术资格(水平)考试指定用书
软件设计师教程(第5版)依据2018年审定通过的软件设计师考试大纲大纲编写,涵盖软件设计师(中级)岗位所要求的主要知识及应用技术。通过软件设计师考试的考生可以获得由人力资源和社会保障部、工业和信息化部认可的职业资格证书,本考试为中级资格认证。
本书作为中级职称的全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)指定教材,具有比较权威的指导意义。本书根据《软件设计师考试大纲》(2018年审定通过)的重点内容,组织了12章的内容,考生在学习教材内容的同时,还须对照考试大纲,认真学习和复习大纲的知识点。 本书是在《软件设计师考试大纲》的指导下,对《软件设计师教程(第4版)》进行了认真修编,部分章节是重写后形成的。在本书中,强化了软件工程部分的知识,增加了Web应用系统分析与设计知识。 本书适合参加本级别考试的考生和大学在校生作为教材。
目 录
第1章 计算机网络概论… 1
1.1 计算机系统基础知识… 1
1.1.1 计算机系统硬件基本组成… 1
1.1.2 中央处理单元… 1
1.1.3 数据表示… 4
1.1.4 校验码… 10
1.2 计算机体系结构… 12
1.2.1 计算机体系结构的发展… 12
1.2.2 存储系统… 20
1.2.3 输入/输出技术… 31
1.2.4 总线结构… 35
1.3 安全性、可靠性与系统性能评测
基础知识… 38
1.3.1 计算机安全概述… 38
1.3.2 加密技术和认证技术… 40
1.3.3 计算机可靠性… 48
1.3.4 计算机系统的性能评价… 51
第2章 程序设计语言基础知识… 56
2.1 程序设计语言概述… 56
2.1.1 程序设计语言的基本概念… 56
2.1.2 程序设计语言的基本成分… 61
2.2 语言处理程序基础… 67
2.2.1 汇编程序基本原理… 67
2.2.2 编译程序基本原理… 69
2.2.3 解释程序基本原理… 96
第3章 数据结构… 99
3.1 线性结构… 99
3.1.1 线性表… 99
3.1.2 栈和队列… 104
3.1.3 串… 108
3.2 数组、矩阵和广义表… 113
3.2.1 数组… 113
3.2.2 矩阵… 115
3.2.3 广义表… 116
3.3 树… 118
3.3.1 树与二叉树的定义… 118
3.3.2 二叉树的性质与存储结构… 119
3.3.3 二叉树的遍历… 122
3.3.4 线索二叉树… 125
3.3.5 二叉树… 126
3.3.6 树和森林… 130
3.4 图… 133
3.4.1 图的定义与存储… 134
3.4.2 图的遍历… 138
3.4.3 生成树及小生成树… 140
3.4.4 拓扑排序和关键路径… 143
3.4.5 短路径… 146
3.5 查找… 149
3.5.1 查找的基本概念… 149
3.5.2 静态查找表的查找方法… 150
3.5.3 动态查找表… 154
3.5.4 哈希表… 161
3.6 排序… 165
3.6.1 排序的基本概念… 165
3.6.2 简单排序… 165
3.6.3 希尔排序… 168
3.6.4 快速排序… 169
3.6.5 堆排序… 170
3.6.6 归并排序… 173
3.6.7 基数排序… 174
3.6.8 内部排序方法小结… 175
3.6.9 外部排序… 176
第4章 操作系统知识… 180
4.1 操作系统概述… 180
4.1.1 操作系统的基本概念… 180
4.1.2 操作系统分类及特点… 181
4.1.3 操作系统的发展… 185
4.2 进程管理… 185
4.2.1 基本概念… 185
4.2.2 进程的控制… 189
4.2.3 进程间的通信… 189
4.2.4 管程… 193
4.2.5 进程调度… 195
4.2.6 死锁… 198
4.2.7 线程… 202
4.3 存储管理… 202
4.3.1 基本概念… 203
4.3.2 存储管理方案… 204
4.3.3 分页存储管理… 205
4.3.4 分段存储管理… 208
4.3.5 段页式存储管理… 209
4.3.6 虚拟存储管理… 211
4.4 设备管理… 216
4.4.1 设备管理概述… 216
4.4.2 I/O软件… 217
4.4.3 设备管理采用的相关技术… 218
4.4.4 磁盘调度… 221
4.5 文件管理… 224
4.5.1 文件与文件系统… 224
4.5.2 文件的结构和组织… 225
4.5.3 文件目录… 227
4.5.4 存取方法和存储空间的管理… 229
4.5.5 文件的使用… 231
4.5.6 文件的共享和保护… 231
4.5.7 系统的安全与可靠性… 233
4.6 作业管理… 234
4.6.1 作业与作业控制… 235
4.6.2 作业调度… 236
4.6.3 用户界面… 238
第5章 软件工程基础知识… 239
5.1 软件工程概述… 239
5.1.1 计算机软件… 240
5.1.2 软件工程基本原理… 241
5.1.3 软件生存周期… 243
5.1.4 软件过程… 245
5.2 软件过程模型… 247
5.2.1 瀑布模型(Waterfall Model)… 248
5.2.2 增量模型(Incremental
Model)… 249
5.2.3 演化模型(Evolutionary
Model)… 250
5.2.4 喷泉模型
(Water Fountain Model)… 252
5.2.5 基于构件的开发模型
(Component-based
Development Model)… 252
5.2.6 形式化方法模型(Formal
Methods Model)… 253
5.2.7 统一过程(UP)模型… 253
5.2.8 敏捷方法(Agile
Development)… 254
5.3 需求分析… 256
5.3.1 软件需求… 256
5.3.2 需求分析原则… 257
5.3.3 需求工程… 257
5.4 系统设计… 260
5.4.1 概要设计… 261
5.4.2 详细设计… 262
5.5 系统测试… 262
5.5.1 系统测试与调试… 262
5.5.2 传统软件的测试策略… 264
5.5.3 测试面向对象软件… 271
5.5.4 测试Web应用… 272
5.5.5 测试方法… 273
5.5.6 调试… 276
5.6 运行和维护知识… 278
5.6.1 系统转换… 278
5.6.2 系统维护概述… 279
5.6.3 系统评价… 283
5.7 软件项目管理… 284
5.7.1 软件项目管理涉及的范围… 284
5.7.2 软件项目估算… 287
5.7.3 进度管理… 289
5.7.4 软件项目的组织… 292
5.7.5 软件配置管理… 294
5.7.6 风险管理… 296
5.8 软件质量… 300
5.8.1 软件质量特性… 300
5.8.2 软件质量保证… 302
5.8.3 软件评审… 304
5.8.4 软件容错技术… 306
5.9 软件度量… 307
5.9.1 软件度量分类… 307
5.9.2 软件复杂性度量… 309
5.10 软件工具与软件开发环境… 311
5.10.1 软件工具… 311
5.10.2 软件开发环境… 313
第6章 结构化开发方法… 315
6.1 系统分析与设计概述… 315
6.1.1 系统分析概述… 315
6.1.2 系统设计的基本原理… 317
6.1.3 系统总体结构设计… 319
6.1.4 系统文档… 323
6.2 结构化分析方法… 325
6.2.1 结构化分析方法概述… 325
6.2.2 数据流图… 325
6.2.3 数据字典(DD)… 335
6.3 结构化设计方法… 337
6.3.1 结构化设计的步骤… 337
6.3.2 数据流图到软件体系结构的
映射… 338
6.4 WebApp分析与设计… 340
6.4.1 WebApp的特性… 341
6.4.2 WebApp需求模型… 341
6.4.3 WebApp设计… 344
6.5 用户界面设计… 346
6.5.1 用户界面设计的黄金原则… 346
6.5.2 用户界面的分析与设计… 348
6.5.3 用户界面设计问题… 349
前 言
全国计算机技术与软件专业技术资格(水平)考试实施至今已经历了二十余年,在社会上产生了很大的影响,对我国软件产业的形成和发展做出了重要的贡献。为了适应我国计算机信息技术发展的需求,人力资源和社会保障部、工业和信息化部决定将考试的级别拓展到计算机信息技术行业的各个方面,以满足社会上对各种计算机信息技术人才的需要。
编者受全国计算机专业技术资格考试办公室委托,对《软件设计师教程(第4版)》进行改写,以适应新的考试大纲要求。在考试大纲中,要求考生掌握的知识面很广,每个章节的内容都能构成相关领域的一门甚至多门课程,因此编写的难度很高。考虑到参加考试的人员已有一定的基础,所以本书中只对考试大纲中所涉及的知识领域的要点加以阐述,但限于篇幅所限,不能详细地展开,请读者谅解。
全书共分12章,各章节内容安排如下:
第1章主要介绍计算机系统基础知识、计算机体系结构以及安全性、可靠性和系统性能评测基础。
第2章主要介绍程序设计语言的基本概念与基本成分,阐述了汇编程序、编译程序与解释程序的基本原理。
第3章主要介绍数据结构的基础知识,包括线性结构、数组、广义表、树和图,以及查找和排序的基本算法。
第4章主要介绍操作系统基本概念与分类及特点、进程管理、存储管理、设备管理、文件管理、作业管理等。
第5章主要介绍软件工程中软件过程与过程模型、需求分析与需求工程、系统设计、系统测试、系统运行与维护、软件项目管理、软件质量、软件度量、软件工具与软件开发环境基础知识。
第6章主要介绍系统分析与设计、结构化分析与设计、Web应用系统分析与设计、用户界面设计基础知识。
第7章主要介绍面向对象的基本概念和面向对象开发技术,包括面向对象的分析与设计方法,UML以及设计模式的概念和应用。
第8章主要介绍算法设计与分析的基本概念,包括分治法、动态规划法、贪心法、回溯法、分支界限法、概率算法、近似算法、数据挖掘算法及智能优化算法。
第9章主要介绍数据库的基本概念、数据模型、关系代数、SQL语言、规范化理论和事务处理等控制功能。
第10章主要介绍网络与信息安全基础知识,包括网络体系结构、网络互连设备、网络构件、网络协议、网络应用、信息安全和网络安全方面的基础知识。
第11章主要介绍标准化与知识产权基础知识。
第12章主要介绍结构化分析与设计、数据库分析与设计、面向对象分析与设计、算法分析与设计以及面向过程、面向对象的程序设计与实现。
本书第1章由张淑平、马志欣编写,第2章由张淑平编写,第3章由张淑平、陈静玉、宋胜利编写,第4章由王亚平编写,第5章、第6章、第7章由霍秋艳、褚华编写,第8章由覃桂敏、褚华编写,第9章由王亚平编写,第10章由严体华编写,第11章由刘强编写,第12章由王亚平、褚华、霍秋艳、覃桂敏、张淑平编写,后由霍秋艳、褚华统稿。
在本书的编写过程中,参考了许多相关的书籍和资料,编者在此对这些参考文献的作者表示感谢。同时感谢清华大学出版社在本书出版过程中所给予的支持和帮助。
因水平有限,书中难免存在欠妥之处,望读者指正,以利改进和提高。
编 者
2018年1月
第5章 软件工程基础知识 本章介绍软件工程的相关基础知识,主要内容包括软件过程与过程模型、需求分析、软件设计、软件测试、软件运行与维护、软件项目管理、软件质量、软件度量、软件工具与软件开发环境等相关知识。5.1 软件工程概述 早期的软件主要指程序,程序的开发采用个体工作方式,开发工作主要依赖于开发人员的个人技能和程序设计技巧。当时的软件通常缺少与程序有关的文档,软件开发的实际成本和进度往往与预计的相差甚远,软件的质量得不到保证,开发出来的软件常常不能使用户满意。随着计算机应用需求的不断增长,软件的规模也越来越大,然而软件开发的生产率远远跟不上计算机应用的迅速增长。此外,由于软件开发时缺少好的方法指导和工具辅助,同时又缺少相关文档,使得大量已有的软件难以维护。上述这些问题严重地阻碍了软件的发展,20世纪60年代中期,人们把上述软件开发和维护过程中所遇到的各种问题称为“软件危机”。 1968年,在德国召开的NATO(North Atlantic Treaty Organization,北大西洋公约组织)会议上首次提出了“软件工程”这个名词,希望用工程化的原则和方法来克服软件危机。在此以后,人们开展了软件开发模型、开发方法、工具与环境的研究,提出了瀑布模型、演化模型、螺旋模型和喷泉模型等开发模型,出现了面向数据流方法、面向数据结构的方法、面向对象方法等开发方法,以及一批CASE(Computer Aided Software Engineering,计算机辅助的软件工程)工具和环境。现在,软件工程已经成为计算机软件的一个重要分支和研究方向。 软件工程是指应用计算机科学、数学及管理科学等原理(如图5-1所示),以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。软件工程涉及软件开发、维护、管理等多方面的原理、方法、工具与环境,限于篇幅,本章不能对软件工程做全面的介绍。根据软件设计考试大纲的要求,本章着重介绍软件开发过程中的原理,其他内容只做简单的介绍。
图5-1 软件工程学的范畴5.1.1 计算机软件 计算机软件是指计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据(如数字、文字、图形、图像、声音等,它们只是表示,而无含义)或信息(数据及有关的含义)。处理规则一般指处理的动作和步骤。文档是为了便于了解程序所需的阐述性资料。 按照软件的应用领域,可以将计算机软件分为十大类。 1. 系统软件 系统软件是一整套服务于其他程序的程序。某些系统软件处理复杂但是确定的信息结构。另一些系统应用程序(如操作系统构件、驱动程序、网络软件、远程通信处理器)主要处理的是不确定的数据。无论何种情况,系统软件多具有以下特点:和计算机硬件大量交互;多用户大量使用;需要调度、资源共享和复杂进程管理的同步操作;复杂的数据结构以及多种外部 接口。 2. 应用软件 应用软件是解决特定业务需要的独立应用程序。这类应用软件处理商务或技术数据,以协助业务操作和管理或技术决策。除了传统数据处理的应用程序,应用软件也被用于业务功能的实时控制(例如销售点的交易处理、实时制造过程控制等)。 3. 工程/科学软件 这类软件通常带有“数值计算”算法的特征。工程/科学软件涵盖了广泛的应用领域,从天文学到火山学,从自动应力分析到航天飞机轨道动力学,从分子生物学到自动制造业。不过,当今科学工程领域的应用软件已经不仅仅局限于传统的数值算法,计算机辅助设计、系统仿真和其他的交互性应用程序已经呈现出实时性甚至具有系统软件的特性。 4. 嵌入式软件 嵌入式软件存在于某个产品或系统中,可实现和控制面向终使用者和系统本身的特性和功能。嵌入式软件可以执行有限但难于实现的功能(例如,微波炉的按键控制)或者提供重要的功能和控制能力(例如,汽车中的燃油控制、仪表板显示、刹车系统等汽车电子功能)。 5. 产品线软件 产品为多个不同用户的使用提供特定功能。产品线软件关注有限的特定专业市场(例如库存控制产品)或大众消费品市场(例如,文字处理、多媒体、娱乐、数据库管理等)。 6. Web应用 Web应用(WebApp)是一类以网络为中心的软件,其概念涵盖了宽泛的应用程序产品。简单可以是一组超文本链接文件,仅仅用文本和有限的图形表达信息。然而,随着Web 2.0的出现,网络应用正在发展为复杂的计算环境,不仅为终用户提供独立的特性、计算功能和内容信息,还与企业数据库和商务应用程序相结合。绝大多数WebApp具备网络密集性、并发性、无法预知的负载量、性能、可用性和数据驱动属性。 7. 人工智能软件 人工智能软件利用非数值算法解决计算和直接分析无法解决的复杂问题。这个领域的应用包括机器人、专家系统、模式识别、人工神经网络、定理证明和博弈等。
评论
还没有评论。