一.软件设计师上午题常考点总结
自己刷题时总结的软件设计师上午题基础知识的常考点,后面的数字为教材上相关知识点所对应的页码。教材为清华大学出版社的软件设计师第5版。
1.海明校验码;Gantt和PERT图;【291】
2.甘特图特点:能清晰的描述每个任务从何时开始,到何时结束,以及任务之间的并行关系。但是他不能清晰的反应出各任务的依赖关系。
PERT图特点:不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系。在PERT图中,关键路径是图中最长的一条路径。而松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其所需完成的事件。但是PERT图不能反应任务之间的并行关系。以及PERT图的关键路线(累计时间最长的的路线称为关键路径)和某小段线路的最迟开始时间。
3.正规式的转换:需要注意的是,编译原理里面的正规式叫做范式,和正则表达式不是一个概念,但是有相通之处:都是通过一定的语法规则来描述文法,也就是所谓的匹配。易错点:ab* 不是 0~n个ab, 而是a + 若干个b(包括0个)。完整的写法应该是 a.b*。(ab)*
才是若干个ab。【74】
4.计算有向图G的环路复杂性的公式为V(G) = m - n + 2,其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。
5.前趋图PV操作
6.UML图、二叉树、设计模式、算法时间复杂度、面向对象设计(多态)、几种经典的算法策略(分治、动态规划、贪心、回溯)、图表、网络协议和对应层的设备、软件著作权、CPU等等。浮点数运算的的流程:小阶对大阶,同时将小阶码对应的浮点数的尾数右移相应位数。这也是今年的考点之一。(之前也有考过)
7.软件配置管理【294】用于整个软件工程过程。其主要目标是:标识变更;控制变更;确保变更正确的实现;报告有关变更。【基线,软件配置项,版本控制,变更控制】
8.一般认为软件风险包含两个特性:不确定性和损失。不确定性是指风险可能发生也可能不发生;损失是指如果风险发生,就会产生恶性后果。5个主要的商业风险如下:
1.市场风险;2.策略风险;3.销售风险;4.管理风险;5.预算风险;风险管理属于风险控制;风险管理一般包括风险识别,风险预测,风险评估,风险控制。【296】
9.面向对象设计原则:单一责任原则,开放-封闭原则,里式替换原则,依赖倒置原则,接口分离原则。这五个是面向对象方法中的五大原则。重用发布等价原则,共同封闭原则,共同重用原则,无环依赖原则,稳定依赖原则,稳定抽象原则。【357】
10.极限编程(xp)主要解决代码质量低的问题,编码速度不能改变。由价值观,原则,实践,行为,彼此相互依赖,关联,并通过行为贯穿于整个生存周期。
4大价值观:沟通,简单性,反馈和勇气5个原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作。 12个最佳实践:计划游戏,小型发布,隐喻,简单设计,重构,结对编程,集体代码所有制,持续集成,每周工作40个小时(5*8=40,就是不加班的意思),现场客户和编码标准。【255】
11.统一过程模型(UP)是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。统一过程定义了4个技术阶段及其制品。起始阶段(生命周期目标);精华阶段(生命周期架构);构建阶段(初始运作功能);移交阶段(产品发布);统一过程的典型代表是RUP,RUP是UP的商业扩展,完全兼容UP,但比UP更完整,更详细。【253】
12.敏捷方法的总体目标是通过“尽可能早地,持续地对有价值的软件的交付”使客户满意。敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。极限编程【高效,低风险,柔性,可预测的,科学的。由价值观,原则,实践和行为组成,彼此相互依赖,关联,并通过行为贯穿于整个生存周期】;水晶法【水晶法认为每一不同的项目都需要一套不同的策略,约定和方法论】;并列争求法【迭代】;自适应软件开发【6个基本原则】;敏捷统一过程。【255】
13.模块独立性【耦合性和内聚性是模块独立性的两个定性标准,在将软件系统划分模块时,应尽量做到高内聚,低耦合,提高模块的独立性】耦合是模块之间的相互独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度,调用模块的方式以及通过接口的信息类型等。【318】
以下耦合性由低到高,模块独立性由强到弱。
无直接耦合:两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此模块间耦合性最弱,模块独立性最高。
数据耦合:两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
标记耦合:两个模块之间传递的是数据结构。
控制耦合:一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。
外部耦合:模块间通过软件之外的环境联结时称为外部耦合。【如I/O将模块耦合到特定的设备,格式,通信协议上时】
公共耦合:通过一个公共数据环境相互作用的那些模块间的耦合。
内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种模块之间的耦合称为内容耦合。
内聚是对一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块(在理想情况下)应当只做一件事。一般模块的内聚性分为7种类型。【318】
以下内聚性由低到高,模块独立性由弱到强。
偶然内聚(巧合内聚)指一个模块间的各处理元素之间没有任何联系。
逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚。
过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。
通信内聚:指模块内所有的处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
顺序内聚:指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入。
功能内聚:这是最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。
14.软件项目管理涉及的范围;有效的软件管理集中在4个p上,即人员(Person),产品(Product),过程(Procedure),和项目(Project)。【285】
15.软件项目估算1.基于已经完成的类似项目进行估算。2.基于分解技术进行估算(分解技术包括问题分解和过程分解)3.基于经验估算模型的估算,典型的经验估算模型有IBM估算模型,COCOMO模型和Putnam模型。【288】 成本估算方法:1.自顶向下估算方法(推算)主要优点是对系统级工作的重视,所以估算不会遗漏诸如集成,配置管理之类的系统级事务的成本估算,且估算工作量小,速度快。缺点是往往不清楚低级别上的技术性困难问题,而这些困难将会使成本上升。
2.自底向上估算方法(细分)优点是将每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确。缺点是估算往往缺少各项子任务之间相互联系所需要的工作量和与软件开发有关的系统级工作量,所以估算往往偏低。
3.差别估算方法(将待开发项目与一个或多个已完成的类似项目进行比较,找出与某个相似项目的若干不同之处,并估算每个不同之处对成本的影响,导出待开发项目的总成本)优点是可以提高估算的准确度,缺点是不容易明确“差别”的界限。
其他估算方法:专家估算法,类推估算法和算式估算法。
COCOMOII模型(一种层次结构的估算模型)被分为3个阶段性模型,应用组装模型,早期设计阶段模型(在需求已经稳定并且基本的软件体系结构已经建立时使用),体系结构模型(在软件构造过程中使用)此模型也需要使用规模估算信息,在模型层次结构中有3种不同的规模估算选择:对象点,功能点和代码行。应用组装模型使用的是对象点;早期设计阶段模型使用的是功能点,功能点可以转换为代码行。【288】
16.系统维护(软件维护时间最长)【280】系统维护的评价标准:可理解性,可测试性,可修改性;
系统维护主要包括硬件维护,软件维护和数据维护。 硬件维护(定期的设备保养性维护和突发性的故障维护); 软件维护:正确性维护(改正性维护)25%,适应性维护(适应技术变化而进行的修改)20%,完善性维护(改善型维护)(是为扩充功能和改善性能而进行的修改)50%,预防性维护(适应变化而主动增加预防性的新的功能)5%。【281】
17.UML中的类图用于对系统的词汇建模,对简单的协作建模,对逻辑数据库模式建模。 对象图用于对对象结构建模。对象结构建模在给定时刻抓取系统中对象的静态快照。
用例图包含用例,参与者,用例之间的扩展关系(extend)和包含关系(include),参与者和用例之间的关联关系,用例与用例以及参与者与参与者之间的泛化关系。用于对系统的静态用例视图进行建模。这个视图主要支持系统的行为,即该系统在它的周围环境的语境中所提供的外部可见服务。(1)对系统的语境建模 (2)对系统的需求建模。
交互图用于对系统的动态方面建模,交互图表现为序列图,通信图,交互概览图和计时图。序列图是强调消息事件顺序;通信图强调接收和发送消息的对象的结构组织的交互图;交互概览图强调控制流。
状态图关注系统的动态视图,对于接口,类和协作的行为建模尤为重要,强调对象行为的事件顺序。活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。活动图专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程。当对一个系统的动态方面建模时,通常有两种使用活动图的方式,即对工作流建模和对操作建模。
构件图展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。与类图相关,通常把一个构件映射为一个或多个类,接口或协作。
组合结构图用于描述一个分类器(如类,构件或用例)的内部结构,分类器与系统中其他组成部分之间的交互端口,
展示一组相互协作的实例如何完成特定的任务,描述设计,架构模式或策略。
部署图是用来对面向对象系统的物理方法建模的方法。部署图对系统的静态部署视图进行建模,它与构建图相关。
包图是用于把模型本身组织成层次结构的通用机制,不能执行,展现了由模型本身分解而成的组织单元以及其间的依赖关系。包可以拥有其他元素,可以是类,接口,结点,协作,用例和图,甚至是嵌套的其他包。拥有是一种组成关系,是一种按规模来处理问题的重要机制,也意味着元素被声明在包中,一个元素只能被一个包所拥有,拥有关系的包形成了一个命名空间,其中同一种元素的名称必须唯一。【366】
18.编译过程中进行的语法分析主要是分析程序语句的结构是否合法。
19.索引对应外模式;视图对应概念模式;基本表对应内模式。
20.无向连通图G的叙述。1.在连通图中可能有两个顶点不存在直接相连的边。
2.G中任意两个顶点之间存在路径。
3.从G中任意顶点出发可遍历图中所有顶点
4.G的邻接矩阵是对称矩阵。
21.插入排序对基本有序的数组排序速度快,插入排序的时间复杂度为O(n)。
22.TCP的优势:可靠传输;拥塞控制;流量控制;差错控制。UDP的优势:开销小,传输速度快。
127.0.0.1是主机用来做环回测试的。Ping和trace命令是用来测试网络连通性的。
23.流水线的吞吐量是指单位时间内流水线处理的任务数,如果各段流水的操作时间不同,则流水线的吞吐率是最长流水段操作时间的倒数。
24.SSH为建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议,利用ssh协议可以有效防止远程登录过程中的信息泄露问题。
25.数字签名和数字加密的区别:数字加密是用接受者的公钥加密,接受者用自己的私钥解密;数字签名是将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,与解密的摘要信息。
26.在网络管理中,加强内防内控可采用的策略有:终端访问授权,防止合法终端越权访问;加强终端的安全检查与策略管理;加强员工上网行为管理与违规审计。不能采取控制终端接入数量的方法。
27.《计算机软件保护条例》是中华人民共和国国务院令第339号公布。著作权中署名权,修改权,保护作品完整权的保护期不受限制。发表权,使用权和获得报酬权为作者终身及其死亡后的50年的12月31日。 根据《著作权法》和《计算机软件保护条例》的规定,计算机软件著作权的权利自软件开发完成之日起产生,保护期为50年。保护期满,除开发者身份权以外,其他权利终止 。【595】
28.数据字典是结构化分析的一个重要输出。数据字典的条目包括数据流,数据项,数据存储和基本加工。数据项是组成数据流和数据存储的最小元素。【335】
29.关键路径:项目路径中最长的一条路径。
求每个节点的最早开始时间时,采用顺推,从起点出发依次相加;如果有两个箭头指向节点,那就分别求出这两条路径的最早开始时间,然后取较大的一个; 而要求每个节点的最晚开始时间时,则采用逆推,从终点出发,终点的最晚开始时间为关键路径长度。一条指向节点,直接减即可。如果有两个箭头从节点出发,那就分别将这两条路径的最晚开始时间都计算出来,然后取较小的一个。
活动松弛时间=活动最晚开始时间-最早开始时间。【练习题92】
30.将高级语言源程序翻译为可在计算机上执行的形式有多种不同的方式,其中编译方式生成逻辑上与源程序等价的目标程序,解释方式不生成。
31.LISP是函数式程序设计语言。Prolog是一种逻辑编程语言。它建立在逻辑学的理论基础之上。最初被运用于自然语言等研究领域。现已广泛地使用在人工智能的研究中。可以用来建造专家系统,自然语言理解,智能知识库等。Python是一种面向对象的解释型计算机程序设计语言。Java/c++是面向对象的程序设计语言。
32.信号量机制,主要有整型信号量,记录型信号量和信号量集机制。整型信号量与PV操作,信号量是一个整型变量,根据控制对象的不同被赋予不同的值。信号量分为如下两类:(1)公用信号量,实现进程间的互斥,初值为1或资源的数目。(2)私用信号量。实现进程间的同步,初值为0或某个正整数。信号量S的物理意义:S>=0表示某资源的可用数,若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。【190】PV操作是实现进程同步与互斥的常用方法。P操作和V操作是低级通信原语,在执行期间不可分割。其中,p操作表示申请一个资源,V操作表示释放一个资源。
33.互斥信号量其初始值为1,资源信号量其初值为资源的个数,同步信号量其初值为0。
34为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要包括文件名和存放文件的物理地址,这个数据结构称为文件控制块(FCB)文件控制块的有序集合称为文件目录。或者说,文件目录是由文件控制块组成的,专门用于文件的检索。文件控制块也称为文件的说明或文件的目录项(简称目录项)。所以如果系统在将目录文件修改的结果写会磁盘时发生崩溃,则对系统的影响较大。【227】
35.I/0设备管理软件一般分为4个层次。从上到下依次为用户进程,与设备无关的系统软件,设备驱动程序,中断处理程序,硬件。【218】 36.CMMI能力成熟度模型(247)提供了两种表示方法:阶段式模型和连续式模型。 阶段式模型的结构类似于CMM,它关注组织的成熟度。CMMI-SE/SW/IPPD1.1版中有5个成熟度等级。
①初始的:过程不可预测且缺乏控制。②已管理的:过程为项目服务。③已定义的:过程为组织服务。④定量管理的:过程已度量和控制。⑤优化的:集中于过程改进。
连续式模型包括6个过程域:CL0(未完成的):过程域未执行或未得到CL1中定义 所有目标。CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。CL2(已管理的):其共性目标集中于已管理的过程的制度化。根据组织机构政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控,控制和评审。CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。 使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。【246】
37.软件维护工具主要有版本控制工具,文档分析工具,开发信息库工具,逆向工程工具,再工程工具,配置管理支持工具。【312】
38.概要设计文档的内容包括:体系结构设计,数据库设计,逻辑数据结构设计【261】
39.常用的调试方法:试探法;回溯法;对分查找法;归纳法;演绎法。
40.绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计中,绑定是在编译时进行的,叫做静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行的。动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。【354】
41.语法制导翻译是一种静态语义分析方法。目前多数编译程序进行语义分析的方法是采用语法制导翻译法,语法制导翻译法使用属性文法为工具来描述程序设计语言的语义。【74】
42.队列的特点是先进先出,若用循环单链表表示队列,则入队列和出队列操作都不需要遍历链表。
43.用哈希表存储元素时,需要进行冲突(碰撞)处理,冲突是指关键字不同的元素被映射到相同的存储位置。
数据流图平衡原则:
1.任何一个数据流子图必须与它上一层父图的某个加工对应,二者的输入数据流和输出数据流必须保持一致,此即父图与子图的平衡。
2.在父图与子图的平衡中,数据流的数目和名称可以完全相同;也可以在数目上不相等,但是借助数据字典中数据流的描述,确定父图中数据流是由子图中几个数据流合并而成的,也即子图是对父图中加工和数据流的分解。
二.软件设计师考试中23个设计模式的总结
一.创建型设计模式
1.Abstract Factory(抽象工厂)提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
2.Builder(生成器)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的接口。
3.Factory Method(工厂方法)定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例化延迟到其子类。
4.Prototype(原型)用原型实例指定创建对象的种类并且通过复制这些原型创建新的对象。
5.Singleton(单例模式)保证一个类仅有实例,并提供一个它的全局访问点。
二.结构型设计模式
1.Adapter(适配器)将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。
2.Bridge(桥接模式)将抽象部分与其实现部分分离,使它们都可以独立地变化。
3.Composite(组合)将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
4.Decorator(装饰模式)动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式比生成子类更加灵活。[用于将一个对象加以包装以提供额外的行为]【附加职责】
5.Facade(外观模式)为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[用于将一系列对象加以包装以简化接口]
6.Flyweight(享元模式)运用共享技术有效地支持大量细粒度的对象。
7.Proxy(代理模式)为其他对象提供一种代理以控制对这个对象的访问。
三.行为型设计模式
1.Chain of Responsibility(责任链)使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。【传递职责】
2.Command(命令)将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
3.Interpreter(解释器)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
4.Iterator(迭代器)提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。
5.Mediator(中介者)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
6.Memento(备忘录)在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
7.Observer(观察者模式)定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要特征:类应该对扩展开放,对修改关闭的。适用性:访问一个聚合对象的内容而无须暴露它的内部表示。
8.State(状态)允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
9.Strategy(策略)定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。
10.Template Method(模板方法)定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
11.Visitor(访问者) 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。
以上为自己个人备考期间总结的一些知识点,若有错误,敬请指正。