软件设计师考点总结

《软件设计师》考点总结

为了方便背诵,某些概念做了隐藏,点击即可显示

软件四种维护

  1. 改正性维护。
    • 为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就称为改正性维护。
  2. 适应性维护。
    • 在使用过程中,外部环境(新的硬、软件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就称为适应性维护。
  3. 完善性维护。
    • 在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动称为完善性维护。
  4. 预防性维护。
    • 这是指预先提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。

数据库范式理论简单记忆

  1. 第一范式(1NF)

    • 关系中的每个属性都是不可分割的原子项
    • 简单来说,就是确保每一列中的数据都是原子性的,没有重复的属性或集合。
  2. 第二范式(2NF)

    • 每一个非主属性完全函数依赖于码
    • 换句话说,表中的数据行必须能通过主键唯一标识,并且表中的非主键列不能仅依赖于主键的一部分。
  3. 第三范式(3NF)

    • 非主属性不传递依赖于码
    • 这意味着非主键列不能依赖于其他非主键列,每个非主键列都必须直接依赖于主键。
  4. BCNF(Boyce-Codd Normal Form)

    • 所有决定因素(即决定其他属性的属性组合)都必须是候选键
    • 设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有超码(属性集A可以唯一地标识关系r中的一个元组,则称属性集A为关系r的一个超码),那么R∈BCNF。
    • 这进一步减少了数据冗余和更新异常的可能性,确保数据的完整性和一致性。

函数依赖

符号介绍

  • A ⊂ B:A包含B
  • A ⊆ B:真子集,A的所有元素都属于B,但B中至少有一个元素不属于A
  • X → Y:表示X函数决定Y或Y函数依赖于X
  • a ∊ A:元素a属于集合A

Armstrong公理系统

  1. 自反律(Reflexivity Rule
    若 Y ⊆ X ⊆ U ,则 X → Y 为 F 所蕴涵。
  2. 增广律(augmentation rule)
    若X→Y为F所蕴涵,且Z⊆U,则XZ→YZ为F所蕴涵。
  3. 传递律(transitivity rule)
    若X→Y及Y→Z为F所蕴涵,则X→Z为F所蕴涵。

依赖

  1. 平凡函数依赖:
    平凡函数依赖是指一个属性或一组属性完全地决定了自身。换句话说,如果一个属性 X 完全地决定了属性 Y,那么这种函数依赖被称为平凡函数依赖。例如,如果有 X→X 这样的函数依赖,那么它就是一个平凡函数依赖,因为 X 决定了自身的值。
  2. 非平凡函数依赖:
    非平凡函数依赖是指一个属性或一组属性不完全地决定自身,而是由其他属性决定。如果一个属性 X 决定了另一个属性 Y,且 X 和 Y 不是同一个属性,那么这种函数依赖就是非平凡函数依赖。例如,如果有 X→Y 这样的函数依赖,其中 X 和 Y 是不同的属性,那么它就是一个非平凡函数依赖。
  3. 完全函数依赖:
    完全函数依赖是指一个属性组合完全地决定了其他属性,而不能通过去掉其中的任何一个属性来维持该函数依赖。如果一个属性组合 X 完全地决定了属性 Y,但是去掉其中任何一个属性都不能维持该函数依赖,那么这种函数依赖就是完全函数依赖。
  4. 部分函数依赖
    某些属性决定了另一个属性,但并非所有属性都对其决定。换句话说,如果一个属性组合中的一部分属性能够确定另一个属性的值,而不是整个属性组合。

个人理解:如果一个属性不依赖任何一个属性,那么就可以认为这个属性是一个平凡函数依赖;如果两个集合XY,只有X中全部属性才能推导出Y,那么就是完全函数依赖


树相关的计算公式

  1. 节点总数
  • 一个高度(根节点高度为0 )为 h 的二叉树,节点,最多有 2^(h+1) −1 个,最少有 h+1 个
  1. 叶子节点数量
  • 一个高度为 n 的二叉树叶子节点,2^h,最少为 1
  1. 二叉树节点和形态的关系
  • 节点书为n的二叉树共有 (2n)! / n!(n+1)! 种形态
  • 假如节点数为4,那么87654321/432543*2 = 14

软件成熟度模型(CMM)的五个等级

  1. 初始级(Initial)
    • 特点:在这一级别,软件过程基本上是无序和混乱的。项目的成功往往依赖于个人的技能和努力,而非系统性的过程。项目管理缺乏标准化和可重复性,工作常常处于救火状态,无法有效预防和解决问题。
    • 问题:由于没有明确的软件开发流程,项目的进度、质量和成本往往难以控制。这导致项目的成功率低下,客户满意度不高。
  2. 可重复级(Repeatable)
    • 特点:在这一级别,组织开始建立基本的项目管理过程,如需求管理、项目计划、跟踪和监控等。这些过程为项目的执行提供了必要的指导和规范,使得类似的项目可以重复之前的成功经验。
    • 进步:通过实施这些基本过程,组织能够更好地控制项目的进度和成本,提高软件的质量。同时,由于过程的可重复性,项目的成功率也得到了提升。
  3. 已定义级(Defined)
    • 特点:在这一级别,软件管理和工程两方面的过程都已经文档化、标准化,并整合到组织的标准软件过程中。所有项目都使用经过批准、剪裁的标准软件过程来开发和维护软件。
    • 优势:通过文档化和标准化过程,组织能够确保项目的一致性和可预测性。同时,这也为团队成员提供了清晰的指导,使得他们能够更好地理解和执行任务。
  4. 已管理级(Managed)
    • 特点:在这一级别,组织能够收集并分析软件过程和产品质量的详细度量数据。这使得组织能够在定量的范围内预测性能,并作出基于客观依据的决策。
    • 意义:通过收集和分析度量数据,组织可以深入了解其软件开发过程的优点和不足,从而制定针对性的改进措施。同时,这也为组织提供了持续监控和优化过程的能力。
  5. 优化级(Optimizing)
    • 特点:在这一级别,组织通过反馈和持续改进,不断优化其软件开发过程。组织能够利用新技术和先进思想来改进过程,从而提高软件质量和客户满意度。
    • 成果:通过持续优化过程,组织能够不断提高其软件开发能力,降低项目的风险和成本。同时,这也使得组织能够更好地满足客户的需求,提高市场竞争力。

七层网络模型

  1. 物理层(Physical Layer)
    • 功能:这一层处理物理介质和数据传输的基本物理特性,例如电压、电流、光信号等。
    • 常用协议和设备:Ethernet、USB、光纤、双绞线、集线器(Hub)。
  2. 数据链路层(Data Link Layer)
    • 功能:负责数据的帧化、物理地址的解析、流量控制和错误检测和纠正。
    • 常用协议和设备:Ethernet、Wi-Fi、MAC地址、交换机(Switch)、网桥(Bridge)。
  3. 网络层(Network Layer)
    • 功能:路由选择、数据包的寻址、跨不同网络的数据传输。
    • 常用协议和设备:IP(IPv4、IPv6)、路由器(Router)、OSPF、BGP。
  4. 传输层(Transport Layer)
    • 功能:提供端到端的数据传输和可靠性,负责数据的分段和重新组装,错误检测和纠正。
    • 常用协议:TCP、UDP。
  5. 会话层(Session Layer)
    • 功能:管理通信会话,建立、维护和终止连接。
    • 常用软件:NetBIOS、RPC(Remote Procedure Call)。
  6. 表示层(Presentation Layer)
    • 功能:数据格式转换、数据加密、数据压缩、字符编码等,以确保不同系统之间的数据互通。
    • 常用协议:SSL/TLS、ASCII、EBCDIC。
  7. 应用层(Application Layer)
    • 功能:为用户提供网络服务和应用,包括文件传输、电子邮件、网页浏览等。
    • 常用协议:HTTP、FTP、SMTP、POP3、IMAP、DNS。

软件设计模型

  1. 原型模型:

    基于这样一种客观事实:并非所有的需求在系统开发之前都能准确地说明和定义。采用了动态定义需求的方法。它适用于需求不明确的开发环境。

  2. 瀑布模型:

    严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。其优点是:可以使过程比较规范化,有利于评审;缺点在于:过于理想,缺乏灵活性,容易产生需求偏差。所以瀑布模型的应用场合为:需求明确的项目、二次开发项目以及与原型法配合使用。

  3. 演化模型:

    它将软件系统的开发过程比作生物进化,通过多次迭代和演化来构建软件系统。演化模型的一个主要特点是它允许在项目的不同阶段进行变更和扩展,以适应新的需求和发现的问题。这个模型的主要思想是,软件系统不断演化,就像生物进化一样。

  4. 增量模型:

    • 增量模型将项目划分为多个增量,每个增量都包含一个独立的部分功能。
    • 每个增量都经历完整的开发周期,然后逐渐组合到一个完整的系统中。
    • 适用于大型项目,可以更早地交付部分功能
  5. 螺旋模型:

    结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。

  6. 喷泉模型:

    主要用于描述面向对象的开发过程,最核心的特点是迭代。所有的开发活动没有明显的边界,允许各种开发活动交叉进行。

  7. V模型:

    强调开发过程中测试贯穿始终

  8. UP:

    既是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,UP使用的是统一建模语言UML。与其他软件过程相比,UP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量。


设计模式

  1. 创建型模式(Creational Patterns):
    这些模式关注对象的创建机制,以确保在系统中适当地创建和配置对象。
    • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
    • 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,但让子类决定具体实例化哪个类。
    • 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建一系列相关或依赖对象的家族,而不需要指定具体类。
    • 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使相同的构建过程可以创建不同的表示
    • 原型模式(Prototype Pattern):通过复制现有对象创建新对象,而不是创建新的实例
  2. 结构型模式(Structural Patterns):
    这些模式关注对象之间的组合,以形成更大的结构。
    • 适配器模式(Adapter Pattern):将一个接口转换成客户端希望的另一个接口,以便客户端可以调用不同接口的对象
    • 装饰器模式(Decorator Pattern):动态地为对象添加额外的职责,而不改变其接口
    • 桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,以便它们可以独立变化
    • 组合模式(Composite Pattern):将对象组合成树结构以表示部分-整体层次结构。
    • 外观模式(Facade Pattern):为子系统提供一个一致的接口,以简化与子系统的交互。
    • 享元模式(Flyweight Pattern):共享细粒度对象,以减少内存和提高性能
    • 代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
  3. 行为型模式(Behavioral Patterns):
    这些模式关注对象之间的职责分配,以及如何在对象之间进行通信。
    • 责任链模式(Chain of Responsibility Pattern):通过链式传递请求,解决发送者和接收者之间的耦合
    • 命令模式(Command Pattern):将请求封装为对象,以使调用操作的对象参数化、排队、记录和撤销操作。
    • 解释器模式(Interpreter Pattern):为语言创建解释器,用于解释特定的语法。
    • 迭代器模式(Iterator Pattern):提供一种方法依次访问聚合对象的元素,而不暴露其内部表示
    • 中介者模式(Mediator Pattern):定义一个封装一组对象交互的对象,促进松散耦合
    • 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获和恢复对象的内部状态。
    • 观察者模式(Observer Pattern):定义对象之间的一对多依赖关系,使一个对象状态改变时,所有依赖对象都得到通知
    • 状态模式(State Pattern):允许对象在其内部状态改变时改变其行为。
    • 策略模式(Strategy Pattern):定义一系列算法,将其封装成独立的策略对象,并在运行时选择策略
    • 模板方法模式(Template Method Pattern):定义算法的骨架,但将一些步骤的实现延迟到子类。
    • 访问者模式(Visitor Pattern):在不改变对象结构的前提下,定义作用于对象结构中的元素的新操作

算法策略

  1. 分治法(Divide and Conquer)
    • 分治法是一种将问题划分为更小的子问题,然后递归地解决这些子问题,最后将子问题的解合并以得到原问题的解的算法。
    • 归并排序、快速排序、整数乘法、棋盘覆盖、循环赛日程安排、斐波那契数列
  2. 动态规划法(Dynamic Programming)
    • 动态规划法是一种通过将问题分解为更小的子问题并存储子问题的解来解决复杂问题的方法。
    • 背包问题、最长公共子序列、矩阵链乘法、最短路径问题
  3. 贪心法(Greedy Algorithm)
    • 贪心法是一种每次选择局部最优解的策略,以期望最终获得全局最优解。
    • 活动选择问题、哈夫曼编码、最小生成树(Kruskal和Prim算法)、单源最短路径(Dijkstra算法)
  4. 回溯法(Backtracking)
    • 回溯法是一种通过尝试不同的选择并在不满足条件时回溯到先前的状态来解决问题的方法。
    • N皇后问题、0-1背包问题、图着色问题、旅行商问题
  5. 分支限界法(Branch and Bound)
    • 分支限界法是一种通过分支问题并定义上下界来限制搜索空间的方法,以找到最优解。
    • 0-1背包问题、旅行商问题、作业调度问题、资源分配问题

UML常用图

  • 类图:一组对象、接口、写作和他们之间的关系
  • 对象图:一组对象以及他们之间的关系
  • 用例图:用力、参与者以及他们之间的关系
  • 序列图:场景的图像化表示,以时间顺序组织的对象间的交互活动
  • 通讯图:强调手法消息的对象之间的组织结构
  • 状态图:展现了一个状态机,由状态、转换、事件和活动组成
  • 活动图:专注于系统的动态视图,一个活动到另一个活动的流程

类图

泛化(继承):

  • 是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。

实现:

  • 在这里插入图片描述是一种类与接口的关系,表示类是接口所有特征和行为的实现.

依赖:

  • 一个类依赖于另一个类的定义。一般而言,依赖关系在Java语言中体现为成员变量、局域变量、方法的形参、方法返回值,或者对静态方法的调用

关联:

  • 是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生

聚合:

  • 聚合是一种较弱的关联关系,表示一个对象包含另一个对象,但包含的对象的生命周期不一定依赖于包含对象。
  • 例如:一个大学(整体)包含多个学生(部分)。学生可以毕业或转学,但他们的生命周期不仅仅取决于大学的存在。

组合:

  • 组合是一种较强的关联关系,表示一个对象包含另一个对象,且包含的对象的生命周期依赖于包含对象。如果包含对象被销毁,那么它所包含的对象也会被销毁。
  • 例如:一辆汽车(整体)包括引擎、轮胎、座位等部分。如果汽车被销毁,那么引擎、轮胎、座位等部分也将被销毁

用例图

1.包含关系(include):

  • 用例图中的包含关系表示一个用例包含了另一个用例,即包含用例需要在执行过程中引入被包含用例的行为。

  • 通常用带有虚线箭头的箭头表示,箭头从包含用例指向被包含用例。箭头的标签描述了包含用例的条件。

  • 这种关系表示被包含用例的执行是可选的,它会在包含用例的执行中根据条件来引入。

2.扩展关系(extend):

  • 扩展关系表示一个用例可以在一定条件下扩展另一个用例的行为,即扩展用例提供了在基础用例执行时可能发生的额外行为。
  • 通常用带有虚线箭头的箭头表示,箭头从扩展用例指向被扩展用例。箭头的标签描述了扩展用例的条件。
  • 这种关系表示扩展用例的执行是可选的,它只有在满足条件时才会被触发。

3.泛化关系(generalize):

  • 泛化关系表示用例之间的继承关系,其中一个用例(子用例)继承了另一个用例(父用例)的行为。
  • 用实线箭头表示,箭头从子用例指向父用例。
  • 子用例继承了父用例的特征和行为,通常用于表示用例的层次结构。

内聚

时间聚合模块内部的各个组成部分所包含的处理动作必须在同一时间内执行

过程聚合模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行

通信聚合模块的各个组成部分所完成的动作都使用了同一个数据或产生同一输出数据

顺序聚合模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入

功能聚合模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可少

非直接耦合两个模块之间没有直接关系,它们的联系完全是通过主模块的控制和调用来实现的


耦合

数据耦合两个模块彼此间通过数据参数交换信息

标记耦合一组模块通过参数表传递记录信息,这个记录是某一个数据结构的子结构,而不是简单变量

控制耦合两个模块彼此间传递的信息中有控制信息

外部耦合一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息

公共耦合两个模块之间通过一个公共的数据区域传递信息

内容耦合一个模块需要涉及到另一个模块的内部信息


常用协议

带T的除了TFTP,均为TCP 不带T的除了POP3,均为UDP

  1. FTP:20数据端口/21控制端口,文件传输协议
  2. HTTP:80端口,超文本传输协议,网页传输
  3. DHCP:67端口,IP地址自动分配
  4. SNMP:161端口,简单网络管理协议
  5. DNS:53端口,域名解析协议,记录域名与IP的映射关系
  6. TCP:可靠的传输层协议
  7. UDP:不可靠的传输层协议
  8. ICMP:因特网控制协议,PING命令来自该协议
  9. IGMP:组播协议
  10. ARP:地址解析协议,IP地址转换为MAC地址
  11. PPP:PPP是一种数据链路层协议,通常用于在两个点之间建立直接连接,例如,个人计算机通过调制解调器拨号连接到互联网服务提供商(ISP)的服务器
  12. PPPOE:以太网上的点对点协议,是将点对点协议(PPP)封装在以太网(Ethernet)框架中的一种网络隧道协议。
  13. PPTP:即点对点隧道协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码验证协议(PAP)、可扩展认证协议(EAP)等方法增强安全性。

邮件相关

  1. SMTP(Simple Mail Transfer Protocol):SMTP是用于发送电子邮件的标准协议。它定义了如何将电子邮件从发件人的邮件服务器传输到接收人的邮件服务器。SMTP通常使用TCP端口25进行通信。
  2. POP3(Post Office Protocol, Version 3):POP3是用于接收电子邮件的协议。它允许电子邮件客户端从邮件服务器上下载电子邮件,并通常使用TCP端口110。POP3将电子邮件下载到本地设备,并通常将电子邮件从服务器上删除。
  3. IMAP(Internet Message Access Protocol):IMAP也是用于接收电子邮件的协议,但与POP3不同,它允许电子邮件客户端在邮件服务器上管理电子邮件,而不是直接下载到本地设备。IMAP通常使用TCP端口143。
  4. SMTPS(SMTP Secure):SMTPS是SMTP的安全版本,使用TLS/SSL来加密SMTP通信,以保护电子邮件的隐私和安全。通常使用TCP端口465或587。
  5. POP3S和IMAPS:这是安全的POP3和IMAP协议,它们使用TLS/SSL来加密电子邮件客户端与邮件服务器之间的通信,以确保数据的机密性。
  6. MIME(Multipurpose Internet Mail Extensions):MIME是一种标准,用于在电子邮件中传输多媒体内容、附件和非文本数据。它允许电子邮件包含图像、音频、视频和其他多媒体元素

对称加密算法

  1. AES (Advanced Encryption Standard):这是目前广泛使用的对称加密算法之一,具有高度的安全性和性能。
  2. DES (Data Encryption Standard):虽然已经被认为不安全,但仍然在一些旧系统中使用。
  3. 3DES (Triple Data Encryption Standard):对DES的改进版本,使用多轮加密操作来提高安全性。
  4. RC4 (Rivest Cipher 4):虽然在过去广泛使用,但由于安全漏洞而不再建议使用。

非对称加密算法

  1. RSA (Rivest-Shamir-Adleman):一种常用的非对称加密算法,广泛用于数字签名和安全通信,https证书常用加密算法
  2. DSA (Digital Signature Algorithm):主要用于数字签名,常与其他加密算法一起使用。
  3. ECC (Elliptic Curve Cryptography):一种使用椭圆曲线密码学的非对称加密方法,具有高度的安全性和效率。

哈希函数

  • SHA-256和SHA-3:SHA-256是一种安全散列算法,用于生成固定长度的哈希值,通常用于数据完整性检查和密码存储。
  • MD5:尽管已经不再安全,但在某些应用中仍在使用。