计算机硬件组成
运算器、控制器
CPU
- 程序控制-最重要的功能通过执行指令来控制程序的执行顺序
- 操作控制
- 时间控制
- 数据处理-CPU最根本的任务就是数据的加工处理
考点:
运算器:
- 算术逻辑单元ALU(实现对数据的算术和逻辑运算)
- 累加寄存器AC(运算结果或源操作数的存放器)
- 数据缓冲寄存器DR(暂时存放内存的指令或数据)
- 状态条件寄存器PSW(保存指令运行结果的条件码内容)
控制器
- 指令寄存器IR(暂存CPU执行指令)
- 程序计数器PC(存放指令执行地址)
- 地址寄存器AR(保存当前CPU所访问的内存地址)
- 指令译码器ID(分析指令操作码)
浮点数:表示方法N = F * 2^E E称为阶码, F称为尾数
浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定
校验码:
码距: 从A码到B码转换所需要改变的位数称为码距
奇偶校验码:
奇校验:含有奇数个1
偶校验:含有偶数个1
CRC:循环冗余校验码
只能检错,不能纠错
原始信息串10110
G(x) = x^4 + x + 1
- 在原始信息位添加0,在原始信息位添加多项式的阶 r,这里r为4,得到新串101100000
- 由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0,例如x^0 = 1,存在1,那么得到1,x^1在多项式中存在,那么得到1,...,最终得到10011
- 将前两步得出的被除数和除数进行模2除法运算,亦或运算,都为1或者为0得到0,不同的则为1,
101100000
10011
=
001010000
1010000
10011
=
0011100
11100
10011
=
01111
1111 => 余数
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 最终得到的余数为r,如果不够,那么往前加0,得到结果101101111
海明码:利用奇偶性来检错和纠错的校验方法,2^(k-1)>=n+k
信息位除了2^n次外的位置
例如信息位1011的海明码
I4 I3 I2 I1
7 6 5 4 3 2 1 位数
1 0 1 1 信息位
r2 r1 r0 校验位
r2 = I4 ^ I3 ^ I2
r1 = I4 ^ I3 ^ I1
r0 = I4 ^ I2 ^ I1
就是二进制表示方法包含r所在的值
最终得出:
1010101
体系结构分类
按处理机的数量进行分类:单处理系统、并行处理系统、分布式处理系统
Flynn分类法:指令流和数据流
单指令流单数据流:SISD
单指令流多数据流:SIMD
多指令流单数据流:MISD 不存在
多指令流多数据流:MIMD
指令:instruction
数据:data
计算机指令的组成:一条指令由操作码和操作数两部分组成
操作码决定要完成的操作,操作数指的是参与运算的数据及其所在的单元地址
计算机指令执行过程:取指令->分析指令->执行指令
指令寻址方式:顺序寻址方式、跳跃寻址方式
指令操作数的寻址方式:立即寻址方式、直接寻址方式、间接寻址方式、寄存器寻址方式、基址寻址方式、变址寻址方式
指令系统
CISC: 复杂指令系统 Complex instruction Set Computer 微程序控制系统
RISC:精简指令系统 Reduced instruction Set Computer 增加了通用寄存器 硬布线逻辑控制为主 适合采用流水线
指令流水线原理:将指令分成不同段,每段由不同的部分去处理
RISC中的流水线技术:
超流水线技术(Super Pipe Line)
超标量(Super Scalar)技术
超长指令(Very Long Instruction Word, VLIW)技术
重点:
流水线周期:指令分成不同执行段,其中执行时间最长的段为流水线周期
流水线执行时间:1条指令总执行时间+ (总指令条数-1)*流水线周期
流水线吞吐率计算:指令条数/流水线执行时间
流水线的加速比计算:不使用流水线执行时间/使用流水线执行时间
#存储系统
计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题
两级存储:Cache-主存、主存-辅存(虚拟存储体系)
局部性原理:
时间局部性原理:在相邻的时间内会访问同一个数据项
空间局部性原理:相邻的空间地址会被连续访问
高速缓存Cache用来存储当前最活跃的程序和数据,直接与CPU交互,位于CPU和主存之间,容量小,速度为内存的5-10倍
地址映射:在CPU工作时,送出的是主存单元的地址,在Cache中需要将主存地址转换Cache存储器地址,由硬件自动完成映射,分为三种方法
直接映射、全相连映射(随意一块都与Cache中任意一块对应)、组组相连映射
Cache替换算法:使Cache获得尽可能高的命中率
随机替换算法、先进先出算法、近期最少使用算法、优化替换算法
命中率及平均时间
1B = 8b
按字节编址B
磁盘结构和参数
磁盘由正反两个盘面,每个盘面由多个同心圆,每个同心圆是一个磁道,每一个同心圆又被划分为多个扇区,数据就被存放在一个一个扇区中
存取时间=寻道时间+等待时间
磁盘调度算法:
先来先服务FCFS、最短寻道时间优先SSTF、扫描算法SCAN、单项扫描调度算法CSCAN
#输入输出技术
内存与接口地址的编址方法
- 内存与接口地址独立编址方法
- 内存与接口地址统一编址方法
计算机和外设间的数据交互方式
考点
程序控制(查询)方式:CPU主动查询外设是否完成数据传输,效率极低
程序中断方式:外设完成数据传输后,向CPU发送中断
DMA方式(直接主存存取):数据传输的整个过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高
在一个总线周期结束后,CPU会响应DMA请求开始读取数据;CPU响应程序中断方式请求是在一条指令执行结束时
#总线结构
总线:计算机设备和设备之前传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享
总线类别:内部总线(芯片)、系统总线(数据总线、地址总线、控制总线)、外部总线(外部USB)
考点:数据总线、地址总线、控制总线
串行总线适应长距离数据传输,并行总线适合短距离数据传输
计算机可靠性
平均无故障时间MTTF=1/失效率
平均故障修复时间MTTR=1/修复率
平均故障间隔时间MTBF=MTTF+MTTR
系统可用性
重点:
串并联系统可靠性:
串联系统可靠性:R=R1R2...Rn
并联系统可靠性:R=1-(1-R1)(1-R2)...(1-Rn)
了解概念就行
N模冗余系统:
#错题总结
- 计算机CPU对其访问速度最快的是:CPU内部通用寄存器>Cache>主存储器>联机磁盘存储器>脱机光盘、磁盘存储器
- n位二进制数可以表示2^n个数值,补码中因为0只有一种,那么就有2^n个数值
- 中断响应时间指的是从发出中断请求到开始进入中断处理程序;中断处理时间指的是从中断处理开始到中断处理结束时间;中断向量提供中断服务程序的入口地址
- 流水线是一种同步控制机制
- 两级存储:Cache-主存、主存-辅存(虚拟存储体系)
- CPU依据指令周期的不同阶段来区分二进制的指令和数据
- 内存容量需要+1
#操作系统知识
进程管理、存储管理、设备管理、文件管理、作业管理(这个不考)
操作系统的4个特征:并发性、共享性、虚拟性和不确定性
操作系统的分类:批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统、微型计算机操作系统(简称微机操作系统,如Windows、Mac OS、Linux)
嵌入式操作系统的主要特点:微型化、可定制、实时性、可靠性、易移植性
嵌入式系统初始化按照自底向上、从硬件到软件的次序依次为片级初始化->板级初始化->系统级初始化
进程的组成:进程控制块PCB process control block、程序、数据
前驱图的特点:任务间的并行、任务间的先后顺序
进程资源图:进程和资源之间的分配和请求关系 P代表进程、R代表资源
所有进程都是阻塞节点时,即陷入死锁状态
进程的同步与互斥
临界资源:各进程间需要以互斥方式对其进行访问的资源
临界区:指进程中对临界资源实施操作的那段程序
互斥:某资源在同一个时间内只能由一个任务单独使用,使用时需要加锁,使用完后解锁才能被其他任务使用
同步:多个任务可以并发执行,只不过有速度上的差异,在一定情况下停下等待,不存在资源是否单独或共享的问题
互斥信号量:对临界资源采用互斥访问,使用互斥信号量后其他进程无法访问,初值为1
同步信号量:对共享资源的访问控制,初值一般是共享资源的数量
P操作:申请资源,S=S-1,若S>=0则继续执行,若S<0,则置该进程为阻塞状态,并将其插入阻塞队列
V操作:释放资源,S=S+1,若S>0值继续执行,若S<=0,则从阻塞状态唤醒一个进程
#进程调度
进程调度方式是指当有更高优先级的进程到来时分配CPU。分为可剥夺和不可剥夺两种
高级调度:处于输入池中的哪个后背作业可以调入主系统做好运行的准备
中级调度:处于交换区中的哪个就绪进程可以调入内存
低级调度:决定处于内存中的哪个就绪进程可以占用CPU
调度算法:先来先服务FCFS、时间片轮转、优先级调度、多级反馈调度
死锁:资源互斥、每个进程占有资源并等待其他资源、系统不能剥夺进程资源、进程资源图是一个环路
解决方法:死锁预防、死锁避免、死锁检测、死锁解除
死锁资源计算:系统内有n个进程,每个进程都需要R个资源,其发生死锁的最大资源数为n(R-1),不发生死锁的最小资源数n*(R-1)+1
传统的进程:可拥有资源的独立资源;可独立调度和分配的基本单位
线程:线程作为调度和分配的基本单元,进程作为独立分配资源的单元
分区存储管理:分区存储组织,就是整存,将某进程运行所需的内存整体一起分配给它,固定分区、可变分区、可重定位分区
分页存储管理
逻辑页分为页号和页内地址
优点:利用率高,碎片小,分配及管理简单
缺点:增加了系统开销,可能产生抖动现象
页面置换算法:最优算法OPT、先进先出算法FIFO(会产生抖动现象)、最近最少使用LRU、淘汰原则
快表:是一块小容量的相互存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号,快表是将页表存在Cache中
分段存储管理
将进程空间分为一个个段,每段也有段号和段内地址
优点:多道程序共享内存,各段程序修改互不影响
缺点:内存利用率低,内存碎片浪费大
段页式存储管理:对进程空间先分段后分页,没考过
优点:空间浪费小、存储共享容易、存储保护容易、能动态链接
缺点:复杂
#设备管理概述
设备是计算机系统与外界交互的工具,具体负责计算机与外部的输入/输出工作,所以常称为外部设备(简称外设)
设备的分类:按数据组织分类(块设备、字符设备)、按照设备功能分类(输入设备、输出设备、存储设备、供电设备)、资源分配角度分类、数据传输速率分配
设备管理的主要功能是动态地掌握并记录设备的状态
I/O设备
用户进程、设备无关软件、设备驱动程序、中断处理程序、硬件
设备管理技术
引入SPOOLING(外围设备联机操作)技术,就是在外设上建立两个数据缓冲区
文件管理概述
文件的逻辑结构可以分为两大类:有结构的记录式文件;无结构的流式文件
索引文件结构:直接索引对应物理盘块
索引块计算索引块的个数,磁盘数据块大小计算文件长度
#文件目录
文件控制块的有序集合称为文件目录
相对路径前面不需要**/
**
#文件存储空间管理
文件的存取方法是指读/写文件存储器上的一个物理块的方法,通常有顺序存取和随机存取
位示图 每一位对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用
#数据库技术基础
#三级模式-两级映射
内模式:管理如何存储物理的数据,对应具体物理存储文件
模式:又称为概念模式,就是我们通常使用的基本表,根据应用、需求将物理数据划分成一张张表
外模式:对应数据库中的视图这个级别,将表进行一定处理后再提供给用户使用
外模式-模式映像:是表和视图之间的映射,存在于概念和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序
模式-内模式映像:是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而无需修改应用程序
#数据库设计
需求分析->概念结构设计->逻辑结构设计->物理设计
需求分析:即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书
概念结构设计:设计E-R图,实体-联系图
逻辑结构设计:将E-R图转换成关系模式
物理设计:根据生成的表等概念,生成物理数据库
#数据模型
关系模型是二维表的形式表示的实体-联系模型
概念模型是从用户的角度进行建模的
数据模型的三要素:数据结构、数据操作、数据的约束条件
椭圆表示属性、长方形表示实体、菱形表示联系、联系的两端要填写联系关系
实体:客观存在并相互区别的事务
弱实体和强实体:弱实体依赖强实体的存在而存在(两个杠)
E-R模型转换为关系模型:每个实体都对应一个关系模型
1:N的联系中,在N端中加入1端实体的主键
M:N的联系中,必须作为一个单独的关系模式,主键是M和N端的联合主键
#关系代数
并:
交:
差:S1-S2,结果是S1表中有而S2中没有
笛卡尔积:S1 * S2,合并
投影:按条件选择某关系模式中的某列,列也可以用数字表示π
选择:实际是按条件选择某关系模式中的某条记录σ
自然连接的结果显示全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录 符号类似▷◁
#函数依赖
给定一个X,能唯一确定一个Y
部分函数依赖:A->C、(A,B)->C
传递函数依赖:A->B, B->C => A->C
函数依赖的公理系统(Armstrong)
设关系模式R<U, F>, U是关系模式R的属性全集,F是关系模式R的一个函数依赖集
超键(能唯一标识此表的属性的组合)、候选键(超键中去除冗余的属性,剩余的属性就是候选键)、主键(码)(任选一个候选键)、外键(其他表中的主键)、主属性(候选键内的属性为主属性)
实体完整性约束、参照完整性约束、用户自定义完整性约束
#范式
第一范式1NF:关系中的每一个分量必须是一个不可分的数据项,不允许有小表的存在
第二范式2NF:如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,简而言之就是表中的每一个非主属性不会依赖复合主键中的某一个列
第三范式3NF:在满足2NF的基础上,表中不存在非主属性对码的传递依赖
BC范式BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键
从未在右边出现过的属性,必然是候选键之一,以该属性为基础,根据依赖集依次拓展
#模式分解
范式之间的转换一般都是通过拆分属性,即模式分解
保持函数依赖的判断:
如果F上的每一个函数依赖都在其分解后的某一个关系成立,则这个分解是保持依赖的
无损分解:分解后的关系模式能够还原出原关系模式就是分解
如果R的分解为P={R1, R2}, R1∩R2->(R1-R2)或者R1∩R2->(R2-R1)
当分解为三个以及以上关系模式时,可以通过表格法求解
#并发控制
事务:有一系列操作组成,要么全做要么全不做,拥有四种特性:原子性、一致性、隔离性、持续性
事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,但并发控制中存在下面三个问题:
丢失更新、不可重复读、读脏数据
#封锁协议
X锁是排它锁(写锁)、S锁是共享锁(读锁)
三级封锁协议:一级解锁协议(修改数据R之前必须对其加X锁)、二级封锁协议(在读数据R之前必须对其加S锁)、三级封锁协议
#数据库安全
静态转储:即冷备份
动态存储:即热备份
#分布式数据库
#数据仓库
面向主题、集成的、非易失的、且随时间变化的数据集合
数据仓库的结构通常包含四个层次:数据源、数据的存储与管理(核心)、OLAP(联机分析处理)服务器、前端工具
商业智能(BI): 数据预处理、建立数据仓库、数据分析和数据、展现
#反规范化技术
#大数据
特点:大量化、多样化、价值密度低、快速化
#SQL
create table
指定主键:primary key()
指定外键:foreign key()
视图:view
select ... from ... where
分组查询:group by
更名运算:as
字符串匹配: like
数据库插入: insert into .... values()
数据库删除: delete from ... where
数据库修改: update ... set ... where
排序: order by 默认升序,降序加关键字DESC
DISINCT: 过滤重复的选项
#计算机网络
#网络功能和分类
计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性
计算机网络按分布范围和拓扑结构划分如下图所示: 局域网LAN、城域网MAN、广域网WAN
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
物理层:在链路上透明地传输位 单位:比特 设备:中继器、集线器
数据链路层:把不可靠的信道变为可靠的信道,差错控制,流量控制等 单位:帧 设备:交换器、网桥
网络层:进行路由选择、拥塞控制、顺序控制、传送包,保证报文的正确性,又称通信子网层 单位:IP分组 设备:路由器
传输层:提供端对端间可靠性、透明的数据传输,保证报文顺序的正确性、数据的完整性 单位:报文段 设备:网关
会话层:建立通信进程的逻辑名字与物理名字之间的联系,提供进程之间建立、管理和终止会话的方法,处理同步与恢复问题
表示层:实现数据转换(包括格式转换、压缩、加密等) 设备:网关
应用层:对用户不透明的提供各种服务 单位:数据 设备:网关
以太网规范IEEE 802.3 是重要的局域网协议,包括
IEEE 802.3 标准以太网 10Mb/s 传输介质为细同轴电缆
IEEE 802.3u 快速以太网 100Mb/s 双绞线
IEEE 802.3z 千兆以太网 1000Mb/s 光纤或双绞线
IEEE 802.3ae 万兆以太网 10Gb/s 光纤
无线局域网WLAN技术标准:IEEE 802.11
广域网协议包括:PPP 点对点协议,ISDN 综合业务数字网、xDSL、DDN数字专线
#TCP/IP协议
网络协议三要素:语法、语义、时序。
网络层协议:
IP: 网络层最重要的核心协议,在源地址和目的地址之间传送数据报,无连接、不可靠
ICMP: 因特网控制报文协议
ARP和RARP: 地址解析协议,ARP是将IP地址转化为物理地址,RARP是将物理地址转化为IP地址
IGMP: 网络组管理协议
传输层协议:
TCP: 整个TCP/IP协议族中最重要的协议之一
UDP: 是一种不可靠、无连接的协议,有助于提高传输速率
应用层协议:
可靠协议:FTP、HTTP(80)、SMTP(简单邮件发送协议25)、POP3(110)等都是可靠协议
不可靠协议:TFTP、SNMP(简单网络管理协议)、DHCP(67、68)、DNS(53)
#传输介质
双绞线:无屏蔽双绞线UTP、屏蔽双绞线STP
光纤:
多模光纤MMF:同时传输多种不同的信号,采用发光二极管LED为光源,成本低,但是传输的效率和可靠性都较低,适合短距离传输
单模光纤SMF:一般只能传输一种信号,采用激光二极管LD作为光源,并且只支持激光信号的传播,成本高,但是传输距离远,可靠性高
无线信道:分为无线电波和红外光波
通信方式:单工、半双工、全双工
同步方式:
异步传输、同步传输、串行传输、并行传输
#通信方式和交互方式
交换方式
电路交换:在两方之间建立一个专用电路,特点是面向连接、实时性高、链路利用率低
报文交换:以报文为单位,存储转发模式,收到数据后先存储,进行差错校验,有错误会丢弃,因此会有延时,但可靠性高,是面向无连接的
分组交换:以分组为单位,也是存储转发模式,分为三种方式:
数据报:各个分组携带地址信息,自由的选择不同的路由路径
虚电路:二者之间就建立了一个虚拟的通信线路
信元交换:异步传输模式ATM采用的交换方式,信元是固定长度的分组
#IP地址表示
分类IP地址:这32位IP地址分为网络号和主机号,根据网络号位数的不同,可以将IP地址分为下面几类
A类:0.0.0.0-127.255.255.255 主机号为24位,网络号为8位,根据主机位,一共有2^24 - 2(不为1或0),0开头
B类:128.0.0.0-191.255.255.255 主机号为16位,网络号为16位,根据主机位,一共有2^16 - 2(不为1或0),10开头
C类:192.0.0.0-223.255.255.255 主机号为8位,网络号为24位,根据主机位,一共有2^8 - 2(不为1或0),110开头
D类(组播): 224.0.0.0-239.255.255.255
E类(保留): 240.0.0.0-255.255.255.255
无分类编址:即不按照A B C规则,自动规定网络号 IP地址/网络号 例如128.168.0.11/20,网络号20位,那么主机号占32-20=12位,也可以划分子网
特殊IP地址
公有地址:通过它直接访问因特网。是全网唯一的IP地址
私有地址:非注册地址,专门为组织机构内部使用 A 10.0.0.0~10.255.255.255 B 172.16.0.0~172.31.255.255 C 192.168.0.0~192.168.255.255
其他特殊地址:主机号全1时代表广播地址
#子网划分
自定义网络位数,也就是自定义主机位数
IP地址:网络号+子网号+主机号
将主机号拿出几位作为子网号
网络号和子网号都为1,主机号都为0,这样的地址为子网掩码
子网号可以全为0和全1,主机号不能为全0或全1,因此,主机数需要-2
还可以聚合网络为超网,将网络号取出几位作为主机号
#IPv6
IPv6地址长度为128位,地址空间增大了2^96倍
4和6的过渡期间,主要采用三种基本技术:
双协议栈:主机同时运行4和6两套协议栈
隧道技术:在IPv4网络之上建立一条能够传输IPv6数据报的隧道
翻译技术:利用一台专门的翻译设备,在纯IPv4和纯IPv6网络之间转换IP报头的地址,还能透明通信
#网络规划与设计
三层模型:核心层、汇聚层和接入层
核心层:提供不同区域之间的最佳路由和高速数据传送
汇聚层:将网络业务连接到接入层,并且实施与安全、流量、负载和路由相关的策略
接入层:为用户提供了在本地网段访问应用系统的能力,解决相邻用户之间的互访需要,负责一些用户信息的收集工作和用户管理功能
建筑物综合布线系统PDS
- 工作区子系统:实现工作区终端设备到水平子系统的信息插座之间的互联
- 水平布线子系统:实现信息插座和管理子系统之间的连接
- 设备间子系统:实现中央主配线架与各种不同设备之间的连接
- 垂直干线子系统:实现各楼层设备间子系统之间的互连
- 管理子系统:连接各楼层水平布线子系统和垂直干缆线,负责连接控制其他子系统为连接其他子系统提供连接手段
- 建筑群子系统:各个建筑物通信系统之间的互联
#磁盘冗余陈列技术
RAID即磁盘冗余陈列技术,将数据分散存储在不同磁盘中,并并行读取,可冗余存储,提高磁盘访问速度,保障数据安全性
#网络存储技术
直接附加存储(DAS):将存储设备通过SCSI接口直接连接到一台服务器上使用
网络附加存储(NAS):通过网络接口与网络直接相连,由用户通过网络访问,有独立的存储系统,特点是进行小文件级的共享存取;支持即插即用,但难以获得满意的性能
存储区域网(SAN): 采用块级别存储,根据数据传输过程采用的协议,其技术划分为FC SAN、IP SAN和IB SAN技术
网络地址翻译(NAT):少量IP地址集合的过程称为NAT
默认网关: 默认网关的IP地址必须与本机IP地址在同一网段内
虚拟局域网VLAN:VLAN工作在OSI参考模型的第二层和第三层,一个VLAN就是一个广播域,VLAN之间的通信是通过第三层的路由器来完成的
虚拟专用网VPN:
PPP:安全认证介绍
冲突域和广播域:路由器可以阻断广播域和冲突域,交换机只能阻断冲突域,因此一个路由器下可以划分多个广播域和冲突域,一个交换机下整体是一个广播域,但可以划分多个冲突域;而物理层设备集线器下整体作为一个冲突域和一个广播域
#信息安全和信息系统安全
信息系统的安全空间:X、Y、Z三个轴形成的信息安全系统三维空间,X轴是安全机制,Y轴是OSI网络参考模型,Z轴是安全服务
安全空间的五大属性(要素):认证、权限、完整、加密和不可否认
信息安全含义及属性:保护信息的保密性、完整性、可用性,另外也包括其他属性,如真实性、可核查行、不可抵赖性和可靠性
保密性:信息不被泄露给未授权的个人、实体和过程或不被其使用的特性,包括最小授权原则、防暴露、信息加密、物理保密
完整性:信息未经授权不能改变的特性。保证完整性的方法包括:协议、纠错编码方法、密码校验和方法、数字签名、公证
可用性:需要时,授权实体可以访问和使用的特性
安全需求:物理线路安全(物理设备、物理环境)、网络安全(网络上的攻击、入侵)、系统安全(操作系统漏洞)、应用安全(上层的应用软件,包括数据库软件)
#信息安全技术
加密技术
对称加密技术:数据的加密和解密的密钥是相同的,属于不公开密钥加密算法,缺点是加密强度不高,且密钥分发困难。优点是加密速度快,适合加密大数据。
常见的对称密钥加密算法
DES、3DES、AES、RC-5、IDEA
非对称加密技术:数据的加密和解密的密钥是不同的,分为公钥和私钥。是公开密钥加密算法,其缺点是加密速度慢。优点是安全性高,不容易破解
原理:发送数据时,使用接收者的公钥作加密密钥,私钥作解密密钥。但无法保证完整性
常见的非对称加密算法:
RSA、Elgamal、ECC、背包算法
数字信封的原理:
信是对称加密的密钥,数字信封就是对此密钥进行非对称加密
运用了对称加密技术和非对称加密技术,本质是使用对称密钥加密数据,非对称密钥加密对称密钥,解决了对称密钥的传输问题
信息摘要:就是一段数据的特征信息,当数据发生了改变,信息摘要也会发生改变,发送方会将数据和信息摘要一起传给接收方,接收方会根据接收到的数据重新生成一个信息摘要,两者进行对比,如果一致,那么数据正确。信息摘要是由哈希函数生成的
特点:不管数据多长,都会产生固定长度的信息摘要,任何不同的输入数据,都会产生不同的信息摘要;单向性,即只能由数据生成信息摘要,不能由信息摘要还原数据
MD5、SHA-1
数字签名:唯一标识一个发送方
发送者发送数据时,使用发送者的私钥进行加密,接受者收到数据后,只能使用发送者的公钥进行解密,这样就能唯一确定发送方,这也是数字签名的过程,但无法保证机密性。保障完整性
公钥基础设施PKI:是以不对称加密技术为基础,以数据机密性、完整性、身份认证和行为不可抵赖性为安全目的,来实施和提供安全服务的具有普遍性的安全基础设施
数字证书:一个数据结构,是一种由一个可信任的权威机构签署的信息集合
签证机构CA:负责签发证书、管理和撤销证书。是所有注册用户所信赖的权威机构,CA在给用户颁发证书时要加上自己的数字签名,以保证证书信息的真实性。
防火墙:内部网络和外部因特网之间增加的一道安全防护措施,分为网络级防火墙和应用级防火墙
网络级防火墙:层次低但效率高
应用级防火墙:层次高但效率低
入侵检测系统IDS
防火墙技术主要是分隔来自外网的威胁,却对内网的直接攻击无能为力,位于防火墙之后的第二道屏障
原理:监控当前系统/用户行为
不同于防火墙,IDS入侵检测系统是一个监听设备,没有跨域在任何链路上,无须网络流量流经它便可以工作。
对IDS部署的唯一要求:IDS应当挂接在所有所关注流量都必须流经的链路上
选择位置:尽可能靠近攻击源、尽可能靠近受保护资源
入侵防御系统IPS:提前发现入侵行为
杀毒软件:用于检测和解决计算机病毒
蜜罐系统:伪造一个蜜罐网络引诱黑客攻击
#网络攻击和威胁
被动攻击:窃听、业务流分析、非法登录
主动攻击:假冒身份、抵赖、旁路控制、重放攻击、拒绝服务DOS
重放攻击:所截获的某次合法的通信数据拷贝,出于非法的目的而被重新发送
拒绝服务DOS:对信息或其他资源的合法访问被无条件地阻止
计算机病毒和木马
病毒:
木马:是一种后门程序
物理层主要使用物理手段隔离屏蔽物理设备等,其他层都是靠协议来保证传输的安全
传输层:TLS
应用层~传输层:SET、SSL
应用层:PGP、HTTP
SSL协议:安全套接字协议,被设计为加强Web安全传输协议,安全性高,和HTTP结合之后,形成HTTPS安全协议,端口号为443
SSH协议:安全外壳协议,被设计为加强Telnet/FTP安全的传输协议
SET协议:安全电子交易协议,应用于B2C中保障支付信息的安全性
Kerberos协议:是一种网络身份认证协议,该协议的基础是基于信息第三方,它提供了在开放型网络中进行身份认证的方法
PGP协议:安全电子邮件协议,使用RSA公钥证书进行身份认证
#知识产权和标准化
知识产权是指公民、法人、非法人单位对自己创造性智力成果和其他科技成果依法享有的民事权。
包含著作权、专利权、商标权、商业秘密权
无体性:知识产权的对象时没有具体形体,是智力创造成果
专有性:除权利人同意或法律规定外,权利人以外的任何人不得享有或使用该项权利
地域性:只在授予其权利的国家或确认其权利的国家产生
时间性:仅在法律规定的期限内受到保护
商标权:有效期10年
发明专利权:保护期为20年
实用新型和外观设计专利权:保护期为10年
知识产权人的确定
职务作品:
专利权:离职、退休或调动工作后1年内,与原单位工作相关,那么原单位享有专利
委托作品:
单位和委托的区别在于,当合同中未规定著作权的归属时,著作默认归于单位,而委托创作中,著作权默认归属于创作方个人
侵权判定:
中国公民、法人或者其他组织的作品,无论是否发表,都享有著作权,开发软件所用的思想、处理过程、操作方法或者数学概念不受保护
不适用:法律、法规、...
侵权判定:
#标准划分
分为国际标准、国家标准、行业标准、区域/地方标准和企业标准
强制性国家标准代号为GB,推荐性国家标准代号为GB/T、国家标准指导性文件代号GB/Z
#程序设计语言的基本概念
低级语言:机器语言(计算机硬件只能识别0和1的指令序列)、汇编语言
高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较相近
各程序设计语言特点:
C: 指针操作能力强,可以开发系统级软件,高效
C++: 面向对象,高效
Java语言:面向对象,中间代码跨平台
C#: 面向对象,中间代码
Python: 面向对象、解释型计算机程序设计语言
Prolog: 逻辑型程序设计语言
汇编:将汇编语言翻译成目标程序执行
解释和编译:将高级语言翻译成目标程序执行。不同之处在于编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低
程序设计语言定义三要素:语法、语义、语用
语法:是指程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则
语义:按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义
语用:构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响
程序设计语言的分类:
命令式和结构化程序设计语言:Fortran、PASCAL、C
面向对象 C++、JAVA、Smalltalk、Python
函数式程序设计语言:LISP、Haskell、Scala、Scheme、APL
逻辑型程序设计语言:PROLOG
程序设计语言的基本成分
- 数据成分:指一种程序设计语言的数据和数据类型。数据分为常量、变量、全局量、局部量
- 运算成分:指明允许使用的运算符号及运算规则
- 控制成分:指明语言允许表述的控制结构。包括顺序结构、选择结构、循环结构
- 传输成分:指明语言允许的数据传输方式。如赋值处理、数据的输入输出等
- 函数
函数的定义:函数首部和函数体。函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型
函数应该先声明后引用。函数原型用于声明函数
函数调用的一般形式为:函数名(实参表)
函数调用时实参与形参间交换信息的方法由值调用和引用调用两种
值调用:若实现函数调用时将实参的值传递给相应的形参,则称为传值调用
传值类型的实参可以是常量、变量、表达式或函数调用引用调用:当形式参数为引用类型时,形参名实际上是实参的别名
实参必须具有地址
#编译程序基本原理
编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中;对于可执行语句,需要翻译成中间代码或目标代码
词法分析:从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。记号流。可通过确定的有限自动机或者不确定的有限自动机作为工具
语法分析:逻辑阶段。在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“表达式”等待,判断源程序在结构上是否正确,例如括号不配对
语义分析:对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。如类型匹配、除法除数不为0等。又分为静态语义错误(编译阶段可以查找出来)和动态语义错误(只能在运行时发现)
中间代码生成:根据语义分析产生的。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式、四元式和树等形式不是必须的,同时存在分配寄存器的工作
代码优化
目标代码生成:经过优化链接,最终生成可执行的目标代码
文法定义
空串ε:由零个字符组成的序列,|ε|=0
连接:S·T,连接符号“·”可省略
∑*:是指包括空串ε在内的∑上所有字符串的集合
文法G是一个四元组,可表示为G=(V,T,P,S)
V: 非终结符
T: 终结符
S: 起始符
P: 产生式
乔姆斯基把文法分成4种类型,即0型、1型、2型和3型
0型文法也称为短语文法,其功能相当于图灵机,任何0型语言都是递归可枚举的
1型文法也称为上下文有关文法,这种文法意味着对非终结符的替换必须考虑上下文,并且一般不允许替换成ε串
2型文法就是上下文无关文法,非终结符的替换无须考虑上下文。程序设计语言中的大部分语法都是上下文无关文法
3型文法等价于正规式,因此也被称为正规文法或线性文法
#有限自动机
是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为确定的有限自动机和不确定的有限自动机两类
确定的有限自动机(DFA)
不确定的有限自动机(NFA)
区别在于输入一个字符,看能否得出唯一的后继
存在终态才是有限自动机
#语法分析方法
自上而下语法分析:最左推导,从左至右。递归下降思想,原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,是一种自上而下的语法分析方法
自下而上语法分析:最右推导,从右至左。移进-规约思想,设置一个栈
#数据结构
线性结构:每个元素最多只有一个出度和一个入度,表现为一条线状。线性表按存储方式分为顺序表和链表
存储结构:顺序存储和链式存储
空间方面:链表需要存储指针,因此有空间浪费存在
时间方面:需要对元素进行破坏性操作,链表效率更高
需要对元素不改变结构操作时(读取、查找),顺序表效率更高
栈和队列:
循环队列:
设循环队列Q的容量为MAXSIZE,
出队时修改队尾指针 Q.rear = (Q.rear + 1) % MAXSIZE
出队时修改队头指针 Q.front = (Q.front + 1) % MAXSIZE
队列为空与队列满存在 Q.near = Q.front
为了区分队空和队满的情况,可采用以下两种处理方式:其一是设置一个标志,以区分头、尾指针的值相同时队列是空还是满;其二是牺牲一个存储单元,约定以“队列的尾指针所指位置的下一个位置是队头指针时”表示队列满,而头、尾指针的值相同时表示队列为空
模式匹配算法:
#线性结构
字符串:是一种特殊的线性表,其数据元素都为字符
朴素的模式匹配算法:从主串的第一个字符起与模式串的第一个字符比较
KMP算法:
#数组
定长线性表在维度上的扩展,即线性表中的元素又是一个线性表
#矩阵
特殊矩阵:矩阵中的元素的分布有一定规律。常见的有对称矩阵、三角矩阵和对角矩阵
#广义表
广义表是线性表的推广,是由0个或多个单元素或子表组成的有限序列
广义表与线性表的差异:线性表的元素都是结构上不可分的单元素,而广义表的元素既可以单元素,又可以是有结构的表
#树与二叉树
双亲、孩子和兄弟。
节点的度:一个节点的子树的个数记为该节点的度
叶子节点:度为0的节点
内部节点:度不为0的节点
节点的层次:根为第一层,根的孩子为第二层,依次类推
树的高度:一棵树的最大层数记为树的高度(或深度)
有序(无序)树:若将树中节点的各子树看出是从左到右具有次序的,即不能交换,则称该树为有序树,否则称为无序树
#二叉树
满二叉树:除了叶子节点,其他节点度都为2
完全二叉树:共有k层,最后一层需要满足从左到右排布
二叉树第i层上至多有2^(n-1)个节点
深度为n的二叉树至多由2^n - 1个节点 n>=1
对于任何一颗二叉树,若其终端节点数为n0,度为2的节点数为n2,则n0 = n2 + 1,总的分支数=总结点数-1(根节点除外)
具有n个节点的完全二叉树的深度为|log2(n)| + 1
二叉树的顺序存储结构:
顺序存储,就是用一组连续的存储单元存储二叉树中的节点,按照从上到下,从左到右的顺序依次存储每个节点(对完全二叉树而言既简单又节省空间,对于一般二叉树则不适用)
二叉树的链式存储结构:
可以用三叉链表或二叉链表来存储二叉树
三种遍历方式:先序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)
引入线索二叉树的目的:
保存二叉树遍历时某节点的前驱节点和后继节点的信息,如果在链式存储中再增加两个指针域,使其分别指向前驱和后继节点,但这样太浪费存储空间
若N个节点的二叉树使用二叉链表存储,则必然有n+1个空指针域,利用这些空指针域来存放节点的前驱和后继节点信息,需要增加两个标志 Itag Rtag
#最优二叉树
最优二叉树又称为哈夫曼树,是一类带权路径长度最短的树
路径:树中一个节点到另一个节点的通路
节点的路径长度:路径上的分支数目
树的路径长度:根节点到达每一个叶子节点之间的路径长度之和
权:节点代表的值
节点的带权路径长度:该节点到根节点之间的路径长度乘以该节点的权值
树的带权路径长度:树的所有叶子节点的带权路径长度之和
哈夫曼树的求法:将其中两个最小的权值作为叶子节点,其和作为父节点组成二叉树,并将父节点的值添加到该组权值中
哈夫曼编码:左节点的值小于右节点的值,才是标准的哈夫曼树,左分支为0,右分支为1
#查找二叉树
每个节点的所有左孩子节点值都小于父节点值,而所有右孩子节点值都大于父节点值,n个节点的连接数为n*(n-1)
#平衡二叉树
称为AVL树,性质:
左子树和右子树都是平衡二叉树,且左子树和右子树的高度只差的绝对值不超过1,,若将二叉树的节点的平衡因子定义为该节点左子树的高度减去右子树的高度,则值为-1、0、1
#图
无向图:图的节点之间的连接线是没有箭头的,不分方向
有向图:图的节点之间连接线是有箭头的,由方向
完全图:无向完全图中,节点两两之间都有连线,适合采用邻接矩阵存储
邻接矩阵:n个节点,那么是n * n矩阵
邻接链表:n个节点,n个
图的最小生成树
普里姆算法:从任意顶点出发,找出与其邻接的边权值最小的,时间复杂度为O(n^2)
克鲁斯卡尔算法:从边出发,将边权值大小排序,依次选取权值最小的边,直至囊括所有节点
拓扑序列:
图中一个节点入度为0,则应该最先执行活动
#顺序查找
从头到尾与表中的元素进行比较,如果中间存在关键字为key的元素,则返回成功
平均查找长度为:(n+1) / 2
时间复杂度为:O(n)
#折半查找
只适用于待查找序列中的元素是有序排列的情况,注意中间值位置求出小数,则向下取整
时间复杂度:O(log2(n))
#哈希表
通过一个以记录的关键字为自变量的函数得到该记录的存储地址
#排序
直接插入排序:对比,从小到大——依次和前面的值比较,找到第一个小于它的值,然后插入到它的后面。O(n^2) O(1) 稳定
希尔排序:缩小增量排序,对直接插入排序方法的改进 O(n^1.3) O(1) 不稳定
简单选择排序:本质就是每次选择出最小的元素进行交互 O(n^2)、O(1)、不稳定
堆排序:每次取走堆顶元素,而后将堆中最后一个元素移入堆顶,O(nlogn) O(1) 不稳定
冒泡排序:交换,遍历一次后把最大的值放在最右边或者把最小的值放在最左边,O(n^2) O(1) 稳定
快速排序:分治 O(nlogn) O(nlogn) 不稳定,最坏情况O(n^2)
归并排序:合并 O(nlogn) O(n) 稳定
基数排序:多个关键字 O(d(n+rd)) O(rd) 稳定
#算法
渐进符号:实际变化必须小于等于O括号内的渐进变化程度,例如n^2=O(n^3)是合法的,但n^2=O(n)是不合法的
#软件工程
软件工程的基本要素:方法、工具、过程
软件规划阶段:初步调查,对建设新系统的需求做出分析和预测。输出:可行性研究报告、系统设计任务书
系统分析阶段(逻辑设计阶段):“做什么”,对现行系统进行详细调查,提出新系统的逻辑模型,整个系统建设的关键阶段。输出:系统说明书
系统设计阶段(物理设计阶段):“怎么做”,总体设计和详细设计两个子阶段。输出:系统设计说明书(概要设计、详细设计说明书)
系统实施阶段:设计的系统付诸实施的阶段。输出:实施进展报告、系统测试分析报告
系统运行和维护阶段
能力成熟度模型(CMM): 初始级、可重复级、已定义级、已管理级、优化级
能力成熟度模型集成(CMMI): 两种表示方法,一种是阶段式模型,类似CMM,关注组织的成熟度,初始级、已管理级、已定义级、定量管理、优化级。第二种是连续式模型,关注过程域的能力
软件模型
瀑布模型(SDLC): 从上一项开发活动接受该项活动的工作对象作为输入;利用这一输入,实施该项活动应完成的工作内容;给出该项活动的工作内容,作为输出传给下一项开发活动;对该项活动的实施工作成果进行评审。系统的功能有较清晰的定义
螺旋模型:演化软件过程模型。周期性重复的螺旋线状。四阶段:指定计划、风险分析、实施工程和客户评估。强调了风险分析,适用于庞大而复杂的、高风险的系统
V模型:用于需求明确和需求变更不频繁的情形
单元测试针对编码过程,集成测试针对详细设计,系统测试针对概要设计,验收测试针对需求分析
原型化模型:第一步创建快速原型,特点:对用户的需求是动态响应、逐步纳入的,用于演示。不适合超大项目的开发
增量模型:首先开发核心模块功能,优先级最高的服务最先交付
特点:不利于模块划分,难点在于如何将客户需求划分为多个增量,每一次增量版本都可以作为独立可操作的作品
喷泉模型:以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法,适用于面向对象的开发方法
基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统,特点是增强了复用性
形式化方法模型(生命周期法):建立在严格数学基础上的一种软件开发方法。适用于开发目标清晰的软件开发
信息系统开发方法
结构化方法也称为生命周期法,是一种传统的信息系统开发方法,由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三部分有机组合
结构化方法的主要特点:
开发目标清晰化:“用户第一”的原则
开发工作阶段化:根据阶段工作目标和要求进行审查
开发文档规划化:按照要求完成相应的文档
设计方法结构化:在系统分析与设计时,从整体和全局考虑,自顶向下地分解;在系统实现时,根据设计要求,自底向上逐步实现整个系统
不足与局限:开发周期长、难以适应需求变化、很少考虑数据结构(面向过程,面向数据流的开发方法)
常用工具:数据流图、数据字典、结构化语言、判定表以及判定树
面向对象方法:任何事务都是对象,每一个对象都有自己的运动规律和内部状态,都属于某个对象类
特点:更好的复用性、三个阶段(系统分析、系统设计和系统实现)的界限变得不明确
普遍适用于各类信息系统的开发
不足之处:必须依靠一定的面向对象技术支持,在大型项目的开发上具有一定的局限性,不能涉足系统分析以前的开发环节
通常结构化方法和面向对象方法结合起来
原型化方法(快速原型法): 快速地建立一个系统模型展示给用户
是否实现功能分类:水平原型、垂直原型
最终结果分类:抛弃式原型、演化式原型
特点:使系统开发的周期缩短、成本和风险降低、速度加快,获得较高的综合开发效益
以用户为中心开发系统,对系统的功能和结构容易理解和接受
不足之处:开发的环境要求高,管理水平要求高
适用于需求不明确的系统开发,适用于对于分析层面大、技术层面难度不达的系统
敏捷开发
以人为核心、迭代、循序渐进的开发方法,更强调程序员团队与业务专家之间的紧密协作、面对面沟通,频繁交付新的软件版本,更好地适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用
结对编程:一个程序员开发,另一个程序员在一旁观察审查代码,能够有效提高代码质量
水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论
自适应开发:强调开发方法的适应性,侧重为软件的重要性提供最根本的基础
极限编程XP:核心是沟通、简明、反馈和勇气。提倡测试先行
并列争球法:每段时间一次的迭代称为一个“冲刺”
软件产品线:产品集合
逆向工程
软件复用
逆向工程:设计恢复的过程,四个级别:实现级(完备性最高)、结构级、功能级、领域级(完备性最低)
相关概念:重构、设计恢复、再工程和正向工程
- 软件开发工具:需求分析工具、设计工具、编码与排错工具
- 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
- 软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择
软件需求
分为需求开发和需求管理两大过程
需求开发:需求获取、需求分析、需求定义(需求规格说明书)、需求验证
业务需求:企业或客户对系统高层次的目标要求
用户需求:用户的具体目标或用户系统必须能完成的任务
系统需求:从系统的角度来说明软件的需求,包含功能需求、非功能需求和设计约束
需求获取
用户访谈:获取需求信息量大
问卷调查:用户多
采样:基于数理统计原理
联合需求计划(JRP):关键用户,组织会议
需求分析:需要分析人员把杂乱无章的用户要求和期望转化为用户需求
结构化需求分析:
特点:自顶向下、逐步分解、面向数据
三大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典
数据流图描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模
需求定义(软件需求规格说明书SRS): 整个开发工作的基础
方法:
- 严格定义(预先定义)
- 原型方法,迭代的循环型开发方法
需求验证
需求管理:定义需求基线
变更控制委员会CCB(配置控制委员会)
#处理流程设计
业务流程建模
标杆瞄准
IDEF0: 业务流程建模
IDEF1X: 数据建模(如ER模型)
IDEF4: 面向对象设计
流程表示工具
程序流程图(PFD-Program Flow Diagram):直观、清晰、易于掌握。程序流程图都由顺序、选择和循环结构组合或嵌套而成
IPO图:流程描述工具,构成软件系统的每个模块的输入、输出和数据加工
N-S图:表示嵌套和层次关系,具有强烈的结构化特征。不适合于复杂程序的设计
问题分析图(PAD): 结构化程序设计的图形工具
业务流程重组BPR
对企业的业务流程进行根本性的再思考和彻底性的再设计
基本原则:以流程为中心的原则、团队管理原则(以人为本)、以客户为导向的原则
业务流程管理BPM
以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法
包含三个层面:规范流程、优化流程和再造流程
系统设计
设计方法:流程化设计方法、面向对象设计方法
主要内容:概要设计、详细设计
概要设计基本任务:系统总体结构设计,形成软件的模块结构图,即系统结构图
详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计
测试原则和方法
系统测试
测试方法:静态测试和动态测试
静态测试:不在机器上运行,采用人工检测和计算机辅助静态分析的手段对程序进行检测
动态测试:实际运行程序进行软件测试
黑盒测试法:功能性测试
白盒测试法:结构性测试
测试阶段
单元测试:也称为模块测试,测试依据是软件详细设计说明书
集成测试:测试依据是软件概要设计文档
确认测试:用于验证软件的功能、性能和其他特性是否与用户需求一致
系统测试:测试对象是完整的、集成的计算机系统
配置项测试:测试对象是软件配置项
回归测试:测试软件变更之后,变更部分的正确性和对变更需求的符合性
测试策略:
- 自底向上:从最底层模块开始测试,需要编写驱动程序,优点是较早的验证了底层模块
- 自顶向下:先测试整个系统,需要编写桩程序,而后逐步向下直至最后测试最底层模块。优点是较早的验证了系统的主要控制和判断点。
- 三明治;两者都包括
黑盒测试用例:
等价类划分:设计一个新的测试用例,使其尽可能地覆盖尚未被覆盖的有效等价类;设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类
边界值划分:范围的两端值以及在此范围之外的与此范围间隔最小的两个值
错误推测:凭经验而言
因果图:反推
白盒测试用例:
语句覆盖SC:所有语句都要执行一遍,覆盖层级最低
判定覆盖DC:所有判断语句的条件的真假分支都要覆盖一次
条件覆盖CC:针对每一个判断条件内的每一个独立条件都要执行一遍真和假
条件判定组合覆盖CDC:同时满足判定覆盖和条件覆盖
路径覆盖:所有可行路径都覆盖了,覆盖层级最高
调试:找出错误的代码和原因
蛮力法、回溯法、原因排除法
软件度量:直接测量和间接测量
McCabe度量法:又称为环路复杂度,有向边为m,节点数为n,有向图的环路复杂度为m-n+2
遗留系统:任何基本上不能进行修改和演化以满足新的变化了的业务需求的信息系统
高水平低价值:集成
高水平高价值:改造
低水平低价值:淘汰
低水平高价值:继承
系统转换
新系统开发完毕,投入运行,现代现有系统的过程
直接转换:现有系统被新系统直接取代了
并行转换:新系统和老系统并行工作一段时间
分段转换:分期分批逐步转换
数据转换与迁移:系统切换前通过工具迁移、系统切换前采用手工录入、系统切换后通过新系统生成
系统的可维护性
定义:维护人员理解、改正、改动和改进这个软件的难易程度
评价指标:
易分析性
易改变性
稳定性
易测试性
维护性的依从性
包括:硬件维护、软件维护和数据维护
软件维护类型:正确性维护、适应性维护、完善性维护(改善)、预防性维护
#进度管理
范围管理
- 规范范围管理(编制范围管理计划): 如何定义、确认和控制项目范围的过程进行描述
- 定义范围:详细描述产品范围和项目范围,编制项目范围说明书,输入包括 项目章程。项目范围管理计划,组织过程资产。批准的变更申请
- 创建工作分解结构:整个项目分解为较小的、易于管理的组成部分,形成一个自上而下的分解结构
- 确认范围。正式验收已完成的可交付成果
- 范围控制。监督项目
产品范围:产品或者服务所应该包含的功能,是项目范围的基础
项目范围:为了能够交付产品,项目所必须做的工作,项目范围的定义是产生项目管理计划的基础。项目的范围基准是经过批准的项目范围说明书、WBS和WBS词典
WBS将项目整体或者主要的可交付策划给你个分解成容易管理、方便控制的若干个子项目或者工作包,定义项目边界
进度管理
实现工期目标
活动资源估算
COCOMO模型
- 基本:代码行数
- 中间:代码行数、产品、硬件人员、项目
- 详细:考虑软件工程中每一个步骤
COCOMO Ⅱ模型:估算选择:对象点、功能点和代码行
Gantt图(甘特图)和项目计划评审技术(PERT)图
关键路径法:是项目的最短工期,但却是从开始到结束时间最长的路径
- 最早开始时间(ES)
- 最早结束时间(EF): EF = ES + 工期
- 最迟结束时间(LF)
- 最迟开始时间(LS): LS = LF - 工期
最早开始时间 | 工期 | 最早完成时间 |
---|---|---|
活动名称 | ||
最迟开始时间 | 总浮动时间 | 最迟完成时间 |
顺推:最早开始ES=所有前置活动最早完成EF的最大值;最早完成EF=最早开始ES+持续时间
逆推:最晚完成LF=所有后序活动最晚开始LS的最小值;最晚开始LS=最晚完成LF-持续事件
总浮动时间:最迟开始LS-最早开始ES或最迟开始LF-最早完成EF 或关键路径-非关键路径时长
自由浮动时间:紧后活动最早开始时间的最小值-本活动的最早完成时间
成本管理
成本的类型
- 可变成本: 随着生产量、工作量或时间而变
- 固定成本: 不随生产量、工作量或时间的变化而变化的非重复成本
- 直接成本: 项目团队差率费
- 间接成本:分摊,税金、额外福利和保卫费用
- 机会成本:
- 沉没成本: 过去的决策已经发生了的,而不能由现在或将来的任何决策改变的成本
学习曲线
软件配置管理
配置项的状态可分为“草稿”、“正式”和“修改”
配置库可以分
- 开发库:开发人员的个人工作区
- 受控库:主库,包含当前的基线加上对基线的变更
- 产品库:也称为静态库、发行库、软件仓库,包含已发布使用的各种基线的存档,被置于完全的配置管理之下
质量管理
- 质量规划
- 质量保证
- 质量控制
6大特性:功能性、可靠性、可用性、效率、可维护性、可移植性
风险管理
- 风险管理计划编制
- 风险识别
- 风险定性分析
- 风险定量分析
- 风险应对计划编制
- 风险监控
项目风险:作用于项目上的不确定的事件或条件,既可能产生威胁,也可能带来机会
通过积极和合理的规划,超过90%的风险都可以进行提前应对和管理
风险的属性
- 随机性
- 相对性
- 风险的可变性
风险的分类
项目风险、技术风险和商业风险
风险的优先级通常是根据风险暴露即风险曝光度设定
#结构化开发方法
衡量模块独立程度的标准有两个:耦合性和内聚性
偶然内聚:无直接关系
逻辑内聚: 逻辑相似、参数决定
时间内聚:同时执行
过程内聚: 指定的过程顺序
通信内聚: 相同数据结构、相同输入输出
顺序内聚: 顺序执行、输入为输出
功能内聚: 共同作用、缺一不可
无直接耦合: 无直接关系
数据耦合: 传递数据值调用
标记耦合: 传递数据结构
控制耦合: 控制变量、选择执行某一功能
外部耦合: 软件外部环境
公共耦合: 公共数据结构
内容耦合: 模块内部关联
耦合程度不取决于模块提供的功能数
结构化分析与设计方法:面向数据流
数据流图DFD
数据流的流向必须经过加工
有输入但没有输出:称之为“黑洞”
有输出但没有输入:称之为“奇迹”
输入不足以产生输出:称之为“灰洞”
数据字典DD
数据流、数据项、数据存储和基本加工
加工逻辑描述方法由:结构化语言、判定表和判定树
结构化设计方法
- 体系结构设计:定义软件的主要结构元素及其关系
- 数据设计:基于实体联系图确定软件涉及的文件系统的结构及数据库的表结构
- 接口设计:接口相关
- 过程设计:算法以及内部数据结构
#面向对象开发
对象
由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个实体。一个对象通常可以由对象名、属性和方法组成
类:现实世界中实体的形式化描述
- 实体类:现实世界中真实的实体
- 接口类(边界类):为用户提供一种与系统合作交互的方式
- 控制类:控制活动流,充当协调者
对象是类的实力,类是对象的模板
消息:体现对象间的交互
函数重载:同名不同参数
面向对象的分析
为了确定域,理解问题,包含五个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息
面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成
设计模式:以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等
设计原则
- 单一责任原则:仅有一个引起它变化的原因
- 开放-封闭原则: 可以扩展的,即开放的;不可修改的,即封闭的
- 里氏替换原则: 子类型必须能够替换掉他们的基类型
- 依赖倒置原则: 抽象不应该依赖于细节,细节应该依赖于抽象
- 接口分离原则: 依赖于抽象,不要依赖于具体
测试分4个层次
- 算法层
- 类层
- 模板层
- 系统层
统一建模语言UML
UML: 是一种可视化的建模语言,而非程序设计语言
结构: 构造块、规则和公共机制
构造块: 事物、关系和图
- 事物: 结构事物、行为事物、...
- 关系: 依赖、关联(组合和聚合,都是部分和整体的关系)、泛化(子类和父类之间的关系)、实现(一个类元指定了另一个类元保证执行的契约)
关联关系(直线)、依赖关系(虚线+实心箭头)、泛化关系(实线+空心箭头)、聚合关系(实线+空心菱形)、组合关系(实线+实心菱形)、实现关系(虚线+空心箭头)
类图: 静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系
对象图: 静态图,展现某一时刻一组对象及它们之间的关系,为类图的某一快照
用例图: 静态图,展现了一组用例、参与者以及它们之间的关系,用例之间的关系有扩展、包含、泛化
序列图(顺序图): 动态图,描述了以时间顺序组织的对象之间的交互活动。有同步消息(实心三角箭头)、异步消息(空心箭头)和返回消息(从右往左箭头虚线)
通信图(协作图): 动态图,强调参加交互的对象的组织
状态图: 动态图,展示了一个状态机,描述单个对象在多个用例中的行为
活动图: 动态图,是一种特殊的状态图。并发分岔、并发汇合
构件图: 静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。供接口,需接口
部署图: 静态图,为系统静态部署图,部署图物理模块的节点分布
UML 4+1视图
逻辑视图(设计视图): 类、子系统、包和用例实现的子集
进程视图: 可执行线程和进程作为活动类的建模
实现视图: 物理代码的文件和构件进行建模
部署视图: 构件部署到一组物理节点上,单项
用例视图: 最基本的需求分析模型
#设计模式
架构模式: 软件设计中的高层决策
设计模式
创建型模式:
- 抽象工厂(abstract factory): 抽象接口
- 构建器模式(Builder): 类和构造分离
- 工厂方法(factory method): 子类决定实例化
- 原型模式(prototype): 原型实例,拷贝
- 单例模式(singleton): 唯一实例
结构型模式
- 适配器模式(adapter): 转换,兼容接口
- 桥接模式(bridge): 抽象和实现分离
- 组合模式(composite): 整体-部分,树形结构
- 装饰模式(decorator): 附加职责
- 外观模式(facade): 对外统一接口
- 享元模式(flyweight): 细粒度,共享
- 代理模式(proxy): 代理控制
行为型设计模式
- 职责链模式(chain of responsibility): 传递请求,职责链接
- 命令模式(command): 日志记录、可撤销
- 解释器模式(interpreter): 解释器,虚拟机
- 迭代器模式(iterator): 顺序访问,不暴露内部
- 中介者模式(mediator): 不直接引用
- 备忘录模式(memento): 保存、恢复
- 观察者模式(observer): 通知、自动更新
- 状态模式(state): 状态变成类
- 策略模式(strategy): 算法替换
- 模板方法模式(template method): 模板
- 访问者模式(visitor): 数据和操作分类
惯用法