• 软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)
  • 软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)
  • 软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)
  • 软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)
  • 软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)
21年品牌 40万+商家 超1.5亿件商品

软件设计师教程(第5版全国计算机技术与软件专业技术资格水平考试指定用书)

全新正版 极速发货

91.09 7.7折 119 全新

库存6件

广东广州
认证卖家担保交易快速发货售后保障

作者编者:褚华//霍秋艳

出版社清华大学

ISBN9787302491224

出版时间2018-02

装帧其他

开本其他

定价119元

货号30093154

上书时间2024-06-29

大智慧小美丽

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介


目录
第1章 计算机网络概论
  1.1  计算机系统基础知识
    1.1.1  计算机系统硬件基本组成
    1.1.2  中央处理单元
    1.1.3  数据表示
    1.1.4  校验码
  1.2  计算机体系结构
    1.2.1  计算机体系结构的发展
    1.2.2  存储系统
    1.2.3  输入/输出技术
    1.2.4  总线结构
  1.3  安全性、可靠性与系统性能评测基础知识
    1.3.1  计算机安全概述
    1.3.2  加密技术和认证技术
    1.3.3  计算机可靠性
    1.3.4  计算机系统的性能评价
第2章 程序设计语言基础知识
  2.1  程序设计语言概述
    2.1.1  程序设计语言的基本概念
    2.1.2  程序设计语言的基本成分
  2.2  语言处理程序基础
    2.2.1  汇编程序基本原理
    2.2.2  编译程序基本原理
    2.2.3  解释程序基本原理
第3章 数据结构
  3.1  线性结构
    3.1.1  线性表
    3.1.2  栈和队列
    3.1.3  串
  3.2  数组、矩阵和广义表
    3.2.1  数组
    3.2.2  矩阵
    3.2.3  广义表
  3.3  树
    3.3.1  树与二叉树的定义
    3.3.2  二叉树的性质与存储结构
    3.3.3  二叉树的遍历
    3.3.4  线索二叉树
    3.3.5  优二叉树
    3.3.6  树和森林
  3.4  图
    3.4.1  图的定义与存储
    3.4.2  图的遍历
    3.4.3  生成树及小生成树
    3.4.4  拓扑排序和关键路径
    3.4.5  短路径
  3.5  查找
    3.5.1  查找的基本概念
    3.5.2  静态查找表的查找方法
    3.5.3  动态查找表

内容摘要
本书作为中级职称的全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)指定教材,具有比较权威的指导意义。本书根据《软件设计师考试大纲》(2018年审定通过)的重点内容,组织了12章的内容,考生在学习教材内容的同时,还须对照考试大纲,认真学习和复习大纲的知识点。
  本书是在《软件设计师考试大纲》的指导下,对《软件设计师教程(第4版)》进行了认真修编,部分章节是重写后形成的。在本书中,强化了软件工程部分的知识,增加了Web应用系统分析与设计知识。
  本书适合参加本级别考试的考生和大学在校生作为教材。

精彩内容
第5章软件工程基础知识  本章介绍软件工程的相关基础知识,主要内容包括软件过程与过程模型、需求分析、软件设计、软件测试、软件运行与维护、软件项目管理、软件质量、软件度量、软件工具与软件开发环境等相关知识。
5.1软件工程概述  早期的软件主要指程序,程序的开发采用个体工作方式,开发工作主要依赖于开发人员的个人技能和程序设计技巧。当时的软件通常缺少与程序有关的文档,软件开发的实际成本和进度往往与预计的相差甚远,软件的质量得不到保证,开发出来的软件常常不能使用户满意。随着计算机应用需求的不断增长,软件的规模也越来越大,然而软件开发的生产率远远跟不上计算机应用的迅速增长。此外,由于软件开发时缺少好的方法指导和工具辅助,同时又缺少相关文档,使得大量已有的软件难以维护。上述这些问题严重地阻碍了软件的发展,20世纪60年代中期,人们把上述软件开发和维护过程中所遇到的各种问题称为“软件危机”。
  1968年,在德国召开的NATO(NorthAtlanticTreatyOrganization,北大西洋公约组织)会议上首次提出了“软件工程”这个名词,希望用工程化的原则和方法来克服软件危机。在此以后,人们开展了软件开发模型、开发方法、工具与环境的研究,提出了瀑布模型、演化模型、螺旋模型和喷泉模型等开发模型,出现了面向数据流方法、面向数据结构的方法、面向对象方法等开发方法,以及一批CASE(ComputerAidedSoftwareEngineering,计算机辅助的软件工程)工具和环境。现在,软件工程已经成为计算机软件的一个重要分支和研究方向。
  软件工程是指应用计算机科学、数学及管理科学等原理(如图5-1所示),以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。软件工程涉及软件开发、维护、管理等多方面的原理、方法、工具与环境,限于篇幅,本章不能对软件工程做全面的介绍。根据软件设计考试大纲的要求,本章着重介绍软件开发过程中的原理,其他内容只做简单的介绍。
图5-1软件工程学的范畴5.1.1计算机软件  计算机软件是指计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据(如数字、文字、图形、图像、声音等,它们只是表示,而无含义)或信息(数据及有关的含义)。处理规则一般指处理的动作和步骤。文档是为了便于了解程序所需的阐述性资料。
  按照软件的应用领域,可以将计算机软件分为十大类。
  1.系统软件  系统软件是一整套服务于其他程序的程序。某些系统软件处理复杂但是确定的信息结构。另一些系统应用程序(如操作系统构件、驱动程序、网络软件、远程通信处理器)主要处理的是不确定的数据。无论何种情况,系统软件多具有以下特点:和计算机硬件大量交互;多用户大量使用;需要调度、资源共享和复杂进程管理的同步操作;复杂的数据结构以及多种外部接口。
  2.应用软件  应用软件是解决特定业务需要的独立应用程序。这类应用软件处理商务或技术数据,以协助业务操作和管理或技术决策。除了传统数据处理的应用程序,应用软件也被用于业务功能的实时控制(例如销售点的交易处理、实时制造过程控制等)。
  3.工程/科学软件  这类软件通常带有“数值计算”算法的特征。工程/科学软件涵盖了广泛的应用领域,从天文学到火山学,从自动应力分析到航天飞机轨道动力学,从分子生物学到自动制造业。不过,当今科学工程领域的应用软件已经不仅仅局限于传统的数值算法,计算机辅助设计、系统仿真和其他的交互性应用程序已经呈现出实时性甚至具有系统软件的特性。
  4.嵌入式软件  嵌入式软件存在于某个产品或系统中,可实现和控制面向最终使用者和系统本身的特性和功能。嵌入式软件可以执行有限但难于实现的功能(例如,微波炉的按键控制)或者提供重要的功能和控制能力(例如,汽车中的燃油控制、仪表板显示、刹车系统等汽车电子功能)。
  5.产品线软件  产品为多个不同用户的使用提供特定功能。产品线软件关注有限的特定专业市场(例如库存控制产品)或大众消费品市场(例如,文字处理、多媒体、娱乐、数据库管理等)。
  6.Web应用  Web应用(WebApp)是一类以网络为中心的软件,其概念涵盖了宽泛的应用程序产品。最简单可以是一组超文本链接文件,仅仅用文本和有限的图形表达信息。然而,随着Web2.0的出现,网络应用正在发展为复杂的计算环境,不仅为最终用户提供独立的特性、计算功能和内容信息,还与企业数据库和商务应用程序相结合。绝大多数WebApp具备网络密集性、并发性、无法预知的负载量、性能、可用性和数据驱动属性。
  7.人工智能软件  人工智能软件利用非数值算法解决计算和直接分析无法解决的复杂问题。这个领域的应用包括机器人、专家系统、模式识别、人工神经网络、定理证明和博弈等。
  8.开放计算  无线网络的快速发展将促成真正的普适计算、分布式计算的实现。软件工程师所面临的挑战是如何开发系统和应用软件,以使移动设备、个人电脑和企业应用可以通过大量的网络设施进行通信。
  9.网络资源  现在,万维网已经快速发展为一个计算引擎和内容提供平台。软件工程师面临的新任务是构建一个简单而智能的应用程序,为全世界的最终用户市场提供服务。
  10.开源软件  开源软件就是开放系统应用程序的代码,使得很多人能够为软件开发做贡献,这种方式正在逐步成为一种趋势。软件工程师面临的挑战是开发可以自我描述的代码,更重要的是开发某种技术,以便于用户和开发人员都能够了解已经发生的改动,并且知道这些改动如何在软件中体现出来。
5.1.2软件工程基本原理  美国著名的软件工程专家B.W.Boehm于1983年提出了软件工程的7条基本原理。Boehm认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。
  1.用分阶段的生命周期计划严格管理  有统计表明,50%以上的失败项目是由于计划不周造成的。在软件开发与维护的漫长生命周期中,需要完成许多各种各样的工作。这条基本原理意味着应该把软件生命周期划分成若干个阶段,并相应地制订出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。Boehm认为,在软件的整个生存周期中应该制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划。
  2.坚持进行阶段评审  据统计结果显示,大部分错误是在编码之前造成的。根据Boehm等人的统计,设计错误占软件错误的63%,编码错误仅占37%,而且错误发现与改正得越晚,所需付出的代价越高。因此,在每个阶段都应进行严格的评审,以便尽早发现在软件开发过程中所犯的错误。
  3.实现严格的产品控制  在软件开发过程中不应随意改变需求,因为改变一项需求需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变用户需求是一种客观需要,这就要采用科学的产品控制技术来顺应这种要求。在改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。基准配置又称为基线配置,它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。基准配置管理也称为变动控制,一切有关修改软件的建议,特别是涉及基准配置的修改建议,都必须按照严格的规程进行评审,在获得批准以后才能实施修改。
  4.采用现代程序设计技术  从20世纪60年代和70年代的结构化软件开发技术到面向对象技术,从第一代、第二代语言到第四代语言,人们已经充分认识到:方法大于力气。采用先进的技术既可以提高软件开发的效率,又可以降低软件维护的成本。
  5.结果应能清楚地审查  软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难以评价和管理。为了更好地进行管理,应根据软件开发的总目标及完成期限尽量明确地规定开发小组的责任和产品标准,从而使所得到的结果能够清楚地审查。
  6.开发小组的人员应少而精  开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少得多;当开发小组为N人时,可能的通信信道为N(N?1)/2。可见,随着人数N的增大,通信开销将急剧增大。
  7.承认不断改进软件工程实践的必要性  遵循上述6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。但是它们只是对现有经验的总结和归纳,并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。因此,Boehm提出应把“承认不断改进软件工程实践的必要性”作为软件工程的第7条原理。根据这条原理,用户不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些,每个需求被赋予唯一的标识符,一旦标识出需求,就可以为需求建立跟踪表,每个跟踪表标识需求与其他需求或设计文档、代码、测试用例的不同版本间的关系。例如,特征跟踪表,记录需求如何与产品或系统特征相关联;来源跟踪表,记录每个需求的来源;依赖跟踪表,描述需求间如何关联等。
  这些跟踪表可以用于需求跟踪。在整个开发过程中,进行需求跟踪的目的是为了建立和维护从用户需求开始到测试之间的一致性与完整性,确保所有的实现是以用户需求为基础,所有的输出符合用户需求,并且全面覆盖了用户需求。需求跟踪有两种方式:正向跟踪和逆向跟踪。其中,正向跟踪以用户需求为切入点,检查《需求规约》中的每个需求是否都能在后继工作产品中找到对应点;逆向跟踪检查设计文档、代码、测试用例等工作产品是否都能在《需求规约》中找到出处。
5.4系统设计  在系统分析阶段,我们已经搞清楚了软件“做什么”的问题,并把这些需求通过规格说明书描述了出来,这也是目标系统的逻辑模型。进入设计阶段,要把软件“做什么”的逻辑模型转换成“怎么做”的物理模型,即着手实现软件系统的需求。
  系统设计的主要目的就是为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方案。
  系统设计的主要内容包括新系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计等。
  目前,已存在的多种系统设计方法,常用的设计方法有以下两种。
  (1)面向数据流的结构化设计方法(SD)。
  (2)面向对象的分析方法(OOD)。
  系统设计的基本任务大体上可以分为概要设计和详细设计两个步骤。数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。
5.1.3软件生存周期
  与其他事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡的许多阶段,一般称为软件生存周期。把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件的开发变得容易控制和管理。通常,软件生存周期包括可行性分析与项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动,可以将这些活动以适当的方式分配到不同的阶段去完成。
  1.可行性分析与项目开发计划  这个阶段主要确定软件的开发目标及其可行性。必须要回答的问题是:要解决的问题是什么?该问题有可行的解决办法吗?若有解决的办法,则需要多少费用?需要多少资源?需要多少时间?要回答这些问题,就要进行问题定义、可行性分析,制订项目开发计划。
  可行性分析与项目计划阶段的参加人员有用户、项目负责人和系统分析师。该阶段产生的主要文档有可行性分析报告和项目开发计划。
  2.需求分析  需求分析阶段的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。该阶段的参加人员有用户、项目负责人和系统分析师。该阶段产生的主要文档有软件需求说明书。
  3.概要设计  在概要设计阶段,开发人员要把确定的各项功能需求转换成需要的体系结构。在该体系结构中,每个成分都是意义明确的模块,即每个模块都和某些功能需求相对应,因此,概要设计就是设计软件的结构,明确软件由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。
  概要设计阶段的参加人员有系统分析师和软件设计师。该阶段产生的主要文档有概要设计说明书。
  4.详细设计  详细设计阶段的主要任务是对每个模块完成的功能进行具体描述,要把功能描述转变为精确的、结构化的过程描述。即该模块的控制结构是怎样的,先做什么,后做什么,有什么样的条件判定,有些什么重复处理等,并用相应的表示工具把这些控制结构表示出来。
  详细设计阶段的参加人员有软件设计师和程序员。该阶段产生的主要文档有详细设计文档。
  5.编码
  编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单。
  6.测试  测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检查软件的各个组成部分。测试阶段的参加人员通常是另一部门(或单位)的软件设计师或系统分析师。该阶段产生的主要文档有软件测试计划、测试用例和软件测试报告。
  7.维护  软件维护是软件生存周期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。在软件运行过程中可能由于各方面的原因需要对它进行修改,其原因可能是运行中发现了软件隐含的错误而需要修改;也可能是为了适应变化了的软件工作环境而需要做适当变更;也可能是因为用户业务发生变化而需要扩充和增强软件的功能;还可能是为将来的软件维护活动做预先准备等。
5.1.4软件过程  在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图称为“软件过程”。过程是活动的集合,活动是任务的集合。软件过程有3层含义:一个是个体含义,即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程、软件管理过程等;二是整体含义,即指软件产品或系统在所有上述含义下的软件过程的总体;三是工程含义,即指解决软件过程的工程,应用软件的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件的生产率,降低成本。
  1.能力成熟度模型(CMM)  自从软件工程概念提出以后,出现了许多开发、维护软件的模型、方法、工具和环境,它们对提高软件的开发、维护效率和质量起到了很大的作用。尽管如此,人们开发和维护软件的能力仍然跟不上软件所涉及问题的复杂程度的增长,软件组织面临的主要问题仍然是无法开发出符合预算和进度要求的高可靠性和高可用性的软件。人们开始意识到问题的实质是缺乏管理软件过程的能力。
  在美国国防部的支持下,1987年,卡内基·梅隆大学软件工程研究所率先推出了软件工程评估项目的研究成果——软件过程能力成熟度模型(CapabilityMaturityModelofSoftware,CMM),其研究目的是提供一种评价软件承接方能力的方法,同时它可帮助软件组织改进其软件过程。
  CMM是对软件组织进化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。该能力成熟度模型使软件组织能够较容易地确定其当前过程的成熟度并识别其软件过程执行中的薄弱环节,确定对软件质量和过程改进最为关键的几个问题,从而形成对其过程的改进策略。软件组织只要关注并认真实施一组有限的关键实践活动,就能稳步地改善其全组织的软件过程,使全组织的软件过程能力持续增长。
  CMM将软件过程改进分为以下5个成熟度级别。
  1)初始级(Initial)  软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
  2)可重复级(Repeatable)  建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。
  3)已定义级(Defined)  管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。
  4)已管理级(Managed)  制定了软件过程和产品质量的详细度量标准。软件过程的产品质量都被开发组织的成员所理解和控制。
  5)优化级(Optimized)  加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。
  CMM模型提供了一个框架,将软件过程改进的进化步骤组织成5个成熟度等级,为过程不断改进奠定了循序渐进的基础。这5个成熟度等级定义了一个有序的尺度,用来测量一个组织的软件过程成熟度和评价其软件过程能力。成熟度等级是已得到确切定义的,也是在向成熟软件组织前进途中的平台。每一个成熟度等级为继续改进过程提供一个基础。每一个等级包含一组过程目标,通过实施相应的一组关键过程域达到这一组过程目标,当目标满足时,能使软件过程的一个重要成分稳定。每达到成熟度框架的一个等级,就建立起软件过程的一个相应成分,使得组织过程能力有一定程度的增长。
  基于CMM模型的产品包括一些诊断工具,可应用于软件过程评价和软件能力评估小组,以确定一个机构的软件过程实力、弱点和风险。最著名的是成熟度调查表。软件过程评价及软件能力评估的方法及培训也依赖于CMM模型。
  2.能力成熟度模型集成(CMMI)  CMM的成功导致了适用不同学科领域的模型的衍生,如系统工程的能力成熟度模型,适用于集成化产品开发的能力成熟度模型等。而一个工程项目又往往涉及多个交叉的学科,因此有必要将各种过程改进的工作集成起来。1998年,由美国产业界、政府和卡内基·梅隆大学软件工程研究所共同主持CMMI项目。CMMI是若干过程模型的综合和改进,是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。2000年发布了CMMI-SE/SW/IPPD,集成了适用于软件开发的SW-CMM(草案版本2(C))、适用于系统工程的EIA/IS731以及适用于集成化产品和过程开发的IPDCMM(0.98版)。2002年1月发布了CMMI-SE/SW/IPPD1.1版。
  CMMI提供了两种表示方法:阶段式模型和连续式模型。
  1)阶段式模型  阶段式模型的结构类似于CMM,它关注组织的成熟度。CMMI-SE/SW/IPPD1.1版中有5个成熟度等级。
*初始的:过程不可预测且缺乏控制。
*已管理的:过程为项目服务。
*已定义的:过程为组织服务。
*定量管理的:过程已度量和控制。
*优化的:集中于过程改进。
  2)连续式模型  连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级(CapabilityLevel,CL)。CMMI中包括6个过程域能力等级,等级号为0~5。能力等级包括共性目标及相关的共性实践,这些实践在过程域内被添加到特定目标和实践中。当组织满足过程域的特定目标和共性目标时,就说该组织达到了那个过程域的能力等级。
  能力等级可以独立地应用于任何单独的过程域,任何一个能力等级都必须满足比它等级低的能力等级的所有准则。对各能力等级的含义简述如下。
*CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标。
*CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
*CL2(已管理的):其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP