软考-软件设计师知识点总结

计算机基础

OSI模型

物理层(Physical Layer):
物理层是OSI模型的最底层,负责在物理媒介上传输原始比特流。它定义了传输介质、电压水平、传输速率等物理参数,并规定了传输介质的连接方式和信号传输的基本规范。

数据链路层(Data Link Layer):网桥和交换机
数据链路层负责将原始的比特流转换为数据帧,并在相邻节点之间进行可靠的数据传输。它提供了错误检测和纠正、帧同步、流量控制和访问控制等功能,以确保数据的可靠传输。

网络层(Network Layer):路由器
网络层负责将数据包从源节点传输到目标节点,通过网络进行路由选择和转发。它定义了数据包的寻址和路由选择机制,并提供了网络互连的功能。常见的网络层协议包括IP(Internet Protocol)。

传输层(Transport Layer):软件功能,不需要专用的联网设备 
传输层提供了端到端的可靠数据传输服务,负责将数据可靠地从源端传输到目标端。它处理数据分段、流量控制、拥塞控制和错误恢复等任务。常见的传输层协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。

会话层(Session Layer):软件功能,不需要专用的联网设备 
会话层负责建立、管理和终止会话(Session)连接,以便在通信双方之间建立和维护通信会话。它提供了会话的控制和同步功能,支持多个应用程序之间的通信。

表示层(Presentation Layer):
表示层处理数据的表示和格式转换,以确保不同系统之间的数据可以正确解释和理解。它负责数据的加密、压缩、格式转换、数据描述等功能,以便在不同的系统中进行交互。

应用层(Application Layer):
应用层是OSI模型的最高层,提供了各种应用程序与网络之间的接口。它包括了各种网络应用,如电子邮件、文件传输、远程登录等。应用层协议定义了应用程序之间的通信规则和数据交换格式。

输入输出系统

当系统中有多个中断请求时,中断系统按优先级进行排队。

中断嵌套:若在处理低级中断过程中又有高级中断申请中断,则高级中断可以打断低级中断处理,转去处理高级中断,等处理完高级中断后再返回去处理原来的低级中断。

实现中断嵌套用后进先出的栈来保护断点和现场最有效。

总线

总线宽度是指总线的线数,即数据信号的并行传输能力,也体现总线占用的物理空间和成本;

总线的带宽是指总线的最大数据传输率,即每秒传输的数据总量。

总线宽度与时钟频率共同决定了总线的带宽。

例题:总线宽度32bit,时钟频率为200MHz,若总线上每5个时钟周期发送一个32bit的字,则该总线的贷款为:160 MB/s = 200MHz / 5 * (32bit / 8)         

系统总线

又称内总线或板级总线,在微机系统中用来连接各功能部件而构成一个完整的微机系统。

系统总线包含有三种不同功能的总线,即数据总线DB (Data Bus)、地址总线AB (Address Bus)和控制总线CB (Control Bus)。

  • ISA (Industrial Standard Architecture)总线标准是IBM公司1984年为推出PC/AT机而建立的系统总线标准,所以也叫AT总线。它是对XT总线的扩展,以适应8/16位数据总线要求。
  • EISA总线是1988年由Compaq等9家公司联合推出的总线标准。它在ISA总线的基础上使用双层插座,在原来ISA总线的98条信号线上又增加了98条信号线,也就是在两条ISA信号线之间添加一条EISA信号线。在实用中,EISA总线完全兼容ISA总线信号。
  • PCI (Peripheral Component Interconnect)总线是当前最流行的总线之一,它是由Intel公司推出的一种局部总线。它定义了32位数据总线,且可扩展为64位。PCI总线主板插槽的体积比原ISA总线插槽还小,支持突发读写操作,最大传输速率可达132MB/S,可同时支持多组外围设备。PCI局部总线不能兼容现有的ISA、EISA、MCA (Micro Channel Architecture)总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。
  • SCSI (Small Computer System Interface)是一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。

CPU

控制器

计算机中提供指令地址的程序计数器PC在控制器中

CPU主频、时钟周期、CPI、MIPS

主频

理解:主频是机器内部主时钟的频率,主频越高,完成指令的一个执行步骤所用的时间就越短,速度越快。比如跳绳,跳的越快(即频率越高),那么完成一次所用的时间就越短。

单位:Hz,常见的有1.8GHz,2.4GHz

CPU时钟周期

理解:跟上面的主频对应,CPU时钟周期是一个时间单位,即一个周期的时长

计算:CPU时钟周期=1/主频

单位:s(秒)(ms,μs等)

CPI

理解:我们借助英文全称理解,全称为:Clock cycle Per Instructions,即一条指令所需要的时钟周期数。需要注意的是这个是需要的时钟周期数,不是时钟周期。

计算:CPI = 程序所需时钟周期数 / 程序所含指令数(把周期数平分为n份,n为指令数,即求得每条指令所需要时钟周期数,这里计算的是平均值,一般情况下均计算平均值)

单位:周期数/每条指令(根据算式得的,一般没要求,这里为了帮助理解)

MIPS

理解:同样借助英文全称,Million Instructions Per Second,即每秒执行多少百万条指令。通俗即一秒之内可以跑多少百万条指令。

计算:MIPS = 指令条数 / (执行时间*10^6) (除以10^6为了求得有多少百万条指令)

推导:执行时间 = CPI * 指令条数 * 时钟周期 = CPI * 指令条数 * (1/主频)(这里需要理解透彻CPI到底是什么意思)代入上式可得:MIPS = 主频 / (10^6 * CPI)

 CPI与MIPS例题

某计算机系统的CPU主频为2.8GHZ。某应用程序包括3类指令,各类指令的CPI(执行每条指令所需要的时钟周期数) 及指令比例如下表所示。执行该应用程序时的平均CPI为 ( ?1 );运算速度用MIPS表示,约为 ( ?2  )。

指令A指令B指令C
比例35%35%35%
CPI426

?1

平均CPI为:4*35%+2*45%+6*20%=3.5

?2

MIPS(每秒执行的百万条指令数):

每个时钟周期为主频的倒数,即1/2.8G秒,则每条指令需要时间3.5/2.8G秒。

每秒执行指令数为1/(3.5/2.8G) =2.8G/3.5=0.8G=800M。(1M=106,1G=109)

存储系统

计算机系统的存储器按所处的位置可分为内存外存

分类

按构成存储器的材料按存储器的工作方式按访问方式按寻址方式
磁存储器读写存储器按地址访问的存储器随机存储器
半导体存储器只读存储器按内容访问的存储器顺序存储器
光存储器直接存储器

各类型对应存储器

按内容访问
相联存储器

’与‘’或‘’非‘’异或‘逻辑运算

有0出0,全1为1
有1出0,全0为0
1为0,0为1
异或两个变量相异时,结果为1

耦合

内容耦合:一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。            

数据结构

单向循环链表

设尾指针的单向循环链表(不含头结点)如下图所示:          

设结点的指针域为next,新结点的指针为s,则在尾指针所指结点后插入结点的操作为:  

也就是插入操作的时间复杂度为O1.。

要删除尾指针所指结点,必须通过遍历操作找到尾结点的前驱结点,其操作序列如下:  

也就是说,删除操作的时间复杂度为O(n)。             

算法

算法冒泡选择插入希尔归并快速基数

平均O(n²)O(n²)O(n²)O(nlogn)O(nlogn)O(nlogn)O(d(r+n))O(nlog2n)
最好O(n)O(n²)O(n)O(n)O(nlogn)O(nlogn)O(d(n+rd))O(nlog2n)
最坏O(n²)O(n²)O(n²)O(n²)O(nlogn)O(n²)O(d(r+n))O(nlog2n)
空间复杂度O(1)O(1)O(1)O(1)O(1)O(log2n)O(log2n)O(1)
稳定性稳定不稳定稳定不稳定稳定不稳定稳定不稳定

完全二叉树:

除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点.

平衡二叉树(AVL):

它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树.  

最优二叉树:

哈夫曼树

满二叉树:

每一层上的节点数均达到最大值             

线性结构

线性序列

线性表是一个线性序列,在顺序存储方式下,若删除其中一个元素,需要将其后的元素逐个前移,使得元素之间没有空闲单元。

表长为n时,共有n个可删除的元素,删除元素a1时需要移动n-1个元素,删除元素an时不需要移动元素,因此,等概率下删除一个元素时平均的移动元素次数Edelete为  

线性表若釆用单链表存储,插入和删除元素的实质都是对相关指针的修改,而不需要移动元素。    

耦合

内容耦合

一个模块可以直接访问另一个模块的内部数据

公共耦合

多个模块都访问同一个公共数据环境被称为公共耦合,公共数据环境例如全局数据结构、共享通信区和内存公共覆盖区。

外部耦合

多个模块访问同一个全局简单变量(非全局数据结构)并且不是通过参数表传递此全局变量信息被称为外部耦合。

控制耦合

模块之间传递信息中包含用于控制模块内部的信息被称为控制耦合。控制耦合可能会导致模块之间控制逻辑相互交织,逻辑之间相互影响,非常不利于代码维护。

标记耦合

多个模块通过参数表传递数据结构信息被称为标记耦合,可以类比JAVA语言引用传递。

数据耦合

多个模块通过参数表传递简单数据信息被称为标记耦合,可以类比JAVA语言值传递。

非直接耦合

多个模块之间没有直接联系,通过主模块的控制和调用实现联系被称为非直接耦合,这也是一种理想的耦合方式。

面向对象

面向对象分析

面向对象分析的目的是为了获得对应用问题的理解,以确定系统的功能、性能要求。

面向对象分析方法是将数据和功能结合在一起作为一个综合对象来考虑。

面向对象分析技术可以将系统的行为和信息间的关系表示为迭代构造特征。

面向对象分析包含5个活动:认定对象组织对象描述对象间的相互作用定义对象的操作定义对象的内部信息

关联(Association)关系

 组合(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。

组合是一种很强的“拥有”关系,部分和整体的生命周期通常一样。组合成的新对象完全支配其组成部分,包括它们的创建和湮灭等。一个组合关系的成分对象是不能被另一个组合构成的对象共享的。

聚合同样表示“拥有”关系,但其程度不如组合强,有时候“部分”对象可以在不同的“整体”对象之间共享,并且“部分”对象的生命周期也可以与“整体”对象不同,甚至“部分”对象可以脱离“整体”对象而单独存在。

组合是值的合成(Aggregation by Value),而聚合是引用的合成(Aggregation by Reference )。        

测试

白盒测试

也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。

在以下覆盖技术中,从弱到强依次为语句覆盖判定覆盖条件覆盖路径覆盖

  • 语句覆盖是指选择足够的测试用例,使被测程序中每条语句至少执行一次。它对程序执行逻辑的覆盖很低,因此一般认为是很弱的逻辑覆盖。
  • 判定覆盖是指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值。
  • 条件覆盖是指设计足够的测试用例,使得每一个判定语句中每个逻辑条件的各种可能的值至少满足一次。
  • 路径覆盖是指覆盖被测程序中所有可能的路径。           

黑盒测试

也称为功能测试,在完全不考虑软件的内部结构和特性的情况下来测试软件的外部特性。

常用的黑盒测试技术包括等价类划分边界值分析错误猜测因果图的报告。             

流水线

流水线处理机在执行指令时,把执行过程分为若干个流水级,若各流水级需要的时间不同,则流水线必须选择各级中时间较大者为流水级的处理时间。

 理想情况下,当流水线充满时,每一个流水级时间流水线输出一个结果。    

流水线的吞吐率是指单位时间流水线处理机输出的结果的数目,因此流水线的吞吐率为一个流水级时间的倒数,即最长流水级时间的倒数。

流程图

McCabe复杂度

公式:V(G) = E - N + 2P

  • V(G) 表示圈复杂度;
  • E 表示控制流图中的边数;
  • N 表示控制流图中的节点数;
  • P 表示程序的连通分量数(通常为1)。 

    

系统设计知识

内聚

时间内聚:把需要同时执行的动作组合在一起形成的模块。

过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。

信息内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。

功能内聚:指模块内的所有元素共同作用完成一个功能缺一不可。

程序设计语言基本概念

高级语言程序翻译为机器语言程序

将高级语言程序翻译为机器语言程序的过程中,需要依次进行词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段,其中,中间代码生成和代码优化可以省略。

  • 程序中的错误分为语法错误和语义错误,语法分析阶段不能发现语义错误。
  • 语义分析阶段主要处理语法正确的语言结构的含义信息,可以与目标机器的体系结构无关。
  • 目标代码生成阶段的工作与目标机器的体系结构是密切相关的。

动态、静态、脚本语言

动态语言

运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。

动态语言思维不受约束,可以任意发挥,把更多的精力放在产品本身上;集中思考业务逻辑实现,思考过程就是实现过程

如Php、Asp、JavaScript、Python、Perl等等。

静态语言

编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须声明数据类型。

静态语言由于强制声明数据类型,让开发工具(IDE)对代码有很强的判断能力,在实现复杂的业务逻辑和开发大型商业系统、以及那些声明周期很长的应用中,开发者可以依托强大的IDE来更高效、更安全地开发。

如Java、C、C++、C#等。

脚本语言

一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++ 等编程语言之间的一种特殊的语言。

尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。

脚本语言都是动态语言

传值方式

函数调用时基本的参数传递方式:传值、传地址

传值方式:将实参的值传递给形参

实参:表达式(常量),变量 (数组元素)

这种信息传递是单方向的,形参不能再将值传回给实参。

传地址方式:将实参的地址传递给形参

实参:变量(数组名或数组元素),不能是表达式(或常量)。

这种方式下,被调用函数中对表达式参数的修改实际上就是对实际参数的修改,因此客观上可以实现数据的双向传递。

网络协议:

TLS:安全传输层协议,

TCP:消息传输协议

TFTP:文件传输协议

SSH:安全远程登录协议。

软件管理过程

统一过程 (UP)

定义了初启阶段、精化阶段、构建阶段、移交阶段和产生阶段,每阶段达到某个里程碑时结束。

  • 初启阶段的里程碑:生命周期目标
  • 精化阶段的里程碑:生命周期架构
  • 构建阶段的里程碑:初始运作功能
  • 移交阶段的里程碑:产品发布。

敏捷开发方法XP

是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法,其特性包含在12个最佳实践中。

  1. 计划游戏:快速制定计划、随着细节的不断变化而完善;
  2. 小型发布:系统的设计要能够尽可能早地交付;
  3. 隐喻:找到合适的比喻传达信息;
  4. 简单设计:只处理当前的需求使设计保持简单;
  5. 测试先行:先写测试代码再编写程序;
  6. 重构:重新审视需求和设计,重新明确地描述它们,以符合新的和现有的需求;
  7. 结队编程;
  8. 集体代码所有制;
  9. 持续集成:可以按日甚至按小时为客户提供可运行的版本;
  10. 每周工作40个小时;
  11. 现场客户;
  12. 编码标准。             

敏捷开发

极限编程XP:是激发开发人员创造性、使得管理负担最小的一组技术;

水晶法Crystal:认为每一个不同的项目都需要一套不同的策略、约定和方法论;

并列争球法(Scrum):使用迭代的方法,其中把每30天一次的迭代成为一个冲刺,并按需求的优先级来实现产品。多个自组织和自治小组并行地递增实现产品,并通过简短的日常情况会议进行协调。

软件项目活动图

定义:

  1. 关键路径(最少时间):从开始到结束得所有路径中,所花时间最长的一条为关键路径;
  2. 最早开始时间:在关键路径上,从开始到该任务的最早执行的时间;
  3. 最晚开始时间:关键路径的总时间-反向得出该任务的时间;
  4. 松弛时间(最多延迟执行的时间): 关键路径的总时间-包含该任务的关键路径花的时间;

例题

题1

某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天),则完成该项目的最少时间为( )天。活动 BD 和 HK 最早可以从第( )天开始。(活动 AB 、AE 和 AC 最早从第 1 天开始)。

 解:

天数 排序天数
ABDIJL20ABDIJKL17
ABIJL19ABIJKL16
AEGJL17AEGJKL14
AEGHKL18ACFHKL17

(1)最少时间 = 最长序列ABDIJL = 20天

(2)BD前有路径AB,HK前有路径AEGH和路径ACFH(两条路径都需完成,但可同时进行)。

        因为AB是第1天开始,而非第0天开始,所以BD最早开始时间为第4天,HK最早开始时间为第11天。

题2

如下图所示 软件项目活动图中,顶点表示项目得里程碑,连接顶点得边表示包含得活动,边上得权重表示活动的持续时间(天),则完成该项目最短时间为(   )天。在该活动图中,共有(   )条关键路径。

解:

天数 排序天数
ABEHJL20ABEHJKL15
ABFJL22ABFJKL19
ACFJL 20ACFJKL17
ADGIJL22ADGIJKL19
ADGIKL17

    
(1)完成该项目最短时间为22天;

(2)共有2条关键路径:ABFJL、ADGIJL;

图的存储结构

图的类型主要有4种:无向图、有向图、无向网和有向网        

无向图:

无向图转邻接矩阵:对于具有n个顶点的图 G=(V,E),其邻接矩阵是一个n阶方阵,且是对称的。因此矩阵的大小为n²。             

UML图

UML类图刻画系统的静态方面,展现了一组对象、接口、协作及其之间的关系。类图中包括的主要内容有类、接口、协作以及依赖、泛化和关联关系,也可以包含注解和约束。

使用类图情况的方式通常有以下三种。

  1. 对系统的词汇进行建模。决定哪些抽象是考虑中的系统的一部分,哪些抽象处于系统边界之外,并详细描述这些抽象和它们的职责。
  2. 对简单协作进行建模。协作是一些共同工作的类、接口和其他元素的群体,提供一些合作行为强于所有这些因素的行为之和,要有相互协作的一组类来实现这些协作的语义。
  3. 对逻辑数据库模式建模。将模式看作是数据库的概念设计的蓝图,类图对这些数据库模式进行建模,有时也称为领域类图。 对象快照采用对象图进行建模。  

 设计模式

原型模式(Prototype Pattern)

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

适配器(Adapter)模式

将类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

组合(Composite)模式

描述了如何构造一个类层次式结构。

装饰器(Decorator)模式

动态地给一个对象添加一些额外职责。在需要给某个对象而不是整个类添加一些功能时使用。

这种模式对增加功能比生成子类更加灵活。        

代理模式(Proxy)

通过提供与对象相同的接口来控制对这个对象的访问,以使得在确实需要这个对象时才对它进行创建和初始化。

桥接模式:(抽象与实现分离)

概念:将抽象部分与其实现部分分离,使它们都可以独立的变化

应用场景:跨平台视频播放器,可以在不同操作系统平台(如Windows、Mac、Linux等)上播放多种格式的视频文件,常见的视频格式包括RMVB、AVI、WMV等

优点:

  1. 分离抽象接口及其实现部分。使得抽象和实现可以沿着各自的维度来变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。
  2. 在很多情况下,桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。
  3. 多继承是指一个类可以同时从多个父类继承属性和方法。这种继承方式可以让子类同时拥有多个父类的特征,但也可能带来一些问题,比如构造函数的执行顺序和类中同名变量冲突等
  4. 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。

缺点:

  1. 桥接模式的使用会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程。
  2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性,如何正确识别两个独立维度也需要一定的经验积累。

观察者模式:(发布Publish-订阅Subscribe)

概念:行为型模式的一种,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

有如下要素:

  • Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
  • ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
  • Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。
  • ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

应用场景:

  • 关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。
  • 事件多级触发场景。
  • 跨系统的消息交换场景,如消息队列、事件总线的处理机制。

优点:
        解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换。

缺点:
        在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调试等内容会比较复杂,而且在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般会采用异步实现。

关系

依赖关系:是两个事务间的语义关系,其中一个事物发生变化时会影响了一个事务的语义。

泛化关系:是一种特殊/一般关系,特殊元素(子元素)的对象可以替代一般元素(父元素)的对象,达到子元素可以共享父元素的结构和行为的目的。

关联关系:是一种结构关系,描述一组对象之间连接的链,有单向关联、双向关联和自身关联(只涉及一个类)等。

链上可以添加多重度、角色名称说明关联的对象数量以及行为。

关联关系又有特殊类型,聚合和组合,用于描述部分和整体之间的结构关系,聚合暗示子类型独立于父类型而存在,比如班级和学生,班级删除之后,学生仍然可以存在。组合暗示没有父类型,子类型无法独立存在。

组件图

  • 【概念】描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
  • 【目的】用来展示各个组件之间的依赖关系。
  • 【看法】
    • 虚线箭头:表示依赖关系
    • 表示组件连接器,一个提供接口,一个需要接口
      • -------(  需要接口
      • ------O  提供接口

 订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。

数据安全

机密性(保密性):指数据在传输过程中不能被非授权者偷看;

完整性:指数据在传输过程中不能被非法篡改,

真实性(不可抵赖性) :信息的发送者身份的确认或系统中有关主体的身份确认,这样可以保证信息的可信度;
可用性:发送者和接受者双方的通信方式正常。

多媒体

表示媒体

键盘、鼠标、扫捕仪、话筒和摄像机等输入媒体以及显示器、打印机和扬声器等输出媒体

为了加工、处理和传输感觉媒体而人为研究、构造出来的一种媒体,

编码方式:文本编码、图像编码和声音编码等。

表现媒体是指进行信息输入和输出的媒体。

感觉媒体

引起听觉反应的声音,引起视觉反应的文本、图形和图像等。

指直接作用于人的感觉器官,使人产生直接感觉的媒体

存储媒体

硬盘、软盘、光盘和胶卷等。

指用于存储表示媒体的物理介质。

传输媒体

电缆和光缆等。

是指用于存储表示媒体的物理介质。

软件工程概述

瀑布模型


定义:
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品

特点:
软件开发的各个活动按线性方式进行
优:
为项目提供各阶段的检查点
可在迭代模型中应用瀑布模型
缺:
1、各阶段划分比较固定,阶段之间会产生大量文档,增大工作量
2、由于开发模型为线性的,客户只能等到过程末期才见到效果,增大开发风险
3、无法适应用户需求的变化

二、原型法


定义:
原型法又称快速原型法,基本的思想是——在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止
原型还分为两类:
抛弃型原型,此类原型在系统真正实现以后就抛弃不用了
进化型原型,此类原型的构造从目标系统的一个或多个基本需求出发,通过修改和追加的过程逐渐丰富,演化成为最终的系统
特点:
实际可行
具有最终系统的基本特征
构造方便、快速、造价低
优:
增加用户与开发人员的交流
用户在项目开发中占主导作用
满足用户的动态需求
降低开发风险
缺:
因为用户的参与,使得忽视原型对实际环境的适应性等技术问题,所以不适合大型、复杂项目开发
对于技术层面远大于其分析层面的问题不宜使用原型法
三、增量模型
定义:
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交

特点:
最大特点就是将待开发的软件系统模块化和组件化
增量模型是瀑布模型和原型进化模型的综合
如同原型进化模型一样,增量模型逐步地向用户交付软件产品,但不同于原型进化模型的是,增量模型在开发过程中所交付的不是完整的新版软件,而只是新增加的构件
优:
将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整
缺:
待开发的软件系统可以被模块化,如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦
对项目管理人员管理全局水平有较高要求
对开发人员也有要求
四、螺旋模型


定义:
螺旋模型(Spiral Model)采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。
特点:
最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止。
螺旋模型更适合大型的昂贵的系统级的软件应用
优:
设计上的灵活性,可以在项目的各个阶段进行变更
以小的分段来构建大型系统,使成本计算变得简单容易
客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
缺:
很难让用户确信这种演化方法的结果是可以控制的
建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求
五、喷泉模型


定义:
该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。

简化模型为:


特点:
1、面向对象生命周期模型。
2、具有较好的可移植性。
3、容易适应各种运行环境。
4、迭代,无间隙。
5、各阶段是相互重叠和多次反复的

优:
1.各个阶段没有明显的界限,开发人员可以同时进行多步骤,故软件项目开发效率高,节省开发时间。
2.软件的某个部分通常被重复多次。

缺:
1.该模型的各个阶段没有明显的界限,开发人员可以同步进行开发,则开发过程中需要大量开发人员。
2.需严格管理文档,从而又使得审核的难度加大,因为随时面对加入的各种信息、需求与资料等

系统性能评测和可靠性基础

由于系统构成串联系统时,其中任何一个子系统失效就足以使系统失效,其可靠度等于各子系统可靠度的乘积,构成并联系统时,只要有一个子系统正常工作,系统就能正常工作。

计算方式

设每个子系统的可靠性分别以R1,R2,...RN表示,则整个系统的可靠度由下式来求得:
          R=1-(1-R1)(1-R2)...(1-RN)

例题:某计算机系统由下图所示的部件构成,假定每个部选择题件的千小时可靠度都为R,则该系统的千小时可靠度为 ?


答:本系统的可靠度为R(1 -(1-R)^2 )^2。             

COCOMOII模型--软件成本估算

介绍

1981年,Barry Boehm在其经典著作《软件工程经济学》中,介绍了一种软件成本估算模型的层次体系,称为COCOMO(Constructive Cost Model,构造型成本模型)。这是Barry Boehm研究了加利福尼亚的TRW咨询公司的大量项目数据后,推导出的一个成本模型,他代表了软件成本估算综合经验的一个模型,为估算软件项目的成本和进度提供了一个良好定义的开放性的基础。1981年提出的原始COCOMO模型,即COCOMO81,在实际应用中取得了较好的效果,很好的匹配了采用瀑布模型的软件项目。

近二十年来,软件工程领域取得了巨大的进步,新的软件过程和软件生命周期模型层出不穷,面对由螺旋或进化开放模型创建软件以及通过商业产品应用组装能力开放软件的项目,COCOMO81遇到了越来越到的困难。为了适应软件生命周期、技术、组件、工具、表示法及项目管理技术的进步,原始COCOMO的作者Barry Boehm对COCOMO做了调整和改进,提出了一个新的版本-COCOMOII。

分类

COCOMOII模型中使用三个螺旋式的过程模型:应用组装模型,早期设计模型和后体系结构模型。

应用组装模型(Application Composition)

基于对象点的度量模型

通过计算屏幕、报表、第三代语言(3GL)模块等对象点的数量来确定基本的规模,每个对象点都有权重,由一个三级的复杂性因子表示,将各个对象点的权值累加起来得到一个总体规模,然后再针对复用进行调整。

早期设计模型(early design)

使用功能点和等价代码行估算规模

在项目开始后的一个阶段或者螺旋周期通常包括探索体系结构的可供选择方案或增量开放测量。

后体系结构模型(post architecture)

一旦项目进入开放阶段,就必然确定一个具体的生命周期体系结构,此时项目就能够为估算提供更多更准确的信息。
 

COCOMOII模型估算方法

在利用COCOMOII模型进行软件成本估算过程中,首先采用软件规模估算方法对项目的规模进行估算。再应用五个比例因子,通过相关计算,将规模转化为工作量,并通过十七个成本驱动因子对工作量进行调整。最后,采用进度计算公式,计算出开发该项目所需要的进度以及人数。

在模型层次结构中有3种不同规模估算选择,即:对象点、功能点代码行。             

软件规模估算方法

a、代码行分析法

软件产品的源代码的行数进行测量,是直接度量的方法,与使用的开发程序语言相依附。

b、德尔菲法

也被称为专家判断法,是依赖一个或多个专家的经验来做估算,其判断的信息包括经验法则,可用的资源,过去项目的开发数据,过去估算的反馈及过去类似项目的详细功能等。

c、类比分析法

由类似于已完成项目的实际成本为基础来估算新项目,估算新系统的每个主要组件就如同现存系统相似组件规模的百分比,将每个组件的估算规模加起来就是新系统的总规模。

d、价格胜算法

以争取项目合约为原则,因此以足够取得项目合约价格为基础所做的规模估算。

e、功能点分析法

是基于系统的一种规模估算方法。它是基于应用软件的外部、内部特性以及软件性能的一种间接的规模测量方法。通过软件产品进行评估,并根据明确定义的软件系统的功能特性来测量软件的规模。

知识产权

著作权

署名权、修改权、保护作品完整权:保护期不受限制

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我好帅啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值