越努力,越幸运!!!

计算机系统基础

(一)CPU的功能
(1)程序控制功能。CPU通过执行指令来控制程序的执行顺序。
(2)操作控制。
(3)时间控制。
(4)数据处理。CPU最根本的任务。
(二)运算器。
运算器也称为算术逻辑单元(ArithmeticandLogicUnit,ALU),其主要功能是在控制器的控制下完成各种算术运算和逻辑运算。运算器的组成包含如下。
① 算术逻辑单元ALU:数据的算术运算和逻辑运算;
② 累加寄存器AC:通用寄存器,为ALU提供一个工作区,用在暂存数据;
③ 数据缓冲寄存器DR:写内存时,暂存指令或数据;
④ 状态条件寄存器PSW:存状态标志与控制标志。
(三)控制器。
控制器是分析和执行指令的部件,也是统一指挥并控制计算机各部件协调工作的中心部件,所依据的是机器指令。控制器的组成包含如下。
① 程序计数器PC:存储下一条要执行指令的地址;
② 指令寄存器IR:存储即将执行的指令;
③ 指令译码器ID:对指令中的操作码字段进行分析解释;
④ 地址寄存器AR:用来保存当前CPU所访问的内存单元的地址。
⑤时序部件:提供时序控制信号。

(四)Flynn 分类
1966年,Michael.J.Flynn 提出根据指令流、数据流的多倍性特征对计算机系统进行分类(通常称为 Flynn 分类法),有关定义如下。
(1)指令流:指机器执行的指令序列;
(2)数据流:指由指令流调用的数据序列,包括输入数据和中间结果,但不包括输出数据。

Flynn根据不同的指令流-数据流组织方式,把计算机系统分成以下四类。
(1)单指令流单数据流(Single Instruction stream and Single Data stream,SISD):SISD 其实就是传统的顺序执行的单处理器计算机,其指令部件每次只对一条指令进行译码,并只对一个操作部件分配数据。
(2)单指令流多数据流(Single Instruction stream and Multiple Data stream,SIMD): SIMD 以并行处理机(矩阵处理机)为代表,并行处理机包括多个重复的处理单元,由单一指令部件控制,按照同一指令流的要求为它们分配各自所需的不同数据。
(3)多指令流单数据流(Multiple Instruction stream and Single Data stream,MISD): MISD 具有n个处理单元,按 n 条不同指令的要求对同一数据流及其中间结果进行不同的处理。一个处理单元的输出又作为另一个处理单元的输入。这类系统实际上很少见到。
(4)多指令流多数据流(Multiple Instruction stream and Multiple Data stream,MIMD): MIMD 是指能实现作业、任务、指令等各级全面并行的多机系统。如多核处理器、多处理机属于 MIMD。
(五)指令系统
复杂指令系统CISC的特点
(1)指令数量众多。指令系统拥有大量的指令,通常有 100~250 条。
(2)指令使用频率相差悬殊。最常使用的是一些比较简单的指令,仅占指令总数的20%,但在程序中出现的频率却占80%。而大部分复杂指令却很少使用。
(3)支持很多种寻址方式。支持的寻址方式通常为 5~20 种。
(4)变长的指令。指令长度不是固定的,变长的指令增加指令译码电路的复杂性。
(5)指令可以对主存单元中的数据直接进行处理。典型的 CISC 通常都有指令能够直接对主存单元中的数据进行处理,其执行速度较慢。
(6)以微程序控制为主。CISC 的指令系统很复杂,难以用硬布线逻辑(组合逻辑)电路实现控制器,通常采用微程序控制。

精简指令系统RISC的特点
(1)指令数量少。优先选取使用频率最高的一些简单指令和一些常用指令,避免使用复杂指令。只提供了 LOAD(从存储器中读数)和 STORE(把数据写入存储器)两条指令对存储器操作,其余所有的操作都在 CPU 的寄存器之间进行。
(2)指令的寻址方式少。通常只支持寄存器寻址方式、立即数寻址方式和相对寻址方式。
(3)指令长度固定,指令格式种类少。因为 RISC 指令数量少、格式少、相对简单,其指令长度固定,指令之间各字段的划分比较一致,译码相对容易。

4)以硬布线逻辑控制为主。为了提高操作的执行速度,通常采用硬布线逻辑(组合逻辑)来构建控制器。
(5)单周期指令执行,采用流水线技术。因为简化了指令系统,很容易利用流水线技术,使得大部分指令都能在一个机器周期内完成。少数指令可能会需要多周期,例如, LOAD/STORE 指令因为需要访问存储器,其执行时间就会长一些。
(6)优化的编译器:RISC 的精简指令集使编译工作简单化。因为指令长度固定、格式少、寻址方式少,编译时不必在具有相似功能的许多指令中进行选择,也不必为寻址方式的选择而费心,同时易于实现优化,从而可以生成高效率执行的机器代码。
(7)CPU 中的通用寄存器数量多,一般在 32 个以上,有的可达上千个。

(六)数据表示
进制转换-----略

1 -1 1-1
原码 0000 0001 1000 0001 1000 0010
反码 0000 0001 1111 1110 1111 1111
补码 0000 0001 1111 1111 0000 0000
移码 1000 0001 0111 1111 0000 0000

补码是最适合进行数字加减运算的数字编码。
移码只用于表示浮点数的阶码,所以只用于整数

(七)校验码
码距与检错纠错:
  一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。若一个编码系统有四种编码分别为:0000,0011,1100,1111,此编码系统中0000与1111的码距为4;0000与0011的码距为2,是此编码系统的最小码距。因此该编码系统的码距为2。
1.在一个码组内为了检测e个误码,要求最小码距应该满足: d>=e+1 
 2.在一个码组内为了纠正t个误码,要求最小码距应该满足: d>=2t+1 
3、同时纠错检错:d>=e+t+1

例如:
  假如我们现在要对A,B两个字母进行编码。我们可以选用不同长度的编码,以产生不同码距的编码,分析它们的检错纠错能力。 
  1、若用1位长度的二进制编码。若A=1,B=0。这样A,B之间的最小码距为1。 
  合法码:{0,1};      非法码:{0,1}; 
2、若用2位长度的二进制编码,可选用11,00作为合法编码,也可以选用01,10作为合法编码。若以A=11,B=00为例,A、B之间的最小码距为2。  合法码:{11,00};     非法码:{01,10};
3、若用3位长度的二进制编码,可选用111,000作为合法编码。A,B之间的最小码距为3。 
  合法码:{111,000};     非法码:{001,010,011,100,101,110};

1、奇偶校验
只能检测代码中奇数位出错的编码,但不能发现偶数位出错的情况。
2、海明码
海明码的校验码的位置必须是在2n位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n位置

设数据位是n位,校验位是K位,则n和k必须满足以下关系:
2k≥n+k+1
3、循环冗余校验码CRC

–例题
● 海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。对于 32 位的数据,至少需要加( )个校验位才能构成海明码。
以 10 位数据为例,其海明码表示为 D9D8D7D6D5D4P4D3D2D1P3D0P2P1中,其中 Di(0≤i≤9)表示数据位,Pj(1 ≤j≤4)表示校验位,数据位 D9由 P4、P3和 P2进行校验(从右至左 D9的位序为 14,即等于 8+4+2,因此用第 8 位的 P4、第 4 位的 P3和第 2 位的 P2校验),数据位 D5 由( )进行校验
(1) A.3 B.4 C. 5 D.6
(2)A.P4P1 B. P4P2 C.P4P3P1 D. P3P2P1

试题分析

海明码数据位与校验位之间的关系可以采用下述公式表示:
2k≥n+k+1,其中数据位是n位,校验位是k位。因此第5题套入公式可得需要6位校验位。
第6题,D5在第10位,10=8+2=23+21,由于校验码处于20、21、22、23…位置,分别对应P1、P2、P3、P4,因此D5是由P4P2进行校验的。
参考答案:D、B

(八)指令控制方式

(1)顺序方式。各条机器指令之间顺序串行地执行,执行完一条指令后才取下一条指令。缺点是速度慢,机器各部件利用率低。

(2)重叠方式。在解释第K条指令的操作完成之前就可以开始解释第K+1条指令。

(3)流水方式

流水线的吞吐率和最大吞吐率:吞吐率是指单位内流水线处理机流出的结果数。对指令而言,就是单位时间内执行的指令数。

流水线加速比:

流水线周期:
执行时间最长的一段
公式:
① 理论公式:(t1+t2+…+tk)+(n-1)*△t
② 实践公式:(k+n-1)*△t

例如:若流水线把一条指令分为取指、分析和执行三个部分,三部分的时间分别是取指2ns,分析2ns,执行1ns。那么流水线周期是多少?100条指令全部执行完毕需要的时间是多少?
某计算机系统采用 5 级流水线结构执行指令,设每条指令的执行由取指令(2 Δt )、分析指令(1Δt )、取操作数(3Δt )、运算(1Δt )和写回结果(2Δt ) 组成, 并分别用5 个子部件完成,该流水线的最大吞吐率为( ) ;若连续向流水线输入10条指令,则该流水线的加速比为( )

试题分析
本题考查流水线计算。
流水线周期为:3Δt。
流水线的吞吐率为:指令条数/流水线执行时间。
即:
n/(2Δt+1Δt+3Δt+1Δt+2Δt+(n-1)*3Δt)=n/(6Δt+3nΔt)
流水线的最大吞吐率就是上面的式子中,n趋向于无穷大的结果。当n趋向于无穷大时,上式的结果为:1/3Δt。所以应该选B。
流水线加速比=不用流水线的执行时间/使用流水线的执行时间
10条指令不用流水线的执行时间=(2Δt+1Δt+3Δt+1Δt+2Δt)*10=90Δt。
10条指令使用流水线的执行时间=(2Δt+1Δt+3Δt+1Δt+2Δt)+(10-1)*3Δt=36Δt。
所以加速比为:90Δt/36Δt=5:2。
(九)存储系统

内存编址
存储器由一块块的空间(存储单元)组成,为了方便寻找到每一块空间,我们需要对每一个空间进行标识——内存编址。

芯片
存储器由若干个芯片构成。

内存容量
存储器的大小。内存容量=每个芯片容量芯片个数。
每个芯片的容量=一个地址代表的容量
编址总数。

数据总线
计算机一次处理n位的数据,则数据总线的长度为n。注意的是:数据总线的长度,并不一定代表一个地址的长度。


和数据总线紧密相关。数据总线有几位,则一个字就由多少位组成。如64位计算机,表示一次可以处理64位数据,则1个字就是64位。

地址总线
假如需要n位二进制数来表示所有的地址,则地址总线的个数为n。

例如:
内存按字节编址,地址从A4000H到CBFFFH,共有 (1) 个字节。若用存储容量为32K×8bit的存储芯片构成该内存,至少需要 (2) 片。
(1)A、80K B、96K C、160K D、192K
(2)A、2 B、5 C、8 D、10

分析:
1.先求出地址总个数:CBFFFH-A4000H+1=28000H(十六进制)
2*(164)+8*(163)=163840=160*1024(个)=160K(个)
2.求解芯片个数
160KB/32KB=5(个)

Cache:
在CPU的所有操作中,访问内存是最频繁的操作。由于一般微机中的主存储器的工作速度比CPU低一个数量级,加上CPU的所有访问都要通过总线这个瓶颈,所以,缩短存储器的访问时间是提高计算机速度的关键。采用在CPU和内存之间加进高速缓冲存储器cache的办法较好地解决了这一问题。
简单来说cache是为了解决高速运行的cpu与主存储器之间速度不匹配的问题。

cache的地址映像方法:
(1)直接映像。

(2)全相连映像

(3)组相联映像

cache的性能

CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中”,此时CPU直接从Cache中调用该内容;否则,就称为 “不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由于Cache的存取速率相当快,使得CPU的利用率大大提高,进而使整个系统的性能得以提升。

如果以Hc为代表对Cache的访问命中率,tc为Cache的存取时间,tm为主存的访问时间,则Cache的平均访问时间ta为 :
ta=Hctc+(1-Hc)tm

因为cache的内容是部分主存内容的副本,应该与主存内容保持一致。而CPU对cache的写入更改了cache内容,如何与主存内容保持一致就有几种写操作工作方式可供选择,统称为写策略。

1.写回法(write--back)

当CPU对cache写命中时,只修改cache的内容不立即写入主存,只当此行被换出时才写回主存。这种策略使cache在CPU-主存之间,不仅在读方向而且在写方向上都起到高速缓存作用。
2、写直达法(write–through)
  又称全写法,写透。是当cache写命中时,cache与主存同时发生写修改。
3、标记法
数据进入cache后,有效位置1,当cpu对该数据修改时,数据只写入主存并将该有效位置0。要从cache中读取数据时要测试其有效位,若为1则直接从cache中取数,否则从主存中取数。

磁盘存储器:

●在磁盘上存储数据的排列方式会影响 I/O 服务的总时间。假设每磁道划分成 10 个物理块,每块存放 1 个逻辑记录。逻辑记录 RI.R2, …, RI0 存放在同一个磁道上, 记录的安排顺序如下表所示;

假定磁盘的旋转速度为 30ms/周,磁头当前处在 R1 的开始处。若系统顺序处理这些记录,使用单缓冲区,每个记录处理时间为 6ms,则处理这 10 个记录的最 长时间为 (7) ;若对信息存储进行优化分布后,处理 10 个记录的最少时间为(8)_.
(7)A.189ms B.208ms C.289ms D.306ms
(8)A.60 ms B.90 ms C. l09ms D. 180ms

试题分析
系统读记录的时间为30/10=3ms。对第一种情况:系统读出并处理记录R1之后,将转到记录R4的开始处,所以为了读出记录R2,磁盘必须再转一圈,需要3ms(读记录)加30ms(转一圈)的时间。这样,处理10个记录的总时间应为处理前9个记录(即R1,R2,…,R9)的总时间再加上读R10和处理时间(9×33ms+ 9ms=306ms)。
若对信息进行分布优化的结果对应关系所示:
物理块 1 2 3 4 5 6 7 8 9 10
逻辑记录R1 R8 R5 R2 R9 R6 R3 R10 R7 R4
从上表可以看出,当读出记录R1并处理结束后,磁头刚好转至R2记录的开始处,立即就可以读出并处理,因此处理10个记录的总时间为:
10×(3ms(读记录)+6ms(处理记录))=10×9ms90ms
参考答案:(7)D (8)B

(十)总线(Bus)
是计算机各种功能部件之间传送信息的公共通信干线。
按照总线相对应cpu或其他芯片的位置可分为:
(1)内部总线
寄存器之间和算数逻辑部件ALU与控制部件之间传输数据所用的总线。
(2)外部总线
cpu与内存和I/O设备接口之间通讯

按照总线功能划分:
(1)地址总线——传送地址信息
(2)数据总线——传送数据信息
(3)控制总线——传送控制信号和时序信号
按总线在微机中的位置,可以分为机内总线和机外总线两种。
按总线功能划分,可以分为局部总线、系统总线、通信总线三种。
按照总线中数据线的多少,可以分为并行总线和串行总线。

程序设计语言基础知识
(一)程序语言基本概念
低级语言:0、1组成的机器指令序列或汇编语言(如:mov ax,bx )
高级语言:java、C、C++、Python、Delphi、PASCAL等。
编译程序:将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
解释程序:直接解释或翻译成中间代码。不生成独立的目标程序。

(二)编译程序基本原理

(1)词法分析阶段:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误。
(2)语法分析阶段:语法分析器以单词符号作为输入,分析单词符号是否形成符合语法规则的语法单位,如表达式、赋值、循环等,按语法规则分析检查每条语句是否有正确的逻辑结构。

(3)语义分析阶段:主要检查源程序是否存在静态语义错误,并收集类型信息供后面的代码生成阶段使用,如:赋值语句的右端和左端的类型不匹配。表达式的除数是否为零等。
(4)中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是使编译程序的结构在逻辑上更为简单明确。使用中间代码可提高编译程序的可移植性,常见的有逆波兰记号、四元式、三元式和树。
中间代码可以有多种形式,与具体的机器无关。
(5)中间代码优化和目标代码生成
(6)符号表管理——记录符号的信息
(7)出错处理——静态错误(语法错误、静态语义错误)、动态错误

(三)文法
文法G定义为一个四元组(VN,VT,P,S),其中,VN为非终结符集合,VT终结符集合;P是产生式结合;S称为识别符或开始符号,也是一个非终结符,至少要在一条产生式的左边出现。
G[S]:
S→aA|bB
A→bS|b
B→aS|a

0型文法——短语文法、图灵机、递归枚举
1型文法——上下文有关文法
2型文法——上下文无关文法(广泛使用)
3型文法——正规式

(二)有限自动机
计算机控制系统的控制程序具有有限状态自动机(FA)的特征,可以用有限状态机理论来描述。

某确定的有限自动机(DFA)的状态转换图如下图所示(A是初态,C是终态),则该DFA能识别 (B) 。

A.aabb B.abab
C.baba D.abba

操作系统基础知识

(一)操作系统功能
处理机管理
存储器管理
设备管理
文件管理
用户接口
(二)操作系统类型

单用户系统 一台处理机只支持一个用户程序
批处理系统 用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。人机不交互。
分时操作系统 把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。

网络操作系统 一种在通常操作系统功能的基础上提供网络通信和网络服务功能的操作系统。
分布式操作系统 以计算机网络为基础的,将物理上分布的具有自治功能的数据处理系统或计算机系统互联起来的操作系统。
嵌入式操作系统  运行在嵌入式智能芯片环境中,对整个智能芯片以及它所操作、控制的各种部件装置等资源进行统一协调、处理、指挥和控制。
(三)进程
进行资源分配和调度的基本单位。
进程通常由程序、数据集合、进程控制块 PCB 组成。
为了描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块(PCB)。 它是进程重要的组成部分,它记录了操作系统所需的、用于描述进程的当前状态和控制进程的全部信息。 操作系统就是根据进程的PCB来感知进程的存在,并依此对进程进行管理和控制。 PCB是进程存在的唯一标识。

(四)PV操作
P操作:
①将信号量S的值减1,即S=S-1;
②如果S>=0,则该进程继续执行;否则该进程置为等待状态。
V操作:
①将信号量S的值加1,即S=S+1;
②如果S>0该进程继续执行;否则说明有等待队列中有等待进程,需要唤醒等待进程。

真题(一)
某企业生产流水线M共有两位生产者,生产者甲不断地将其工序上加工的半成品放入半成品箱,生产者乙从半成品箱取出继续加工。假设半成品箱可存放n件半成品,采用PV操作实现生产者甲和生产者乙的同步可以设置三个信号量S、S1和S2,其同步模型如下图所示。

信号量S是一个互斥信号量,初值为( );S1、S2的初值分别为( )。
A.0 B.1 C. n D.任 意正整数

A. n、0 B .0、n C. 1、n D. n、1

试题分析
在本题中,题目告诉我们甲乙俩人互斥使用半成品箱这个共有资源,且只有一个半成品箱,那么互斥信号量的初值就应该为1。而从题目给出的同步模型图,我们可以看出,信号量S1是生产者甲的私有信号量,而S2是生产者乙的私有信号量,题目告诉我们半成品箱可存放n件半成品,那么初始状态时,S1的值应该为n,表示生产者甲最多只能生产n个半成品放入半成品箱,就需要生产者乙来协调工作。而S2的值为0,表示开始时半成品箱中没有半成品。

试题答案
B、A
真题(二)
进程P1、P2、P3、P4和P5的前趋图如下图所示:

若用PV操作控制进程P1、P2、P3、P4和P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。下图中a和b处应分别填( );c和d处应分别填写( );e和f处应分别填写( )。

试题分析
解决这类问题,可以先将信号量标于箭线之上,如:

再以此原则进行PV操作填充:
(1)若从P进程结点引出某些信号量,则在P进程末尾对这些信号量执行V操作。如:P1引出了信号量S1与S2,则P1末尾有:V(S1)V(S2)。
(2)若有信号量指向某进程P,则在P进程开始位置有这些信号量的P操作。如:S1进程指向P2,所以P2开始位置有P(S1)。
注意:
在这类题中,S1-S5具体标在哪个箭线上值得注意,标注的基本原则是:从结点标号小的开始标。如:P1引出两条线,则这两条必然是S1与S2,而由于指向的分别是P2P3,所以S1对应指向P2的箭头,S2对应指向P3的箭头。

试题答案
C、B、B
(五)死锁

(六)死锁

某系统中有3个并发进程竞争资源R,每个进程都需要5个R,那么至少有( )个R,才能保证系统不会发生死锁。

A.12 B.13 C.14 D.15

试题分析
在有限的资源下,要保证系统不发生死锁,则可以按这种逻辑来分析。首先给每个进程分配所需资源数减1个资源,然后系统还有1个资源,则不可能发生死锁。即:3*4+1=13个。

试题答案:B

(七)存储管理
逻辑地址:
CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
物理地址:
加载到内存地址寄存器中的地址,内存单元的真正地址。
静态重定位
是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令。
例如,MOV  AC,[500]
 静态重定位有着无需硬件支持的优点,但存在着如下的缺点:一是程序重定位之后就不能在内存中搬动了;二是要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域内。
动态重定位
不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切地说,是在CPU每次访问内存单元前才进行地址变换。
需硬件支持。
优点是:
(1)程序占用的内存空间动态可变,不必连续存放在一处。
(2)比较容易实现几个进程对同一程序副本的共享使用。
缺点是:
需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
现在一般计算机系统中都采用动态重定位方法。
(八)分区管理
固定分区 静态分区,作业装入之前划分,大小固定,内存利用率不高。
可变分区 动态分区,碎片多。首次适应算法、最佳适应算法、最坏适应算法。
可重定位分区 合并零散空间。

(九)分页管理

真题
某操作系统采用分页存储管理方式,下图给出了进程A和进程B的页表结构。如果物理页的大小为1K字节,那么进程A中逻辑地址为1024(十进制)的变量存放在( )号物理内存页中。假设进程A的逻辑页4与进程B的逻辑页5要共享物理页4,那么应该在进程A页表的逻辑页4和进程B页表的逻辑页5对应的物理页处分别填( )。

试题分析
1、1k=1024, 从0号开始逻辑页0可存下0~1023,1024存在逻辑页1上,对应的物理页为3。
2、共享页4,都是4,4。

(十)分段存储管理

(十一)段页式存储管理

真题

根据公式 ,可以分别计算段号,页号以及页内地址最大的寻址空间。存储管理系统中的地址长度均表示为最大的寻址空间。
页内地址为13位,即页大小为213=8K;页号地址为11位,即页数最多为211=2048;段号地址为8位,即段数最多为28=256。

(十二)设备管理

在计算机中,I/O系统可以有5种不同的工作方式,分别是程序控制方式、程序中断方式、DMA工作方式、通道方式、I/O处理机。

1、程序控制方式
分为无条件查询和程序查询方式。
① 无条件传送方式
I/O端口总是准备好接受主机的输出数据,或是总是准备好向主机输入数据,而cpu在需要时,随时直接利用I/O指令访问相应的I/O端口,实现与外设的数据交换。优点是软、硬件结构简单,缺点是对时序要求高,只适用于简单的I/O控制。
② 程序查询方式
程序查询方式也称为程序轮询方式,该方式采用用户程序直接控制主机与外部设备之间输入/输出操作。CPU必须不停地循环测试I/O设备的状态端口,当发现设备处于准备好(Ready)状态时,CPU就可以与I/O设备进行数据存取操作。这种方式下的CPU与I/O设备是串行工作的。
2、中断方式
当I/O设备结束(完成、特殊或异常)时,就会向CPU发出中断请求信号,CPU收到信号就可以采取相应措施。当某个进程要启动某个设备时,CPU就向相应的设备控制器发出一条设备I/O启动指令,然后CPU又返回做原来的工作。CPU与I/O设备可以并行工作,与程序查询方式相比,大大提高了CPU的利用率。
3、DMA(直接内存存取)方式
DMA方式也称为直接主存存取方式,其思想是:允许主存储器和I/O设备之间通过“DMA控制器(DMAC)”直接进行批量数据交换,除了在数据传输开始和结束时,整个过程无须CPU的干预。

4、通道控制方式
在一定的硬件基础上利用软件手段实现对I/O的控制和传送,更多地免去了cpu的接入,使主机和外设并行工作程度更高。

5、I/O处理机
指专门负责输入/输出的处理机。可以有独立的存储器、运算部件和指令控制部件。

(十三)设备管理
文件的逻辑结构:
文件的逻辑组织是为了方便用户使用。一般文件的逻辑结构可以分为两种:无结构的字符流文件和有结构的记录文件。记录文件由记录组成,即文件内的信息划分成多个记录,以记录为单位组织和使用信息。

记录文件有顺序文件、索引顺序文件、索引文件和直接文件。

(1)顺序文件。大多数文件是顺序文件。顺序文件的记录定长,记录中的数据项的类型长度与次序固定,一般还有一个可以唯一标识记录的数据项,称为键(key),记录是按键值的约定次序组织的。顺序文件常用于批处理应用,对于查询或更新某个记录的处理性能不太好。
(2)索引顺序文件。
(3)索引文件。
(4)直接文件。直接文件又称哈希(Hash)文件。记录以它们在直接访问存储设备上的物理地址直接(随机地)访问。直接文件常用 于需要高速访问文件而且每次仅访问一条记录的应用中。

文件的物理结构:
文件的物理结构是指文件在存储设备上的存放方法。文件的物理结构侧重于提高存储器的利用效率和降低存取时间。文件的存储设备通常划分为大小相同的物理块,物理块是分配和传输信息的基本单位。文件的物理结构涉及文件存储设备的组块策略和文件分配策略,决定文件信息在存储设备上的存储位置。常用的文件分配策略有:
(1)顺序分配(连续分配)。
(2)链接分配(串联分配)。
(3)索引分配。这是另一种对文件存储不连续分配的方法。采用索引分配方法的系统,为每一个文件建立一张索引表,索引表中每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。

真题
● 某文件系统文件存储采用文件索引节点法。假设文件索引节点中有8个地址项iaddr[0]~iaddr[7],每个地址项大小为4字节,其中地址项iaddr[0]~iaddr[5]为直接地址索引,iaddr[6]是一级间接地址索引,iaddr[7]是二级间接地址索引,磁盘索引块和磁盘数据块大小均为4KB。该文件系统可表示的单个文件最大长度是( )KB。若要访问iclsClient.dll文件的逻辑块号分别为6、520和1030,则系统应分别采用( )。
(7)A.1030  B.65796  C.1049606  D.4198424
(8)A.直接地址索引、一级间接地址索引和二级间接地址索引
  B.直接地址索引、二级间接地址索引和二级间接地址索引
  C.一级间接地址索引、一级间接地址索引和二级间接地址索引
  D.一级间接地址索引、二级间接地址索引和二级间接地址索引
试题分析
直接索引范围:6*4KB=24KB ,对应逻辑块号:0-5;
一级间接索引范围:(4KB/4B)4KB=4096KB ,对应逻辑块号:6-1029;
二级间接索引范围:(4KB/4B)
(4KB/4B)*4KB=4194304KB ,对应逻辑块号:1030以及上。
单个文件最大长度是: 24KB + 4096KB + 4194304KB = 4198424KB
参考答案:(7)D (8)C

(十四)文件存储设备管理
位示图法
该方法是在外存上建立一张位示图(Bitmap),记录文件存储器的使 用情况。每一位仅对应文件存储器上的一个物理块,取值0 和1 分别表示空闲和占用。文件存储器上的物理块依次编号为:0、1、2、…。假如系统中字长为32位,有4096个物理块,那么在位示图中的第1个字对应文件存储器上的0、1、2、…、31号物理块;第2 个字对应文件存储器上的32、33、34、…、63号物理块;第128字对应文件存储器上的4064、4065、…、4095号物理块。这样位示图的大小为32字。

真题
某文件管理系统在磁盘上建立了位示图(bitmap),记录磁盘的使用情况。若磁盘上物理块的编号依次为:0、1、2、…;系统中的字长为32位,位示图中字的编号依次为:0、1、2、…,每个字中的一个二进制位对应文件存储器上的一个物理块,取值0和1分别表示物理块是空闲或占用。假设操作系统将2053号物理块分配给某文件,那么该物理块的使用情况在位示图中编号为( )的字中描述。
A.32
B.33
C.64
D.65
试题分析
参考答案:C
2053/32=64.156,并且位示图是从0号开始所以选择C

============================================================================

软件开发模型

序号 章节 内容
1 软件开发模型 开发生命周期模型系统开发方法论
2 软件测试 测试的目的测试的类型测试的阶段性能测试第三方测试面向对象测试基础
3 软件维护 软件维护

(一)开发生命周期模型
在开发模型知识点中,我们要掌握软件生命周期的概念、各种开发模型的特点和应用场合。主要的开发模型有瀑布模型、增量模型、螺旋模型、喷泉模型、智能模型、V模型、RAD模型、CBSD模型、原型方法、XP方法、RUP方法等。
(二)瀑布模型
瀑布模型也称为生命周期法,是生命周期法中最常用的开发模型,它把软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。采用瀑布模型的软件过程如图

(1)软件计划(问题的定义及规划):主要确定软件的开发目标及其可行性。
(2)需求分析:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。
(3)软件设计:主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计(概要设计)和详细设计。
(4)程序编码:将软件设计的结果转换成计算机可运行的程序代码。在程序编写中必须制定统一、符合标准的编写规范,以保证程序的可读性,易维护性,提高程序的运行效率。
(5)软件测试:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
(6)软件维护:软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求,要延续软件的使用寿命,就必须对软件进行维护。

瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。瀑布模型的本质是“一次通过”,即每个活动只做一次,最后得到软件产品,也称做“线性顺序模型”或者“传统生命周期”。
其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,作为输出传给下一项活动;对该项活动实施的工作进行评审,若其工作得到确认,则继续下一项活动,否则返回前项,甚至更前项的活动进行返工。
瀑布模型有利于大型软件开发过程中人员的组织与管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。然而软件开发的实践表明,上述各项活动之间并非完全是自上而下的,而是呈线性图示,因此,瀑布模型存在严重的缺陷。
(1)由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样,软件与用户见面的时间间隔较长,也增加了一定的风险。
(2)在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能导致整个软件项目开发失败。
(3)在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以说是不太可能的。

(三)变换模型
变换模型(演化模型)是在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。

(四)螺旋模型
螺旋模型将瀑布模型和变换模型相结合,它综合了两者的优点,并增加了风险分析。它以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过制订计划、风险分析、实施工程、客户评价等活动,并开发原型的一个新版本。经过若干次螺旋上升的过程,得到最终的系统,如图

(五)喷泉模型、
喷泉模型对软件复用和生命周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。"喷泉"一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动中,分析、设计和编码之间不存在明显的边界,如图

(二)V模型
在开发模型中,测试常常作为亡羊补牢的事后行为,但也有以测试为中心的开发模型,那就是V模型。V模型只得到软件业内比较模糊的认可。V模型宣称测试并不是一个事后弥补行为,而是一个同开发过程同样重要的过程,如图

V模型描述了一些不同的测试级别,并说明了这些级别所对应的生命周期中不同的阶段。在图中,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程的各个阶段。请注意在不同的组织中,对测试阶段的命名可能有所不同。
V模型的价值在于它非常明确地表明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系:
(1)单元测试的主要目的是针对编码过程中可能存在的各种错误。例如:用户输入验证过程中的边界值的错误。
(2)集成测试的主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误。
(3)系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行。例如:在产品设置中是否达到了预期的高性能。
(4)验收测试通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。

(六)增量模型
增量模型融合了瀑布模型的基本成分(重复的应用)和原型实现的迭代特征。
增量模型采用随着时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的"增量“.
当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。
客户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。
增量模型强调每一个增量均发布一个可操作的产品。

增量模型像原型实现模型和其他演化方法一样,本质上是迭代的。但与原型实现不同的是增量模型强调每一个增量均发布一个可操作产品。早期的增量是最终产品的"可拆卸"版本,但它们确实提供了为用户服务的功能,并且提供了给用户评估的平台。增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求,还需要更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。

采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源,如果核心产品很受欢迎,则可以增加人力实现下一个增量;当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。增量模型的缺点是如果增量包之间存在相交的情况且不能很好地处理,就必须做全盘的系统分析。增量模型将功能细化、分别开发的方法适用于需求经常改变的软件开发过程。

(七)RAD模型
快速应用开发(Rapid Application Development,RAD)模型是一个增量型的软件开发过程模型,强调极短的开发周期。RAD模型是瀑布模型的一个“高速”变种,通过大量使用可复用构件,采用基于构件的建造方法赢得快速开发。如果需求理解得好且约束了项目的范围,利用这种模型可以很快地创建出功能完善的“信息系统“。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。采用RAD模型的软件过程如图所示。

RAD模型各个活动期所要完成的任务如下。
(1)业务建模:以什么信息驱动业务过程运作?要生成什么信息?谁生成它?信息流的去向是哪里?由谁处理?可以辅之以数据流图。
(2)数据建模:为支持业务过程的数据流,找数据对象集合,定义数据对象属性,与其他数据对象的关系构成数据模型,可辅之以E-R图。
(3)过程建模:使数据对象在信息流中完成各业务功能。创建过程以描述数据对象的增加、修改、删除、查找,即细化数据流图中的处理框。
(4)应用程序生成:利用第四代语言(4GL)写出处理程序,重用已有构件或创建新的可重用构件,利用环境提供的工具自动生成并构造出整个应用系统。
(5)测试与交付,由于大量重用,一般只做总体测试,但新创建的构件还是要测试的。

与瀑布模型相比,RAD模型不采用传统的第三代程序设计语言来创建软件,而是采用基于构件的开发方法,复用已有的程序结构(如果可能的话)或使用可复用构件,或创建可复用的构件(如果需要的话)。在所有情况下,均使用自动化工具辅助软件创造。很显然,加在一个RAD模型项目上的时间约束需要"一个可伸缩的范围".如果一个业务能够被模块化使得其中每一个主要功能均可以在不到三个月的时间内完成,那么它就是RAD的一个候选者。每一个主要功能可由一个单独的RAD组来实现,最后再集成起来形成一个整体。

RAD模型通过大量使用可复用构件加快了开发速度,对信息系统的开发特别有效。但是像所有其他软件过程模型一样,RAD方法也有其缺陷:
(1)并非所有应用都适合RAD.RAD模型对模块化要求比较高,如果有哪一项功能不能被模块化,那么建造RAD所需要的构件就会有问题;如果高性能是一个指标,且该指标必须通过调整接口使其适应系统构件才能赢得,RAD方法也有可能不能奏效。
(2)开发者和客户必须在很短的时间完成一系列的需求分析,任何一方配合不当都会导致RAD项目失败。
(3)RAD只能用于信息系统开发,不适合技术风险很高的情况。当一个新应用要采用很多新技术或当新软件要求与已有的计算机程序有较高的互操作性时,这种情况就会发生。

(八)基于构件的模型
构件(Component,组件)是一个具有可重用价值的、功能相对独立的软件单元。基于构件的软件开发(Component Based Software Development,CBSD)模型是利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。
基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。基于构件的开发模型由软件的需求分析和定义、体系结构设计、构件库建立、应用软件构建、测试和发布5个阶段组成。采用基于构件的开发模型的软件过程如图

构件作为重要的软件技术和工具得到了极大的发展,这些新技术和工具有Microsoft的DCOM,Sun的EJB,OMG的CORBA等。基于构件的开发活动从标识候选构件开始,通过搜索已有构件库,确认所需要的构件是否已经存在,如果已经存在,就从构件库中提取出来复用;如果不存在,就采用面向对象方法开发它。在提取出来的构件通过语法和语义检查后,将这些构件通过胶合代码组装到一起实现系统,这个过程是迭代的。
基于构件的开发方法使得软件开发不再一切从头开始,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,其优点是构件组装模型导致了软件的复用,提高了软件开发的效率;构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用;构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性,可实现分步提交软件产品。
缺点是由于采用自定义的组装结构标准,缺乏通用的组装结构标准,引入具有较大的风险;可重用性和软件高效性不易协调,需要精干的、有经验的分析人员和开发人员,一般的开发人员插不上手,客户的满意度低;过分依赖于构件,构件库的质量影响着产品质量。

(九)原型方法
软件原型是所提出的新产品的部分实现,建立原型的主要目的是为了解决在产品开发的早期阶段的需求不确定的问题,其目的是明确并完善需求、探索设计选择方案、发展为最终的产品。
原型有很多种分类方法。从原型是否实现功能来分,软件原型可分为水平原型和垂直原型两种。水平原型也称为行为原型,用来探索预期系统的一些特定行为,并达到细化需求的目的。水平原型通常只是功能的导航,但并未真实实现功能。水平原型主要用在界面上。垂直原型也称为结构化原型,实现了一部分功能。垂直原型主要用在复杂的算法实现上。

从原型的最终结果来分,软件原型可分为抛弃型原型和演化型原型。抛弃型原型也称为探索型原型,是指达到预期目的后,原型本身被抛弃。抛弃型原型主要用在解决需求不确定性、二义性、不完整性、含糊性等。演化型原型为开发增量式产品提供基础,是螺旋模型的一部分,也是面向对象软件开发过程的一部分。演化型原型主要用在必须易于升级和优化的项目,适用于Web项目。
有些文献把原型分为实验型、探索型和演化型。探索型原型的目的是要弄清对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性。实验型原型用于大规模开发和实现之前,考核方案是否合适,规格说明是否可靠。进化型原型的目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。
(十)XP方法
XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于:
(1)在更短的周期内,更早地提供具体、持续的反馈信息。
(2)迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
(3)依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
(4)依赖于口头交流、测试和源程序进行沟通。
(5)倡导持续的演化式的设计。
(6)依赖于开发团队内部的紧密协作。
(7)尽可能达到程序员短期利益和项目长期利益的平衡。
如图所示,XP由价值观、原则、实践和行为四个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。
XP的核心是其总结的4大价值观,即沟通、简单、反馈和勇气。它们是XP的基础,也是XP的灵魂。XP的5个原则是快速反馈、简单性假设、逐步修改、提倡更改和优质工作。而在XP方法论中,贯彻的是"小步快走"的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。
在XP中,集成了12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。

(十一)RUP方法
RUP(Rational Unified Process)是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。RUP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,RUP使用的是统一建模语言UML.
与其他软件过程相比,RUP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量。
RUP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图

图中可以看出:基于RUP的软件过程是一个迭代过程。通过初始、细化、构建和提交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件。除非产品退役,否则通过重复同样的四个阶段,产品将演化为下一代产品,但每一次的侧重点都将放在不同的阶段上。这些随后的过程称为演化过程。
在进度和工作量方面,所有阶段都各不相同。尽管不同的项目有很大的不同,但一个中等规模项目的典型初始开发周期应该预先考虑到工作量和进度间的分配,如表

对于演进周期,初始和细化阶段就小得多了。能够自动完成某些构建工作的工具将会缓解此现象,并使得构建阶段比初始阶段和细化阶段的总和还要小很多。
RUP的工作流程分为两部分:核心工作流程与核心支持工作流程。核心工作流程(在项目中的流程)包括业务需求建模、分析设计、实施、测试、部署;核心支持工作流程(在组织中的流程)包括环境、项目管理、配置与变更管理。

============================================================================

系统开发方法论
系统的开发方法主要包括结构化分析与设计、面向数据结构的设计、面向对象分析与设计以及构件化方法四种。
1.结构化分析与设计
这种方法采用结构化技术来完成软件开发的各项任务。该方法把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务,与瀑布模型有很好的结合度,是与其最相适应的开发方法。
结构化方法的核心思想是"自顶向下,逐步分解".
2.面向数据结构的设计
数据的输入、存储都涉及不同的数据结构,面向数据结构设计方法的基本思想是根据数据结构导出程序结构。典型的面向数据结构的设计方法包括Jackson方法和Warnier方法。
Jackson方法的基本步骤:先建立系统的数据结构;接着以数据结构为基础,对应地建立程序结构;列出程序中要用到的各种基本操作,然后将操作分配到适当的模块中去。
面向数据结构的设计方法并没有明显地使用软件结构的概念,对于模块独立性原则也重视不足,因此并不适合于复杂的软件系统。
3.面向对象分析与设计
这种方法引入了"对象"的概念,将数据和方法封装在一起,提高了模块的聚合度,降低了耦合度,更大程度上支持软件复用。面向对象方法是现在最流行和最具有发展前景的软件开发方法。
4.构件化开发
为了降低开发费用、提高生产率,以及在快速的技术演化面前提供受控的系统升级的开发方式,就催生了基于构件的软件开发(Component-Based Software Development,CBSD)。它通过有计划地集成现有的软件部分来进行软件开发。它可以有效地遏制复杂性、缩短发布时间、提高一致性,更有效地利用本领域的最佳方法、提高生产率、增加项目进度的可视性、支持并行和分布式的开发、减少维护费用。采用CBSD后,所有的软件解决方案将可以使用预建的构件和模板,像"搭积木"式地建造。
这种"积木"就是构件(组件),构件是一个功能相对独立的具有可重用价值的软件单元。在面向对象方法中,一个构件由一组对象构成,包含了一些协作类的集合,它们共同工作来提供一种系统功能。构件具有5个基本要素:规格说明、一个或多个实现、受约束的构件标准、包装方法和部署方法。
可重用性是指系统和(或)其组成部分能在其他系统中重复使用的程度。软件开发的全生命周期都有可重用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例,都是可以被重复利用和借鉴的有效资源。可重用性体现在软件的各个层次,通用的、可复用性高的软件模块往往已经由操作系统或开发工具提供,如通用库、标准组件和标准模板库等,并不需要程序员重新开发。

============================================================================

软件测试

(一)测试的目的
软件测试是软件质量保证的主要手段之一,也是在将软件交付给客户之前所必须完成的步骤。目前,软件的正确性证明尚未得到根本的解决,软件测试仍是发现软件错误和缺陷的主要手段。软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。
1983年,Bill Hetzel在"Complete Guide of Software Testing"一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量”.Grenford J. Myers在"The Art of Software Testing"一书中指出:
(1)软件测试是为了发现错误而执行程序的过程。
(2)测试是为了证明程序有错,而不是证明程序无错误。
(3)一个好的测试用例是在于它能发现至今未发现的错误。
(4)一个成功的测试是发现了至今未发现的错误的测试。
这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的,事实并非如此。
首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性的检测方法,改善测试的有效性。
其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
因此,软件测试可以验证软件是否满足软件需求规格说明和软件设计所规定的功能、性能及其软件质量特性的要求,为软件质量的评价提供依据。我们要注意的是软件测试只是软件质量保证的手段之一,不能单凭测试来保证软件质量。

(二)测试的类型
软件测试方法一般分为两大类,分别为动态测试和静态测试。
(三)动态测试
动态测试指通过运行程序发现错误,分为黑盒测试法、白盒测试法和灰盒测试法。不管是哪一种测试,都不能做到穷尽测试,只能选取少量最有代表性的输入数据,以期用较少的代价暴露出较多的程序错误。这些被选取出来的数据就是测试用例(一个完整的测试用例应该包括输入数据和期望的输出结果)。
(1)黑盒法
把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。常用的黑盒测试用例的设计方法有等价类划分、边值分析、错误猜测、因果图和功能图等。
等价类划分:将所有可能的输入数据,划分为等价的部分,然后从每个部分中选取少数有代表性的数据作为测试用例。等价类可以分为有效等价类(即合理、有意义的数据集合)、无效等价类(即不合理、无意义的数据集合)两种。而在选取测试用例时,应遵从"设计一个新的测试用例时,应尽可能多地覆盖尚未覆盖的有效等价类;但每次应仅覆盖一个尚未覆盖的无效等价类"的原则。
边界值分析:它是对等价类划分法的一个补充,即选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。
错误推测法:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。
因果图:等价类划分、边界值分析都只考虑了输入条件,未考虑输入条件间的联系,而因果图则用来描述多种条件组合的测试用例,其最终生成的结果是判定表。它首先基于规格说明书分析原因(等价类)和结果(输出条件);然后找出原因与结果之间的关系,画出因果图;在因果图上加上约束或限制条件;将其转换为判定表;根据判定表得出测试用例。
功能图:它是由状态迁移图和逻辑功能模型构建的,状态迁移图用于表示输入数据序列以及相应的输出数据;逻辑功能模型用于表示在状态中输入条件与输出条件之间的对应关系。测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成的。
(2)白盒法
把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。 由于白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。常用的白盒测试用例设计方法有基本路径测试、循环覆盖测试、逻辑覆盖测试。
逻辑覆盖:以程序内部逻辑为基础的测试技术,如常用的语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖。
语句覆盖:是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。很显然,语句覆盖是一种很弱的覆盖标准。
判定覆盖:又称分支覆盖,它的含义是不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。判定覆盖比语句覆盖强,但对程序逻辑的覆盖程度仍然不高。
条件覆盖:的含义是不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。
判定/条件覆盖:同时满足判定覆盖和条件覆盖的逻辑覆盖称为判定/条件覆盖。它的含义是选取足够的测试用例,使得判定表达式中每个条件的所有可能结果至少出现一次,而且每个判定本身的所有可能结果也至少出现一次。
条件组合覆盖:的含义是选取足够的测试用例,使得每个判定表达式中条件结果的所有可能组合至少出现一次。显然,满足条件组合覆盖的测试用例,也一定满足判定/条件覆盖。因此,条件组合覆盖是上述五种覆盖标准中最强的一种。然而,条件组合覆盖还不能保证程序中所有可能的路径都至少经过一次。
路径覆盖的含义是选取足够的测试用例,使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路径至少经过一次)。路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,因此是一种较强的覆盖标准。但路径覆盖并未考虑判定中的条件结果的组合,并不能代替条件覆盖和条件组合覆盖。
循环覆盖:单循环及嵌套循环。
基本路径法:在程序控制流程图的基础上,通过分析控制构造的环路复杂性导出基本路径集合。然后设计测试用例,保证这些路径至少通过一次。
(3)灰盒法
灰盒测试是一种介于白盒测试与黑盒测试之间的测试,它关注输出对于输入的正确性。同时也关注内部表现,但这种关注不像白盒测试那样详细且完整,而只是通过一些表征性的现象、事件及标志来判断程序内部的运行状态。
灰盒测试结合了白盒测试和黑盒测试的要素,考虑了用户端、特定的系统知识和操作环境,在系统组件的协同性环境中评价应用软件的设计。

(四)静态测试
静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。静态分析中进行人工测试的主要方法有桌前检查(Desk Checking)、代码审查和代码走查。经验表明:使用这种方法能够有效地发现30%~70%的逻辑设计和编码错误。
(1)桌前检查
由程序员自己检查自己编写的程序。程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分析、检验,并补充相关的文档,目的是发现程序中的错误。这种桌前检查,由于程序员熟悉自己的程序和自身的程序设计风格,可以节省很多的检查时间,但应避免主观片面性。
(2)代码审查
代码审查是由若干程序员和测试员组成一个会审小组,通过阅读、讨论和争议,对程序进行静态分析的过程。代码审查分两步:
第一步,小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为评审的依据。小组成员在充分阅读这些材料之后,进入审查的第二步。
第二步,召开程序审查会。在会上,首先由程序员逐句讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。
在会前,应当给会审小组每个成员准备一份常见错误的清单,把以往所有可能发生的常见错误罗列出来,供与会者对照检查,以提高会审的实效。这个常见错误清单也叫做检查表,它把程序中可能发生的各种错误进行分类,对每一类列举出尽可能多的典型错误,然后把它们制成表格,供在会审时使用。这种检查表类似于单元测试中给出的检查表。
(3)代码走查
代码走查与代码审查基本相同,其过程也分为两步。
第一步,把材料先发给走查小组每个成员,让他们认真研究程序,然后再开会。
第二步,开会的程序与代码审查不同,不是简单地读程序和对照错误检查表进行检查,而是让与会者"充当"计算机。即首先由测试组成员为被测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论用。
值得说明的是使用静态测试的方法也可以实现白盒测试。例如:使用人工检查代码的方法来检查代码的逻辑问题,也属于白盒测试范畴。

(四)测试的阶段
为了保证系统的质量和可靠性,应力求在分析、设计等各个开发阶段结束前,对软件进行严格的技术评审。而软件测试是为了发现错误而执行程序的过程。
根据测试的目的、阶段的不同,可以把测试分为单元测试、集成测试、确认测试、系统测试等种类。
1.单元测试
单元测试又称为模块测试,是针对软件设计的最小单位(程序模块)进行正确性检验的测试工作。其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各模块内部可能存在的各种错误。单元测试需要从程序的内部结构出发设计测试用例,多个模块可以平行地独立进行单元测试。
单元测试根据详细设计说明书,包括模块接口测试、局部数据结构测试、路径测试、错误处理测试和边界测试,单元测试通常由开发人员自己负责。而由于通常程序模块不是单独存在的,因此常常要借助驱动模块(相当于用于测试模拟的主程序)和桩模块(子模块)完成。单元测试的计划通常是在软件详细设计阶段完成的。
2.集成测试
集成测试也称为组装测试、联合测试(对于子系统而言,则称为部件测试)。它主要是将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。集成测试计划通常在软件概要设计阶段完成。
从组装策略而言,可以分为一次性组装和增量式组装,增量式组装又包括自顶向下、自底向上、混合式三种,其中混合式组装又称为三明治测试。
(1)自顶向下集成测试是一种构造程序结构的增量实现方法。模块集成的顺序是首先集成主控模块(主程序),然后按照控制层次结构向下进行集成。隶属于(和间接隶属于)主控模块的模块按照深度优先或者广度优先的方式集成到整个结构中去。
(2)自底向上集成测试是从原子模块(比如在程序结构的最低层的模块)开始来进行构造和测试的,跟自顶向下集成测试相反。
(3)三明治式测试是一种组合的折中测试策略,从"两头"往"中间"测试,其在程序结构的高层使用自顶向下策略,而在下面的较低层中使用自底向上策略,类似于"两片面包间夹馅的三明治"而得名。
软件集成的过程是一个持续的过程,会形成多个临时版本。在不断的集成过程中,功能集成的稳定性是真正的挑战。在每个版本提交时,都需要进行冒烟测试,即对程序主要功能进行验证。冒烟测试也称为版本验证测试或提交测试。

3.确认测试
确认测试也称为有效性测试,主要验证软件的功能、性能及其他特性是否与用户要求(需求)一致。确认测试计划通常在需求分析阶段完成。根据用户的参与程度,通常包括4种类型:
(1)内部确认测试:主要由软件开发组织内部按软件需求说明书进行测试。
(2)a测试(Alpha测试):由用户在开发环境下进行测试。
(3)b测试(Beta测试):由用户在实际使用环境下进行测试。
(4)验收测试:针对软件需求说明书,在交付前由用户为主进行的测试。

4.系统测试
如果项目不只包含软件,还有硬件和网络等,则要将软件与外部支持的硬件、外设、支持软件、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统的一系列集成与确认测试。一般地,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等。系统测试计划通常是在系统分析阶段(需求分析阶段)完成的。
不管是哪个阶段的测试,一旦测试出问题,就要进行修改。修改之后,为了检查这种修改是否会引起其他错误,还要对这个问题进行测试,这种测试称为回归测试或退化测试。

(五)性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行,统称为负载压力测试。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

1.性能测试的目的
性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。具体来说,包括以下几个方面:
(1)评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
(2)识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
(3)系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
(4)检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
(5)验证稳定性和可靠性:在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。

2.性能测试的类型
性能测试类型包括负载测试,强度测试,容量测试等。
(1)负载测试:负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。
(2)强度测试: 强度测试是一种性能测试,表明在系统资源特别低的情况下软件系统运行情况。
(3)容量测试:确定系统可处理同时在线的最大用户数。

3.负载压力测试
系统的负载压力测试(负载测试)是指系统在某种指定软件、硬件及网络环境下承受的流量,例如:并发用户数、持续运行时间、数据量等,其中并发用户数是负载压力的重要体现。系统在应用环境下主要承受并发访问用户数、无故障稳定运行时间、大数据量操作等负载压力。
负载压力测试的目的如下:
(1)在真实环境下检测系统性能,评估系统性能是否可以满足系统的性能设计要求。
(2)预见系统负载压力承受力,对系统的预期性能进行评估。
(3)进行系统瓶颈分析、优化系统。

在网络应用系统中,负载压力测试应重点关注客户端、网络、服务器(包括应用服务器和数据库服务器)的性能。应获取的关键测试指标如下:
(1)客户端:并发用户数、响应时间、交易通过率以及吞吐量等。
(2)网络:带宽利用率、网络负载、延迟以及网络传输和应用错误等。
(3)服务器:操作系统的CPU占用率、内存使用、硬盘I/O等;数据库服务器的会话执行情况、SQL执行情况、资源争用以及死锁等;应用服务器的并发连接数、请求响应时间等。

(六)第三方测试
第三方测试指独立于软件开发方和用户方的测试,组织的测试也称为"独立测试".软件质量工程强调开展独立验证和确认(IV&V)活动,是由在技术、管理和财务上与开发组织具有规定程序独立的组织执行验证和确认过程。软件第三方测试是相对独立的组织进行的软件测试,一般情况下是在模拟用户真实应用环境下,进行的软件确认测试。
第三方测试机构是一个中介的服务机构,它通过自己专业化的测试手段为客户提供有价值的服务。但是这些服务不同于公司内部的测试,因为第三方测试机构的测试除了发现软件问题之外,还有科学公正地评价软件的职能,这就要求该机构要保持公正、廉洁、客观、科学且独立的态度。
第三方测试机构存在的价值主要是由软件公司、软件用户,以及国家的公正诉求所决定的。对于软件开发商来说,经过第三方测试机构的测试,不仅可以通过专业化的测试手段发现软件错误,帮助开发商提升软件的品质,而且可以对软件有一个客观且科学的评价,有助于开发商认清自己产品的定位。
对于行业主管部门以及软件使用者来说,第三方测试机构可帮助选择合适且优秀的软件产品。而对于一些信息工程项目来说,在验收之前,经过第三方机构的严格测试,可以最大程度地避免信息行业的"豆腐渣"工程。此外,经过国家认可的第三方测试机构,还为国家软件产品的质量监督抽查提供独立公正的测试支持。
在选择第三方测试机构时,主要查看其资质、信息系统工程测评经验、测试环境、测试工具及测试工程师队伍的素质等。
(五)面向对象测试基础
设计测试方案的传统技术,例如:逻辑覆盖、等价划分、边界值分析和错误推测等方法,仍然可以作为测试类中每个方法的主要技术。面向对象测试的主要目标,也是用尽可能低的测试成本和尽可能少的测试方案,发现尽可能多的错误。但是,面向对象程序中特有的封装、继承和多态等机制,也给面向对象测试带来一些新特点,增加了测试和调试的难度。

(六)软件维护

在软件维护阶段,主要考查软件维护的分类、软件的可维护性等。
软件经过测试,交付给用户后,在使用和运行过程中可能在软件运行/维护阶段对软件产品进行的修改就是维护。
软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充和压缩的容易程度。目前广泛用来衡量程序可维护性的因素包括可理解性、可测试性、可修改性。
软件维护占整个软件生命周期的60%-80%,维护的类型主要有3种:
(1)改正性维护:为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就叫做改正性维护。
(2)适应性维护:在使用过程中,外部环境(新的硬、软件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就叫做适应性维护。
(3)完善性维护:在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。

在实际维护工作中,改正性维护大约占20%的工作量,适应性维护大约占25%的工作量,完善性维护大约占50%的工作量。除了这3类维护之外,还有一类维护活动,叫做预防性维护。这是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。通常,预防性维护定义为:“把今天的方法学用于昨天的系统以满足明天的需要”.也就是说,采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。
在软件开发过程中,错误纠正成本在逐步放大。也就是说,错误发现得越早,纠正错误所花费的成本就会越低,反之则越高。例如:如果在软件设计阶段有个错误未被发现,而待编码阶段时才发现,这时,纠正这个设计错误比纠正源代码错误需要更大的成本。

============================================================================

项目管理网络图
项目进度网络图——展示项目各计划活动、持续时间、逻辑关系的图形

双代号网络图(箭线型)——用一个箭线表示一项活动,活动名称写在箭线上,箭线同时表示活动间逻辑关系。

单代号网络图(节点型)——用一个圆圈代表一项活动,箭线仅表示活动之间的逻辑关系。

真题

在项目某阶段的实施过程中,A活动需要2天2人完成,B活动需要2天2人完成,C活动需要5天4人完成,D活动需要3天2人完成,E活动需要1天1人完成,该阶段的时标网络图如下。该项目组共有8人,且负责A、E活动的人因另有安排,无法帮助其他人完成相应工作,且项目整个工期刻不容缓。以下 ( ) 安排是恰当的,能够使实施任务顺利完成。
A.B活动提前2天开始 B.B活动推迟2天开始
C.D活动提前2天开始 D.D活动推迟2天开始

答案:略

关键路径:所有从开始到结束的路径中,活动历时之和最大的路径。
总工期:关键路径的活动历时之和。
最早开始时间ES:最早可能的开始时间
最早结束时间EF:EF=ES+D
最晚结束时间LF:不影响总工期的结束时间
最晚开始开始LS:LS=LF-D
总时差=LS-ES=LF-EF
自由时差=紧后工作的ES - 此活动的EF

下图中活动“G”可以拖延 ( ) 周而不会延长项目的最终结束日期。

(图中时间单位为周)
A. 0 B. 1
C. 3 D. 4

以下是某工程进度网络图,如果因为天气原因,活动③→⑦的工期延后2天,那么总工期将延后( )天。
A.0 B.1 C.2 D.3

某项目的分项工程之一的机房建设可分解为15个工作(箭头线表示),根据工作的逻辑关系绘出的双代号网络图如图1-1所示,监理工程师在第12天末进行检查时,A、B、C三项工作已完成,D和G工作分别实际完成5天的工作量,E工作完成了4天的工作量。
问题:按工作最早完成时间计,D、E、G三项工作各推迟了多少天?

某工程建设项目中各工序历时如下表所示,则本项目最快完成时间为(1)周。同时,通过(2)可以缩短项目工期。
(1)A.7 B.9 C.12 D.13
①压缩B工序时间
②压缩H工序时间
③同时开展H工序与A工序
④压缩F工序时间
⑤压缩G工序时间
(2)
A.①⑤ B.①③
C.②⑤ D.③④

根据双代号网络图绘图规则,下列网络图中的绘图错误是( )。

A.节点编号有误
B.存在循环回路
C.多个终点节点
D.多个起点节点

环路复杂度
McCabe度量法是由托马斯·麦克凯提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量。它认为程序的复杂性很大程度上取决于程序图的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。对于环路复杂度的问题描绘程序控制流的流图之后,可以用下述方法来计算环形复杂度。
(1)流图中的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。

对下图所示流程图采用白盒测试方法进行测试,若要满足路径覆盖,则至少需要(32)个测试用例。采用McCabe度量法计算该程序的环路复杂性为(33)。

(32)A.3 B.4 C.6 D.8
(33)A.1 B.2 C.3 D.4
试题分析
路径覆盖:使程序中每条路径都至少执行一次。
如图每个判断都需要两个用例,因此需要6个测试用例。
•环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
参考答案:(32)D (33)D

对下图所示的程序流程图进行语句覆盖测试和路径覆盖测试,至少需要( 35 )个测试用例。采用McCabe 度量法计算其环路复杂度为( 36 )。

(35)A. 2和3 B. 2和4 C. 2和5 D. 2和6
(36)A. 1 B. 2 C. 3 D. 4
试题分析
覆盖2条路径就能达到语句覆盖的要求,用2个测试用例即可。路径覆盖需要把程序中的所有路径覆盖遍,需要4个用例。
整个程序流程图转化为结点图之后,一共11个结点,13条边,根据环路复杂度公式有:13-11+2=4。
参考答案:(35)B(36)D

对下图所示的程序流程图进行判定覆盖测试,则至少需要( )个测试用例。采用 McCabe 度量法计算其环路复杂度为( )。

(35)A.2 B.3 C.4 D.5
(36)A.2 B.3 C.4 D.5
试题分析
判定覆盖是设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次。
计算环路复杂度可以采用公式法:V(G)=m-n+2,其中m为弧度(边的数量),n为结点数量。或者可以数封闭区间的数量,除了图中明显的两处外,与外界的连通的部分也是一个封闭区间。
参考答案:A、B

============================================================================

结构化开发方法

结构化方法由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作。结构化设计是根据模块独立性准则、软件结构优化准则将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。结构化程序设计使用3种基本控制结构构造程序,任何程序都可以由顺序、选择和重复3种基本控制结构构造。

结构化方法的核心思想是"自顶向下,逐步分解"。特别适合于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,且难以适应需求的变化。
(1)研究“物质环境”。首先,应画出当前系统(可能是非计算机系统,或是半计算机系统)的数据流图,说明系统的输入、输出数据流,说明系统的数据流情况,以及经历了哪些处理过程。在这个数据流图中,可以包括一些非计算机系统中数据流及处理的命名,例如部门名、岗位名、报表名等。这个过程可以帮助分析员有效地理解业务环境,在与用户的充分沟通与交流中完成。
(2)建立系统逻辑模型。当物理模型建立完成之后,接下来的工作就是画出相对于真实系统的等价逻辑数据流图。在前一步骤建立的数据流图的基础上,将所有自然数据流都转成等价的逻辑流,例如,将现实世界的报表存储在计算机系统中的文件里;又如将现实世界中“送往总经理办公室”改为“报送报表”。
(3)划清人机界限。最后,确定在系统逻辑模型中,哪些将采用自动化完成,哪些仍然保留手工操作。这样,就可以清晰地划清系统的范围。
结构化分析与面向对象分析方法之间的最大差别是:结构化分析方法把系统看作一个过程的集合体,包括人完成的和电脑完成的;而面向对象方法则把系统看成一个相互影响的对象集。结构化分析方法的特点是利用数据流图来帮助人们理解问题,对问题进行分析。
结构化分析一般包括以下工具:数据流图(Data Flow Diagram,DFD)、数据字典(Data Dictionary,DD)、结构化语言、判定表、判定树。
结构化系统分析方法从总体上来看是一种强烈依赖数据流图的自顶向下的建模方法。它不仅是需求分析技术,也是完成需求规格化的有效技术手段。
结构化方法的分析结果由以下几部分组成:一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。

(一)父图与子图的平衡

(二)子图内部的平衡

(三)数据字典
数据字典技术是一种很实用、有效的表达数据格式的手段。它是对所有与系统相关的 数据元素的一个有组织的列表和精确严格的定义,使得用户和系统分析员对于输入、输出、 存储成分和中间计算机有共同的理解。
数据字典有以下4类条目:数据流、数据项、数据存储和基本加工。

客户基本信息=客户编号+客户名称+身份证号码+手机+家庭电话
列:结构化分析的输出不包括( )。
A.数据流图 B.数据字典 C.加工逻辑 D.结构图
试题分析
《软件设计师教程(第5版)》P325页:结构化方法的分析结果由以下几部分组成:一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。
因此本题选择D选项,结构图不属于结构化分析的输出。
试题答案:D

某航空公司拟开发一个机票预订系统, 旅客预订机票时使用信用卡付款。付款通过信用卡公司的信用卡管理系统提供的接口实现。若采用数据流图建立需求模型,则信用卡管理系统是( )。
A.外部实体 B.加工 C.数据流 D.数据存储
试题分析
数据流图中的基本图形元素包括数据流、加工、数据存储和外部实体。其中,数据流、加工和数据存储用于构建软件系统内部的数据处理模型,而外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向。外部实体包括:人/物、外部系统、组织机构等。

试题答案:A

某医院预约系统的部分需求为:患者可以查看医院发布的专家特长介绍及其就诊时间;系统记录患者信息,患者预约特定时间就诊。用DFD对其进行功能建模时,患者是( );用ERD对其进行数据建模时,患者是( )。
A.外部实体 B.加工 C.数据流 D.数据存储
A.实体 B.属性 C.联系 D.弱实体

1、患者不涉及加工,为外部实体。
2、患者有其信息,所以为实体。
试题答案:A、A

(三)数据字典
结构化设计包括体系结构设计、接口设计、数据设计和过程设计等任务。它是一种面向数据流的设计方法,是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程。
  在结构化方法中,模块化是一个很重要的概念,它将一个待开发的软件分解成为若干个小的简单部分–模块,每个模块可以独立地开发、测试。这是一种复杂问题的"分而治之"原则,其目的是使程序的结构清晰、易于测试与修改。
  具体来说,模块是指执行某一特定任务的数据结构和程序代码。通常将模块的接口和功能定义为其外部特性,将模块的局部数据和实现该模块的程序代码称为内部特性。而在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。模块通常具有连续性,也就是意味着作用于系统的小变动将导致行为上的小变化,同时规模说明的小变动也将影响到一小部分模块。

1.抽象化
  对软件进行模块设计的时候,可以有不同的抽象层次。在最高的抽象层次上,可以使问题所处环境的语言描述问题的解法。而在较低的抽象层次上,则采用过程化的方法。抽象化包括对过程的抽象、对数据的抽象和对控制的抽象。
  (1)过程的抽象。在软件工程过程中,从系统定义到实现,每进展一步都可以看做是对软件解决方案的抽象化过程的一次细化。在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低的抽象层次。
  (2)数据抽象。数据抽象与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
  (3)控制抽象。控制抽象可以包含一个程序控制机制而无须规定其内部细节

2.自顶向下,逐步细化
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。最初的说明只是概念性地描述了系统的功能或信息,但并未提供有关功能的内部实现机制或有关信息的内部结构的任何信息。设计人员对初始说明仔细推敲,进行功能细化或信息细化,给出实现的细节,划分出若干成分。然后再对这些成分,施行同样的细化工作。随着细化工作的逐步展开,设计人员就能得到越来越多的细节。
3.信息隐蔽
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少地暴露其内部的处理。通常我们将难的决策、可能修改的决策、数据结构的内部连接,以及对它所做的操作细节、内部特征码、与计算机硬件有关的细节等隐蔽起来。
通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则。
4.模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。保持模块的高度独立性,也是在设计时的一个很重要的原则。通常我们用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是高内聚、低耦合。通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则。

在结构化设计中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则:
(1)模块的大小要适中。系统分解时需要考虑模块的规模,过大的模块可能导致系统分解不充分,其内部可能包括不同类型的功能,需要进一步划分,尽量使得各个模块的功能单一;过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低了模块的独立性。一般来说,一个模块的大小使其实现代码在1~2页纸之内,或者其实现代码行数在50~200行之间,这种规模的模块易于实现和维护。
(2)模块的扇入和扇出要合理。一个模块的扇出是指该模块直接调用的下级模块的个数;扇出大表示模块的复杂度高,需要控制和协调过多的下级模块。扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块;扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。一个模块的扇入是指直接调用该模块的上级模块的个数;扇入大表示模块的复用程度高。设计良好的软件结构通常顶层扇出比较大,中间扇出较少,底层模块则有大扇入。一般来说,系统的平均扇入和扇出系数为3或4,不应该超过7,否则会增大出错的概率。
(3)深度和宽度适当。深度表示软件结构中模块的层数,如果层数过多,则应考虑是否有些模块设计过于简单,看能否适当合并。宽度是软件结构中同一个层次上的模块总数的最大值,一般说来,宽度越大系统越复杂,对宽度影响最大的因素是模块的扇出。在系统设计时,需要权衡系统的深度和宽度,尽量降低系统的复杂性,减少实施过程的难度,提高开发和维护的效率。
模块的扇入指模块直接上级模块的个数。模块的直属下级模块个数即为模块的扇出。

模块的内聚类型通常可以分为7种,根据内聚度从高到低排序。

模块的耦合类型通常也分为7种,根据耦合度从低到高排序。

以下关于模块化设计的叙述中,正确的是( )。
A.尽量考虑低内聚、高耦合,保持模块的相对独立性
B.通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则。
C.模块的规模要大
D. 模块的扇入指模块直接下级模块的个数。模块的直属上级模块个数即为模块的扇出。

试题分析:

试题答案:B

耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合程度不取决于( )。
A.调用模块的方式
B.各个模块之间接口的复杂程度
C.通过接口的信息类型
D.模块提供的功能数

试题分析
耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。
试题答案:D

某企业管理信息系统中,采购子系统根据材料价格、数量等信息计算采购的金额,并给财务子系统传递采购金额、收款方和采购日期等信息,则这两个子系统之间的耦合类型为( )耦合。
A.数据 B.标记 C.控制 D.外部

试题分析
非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。
标记耦合 :这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;
控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合
(1) 一个模块直接访问另一个模块的内部数据;
(2) 一个模块不通过正常入口转到另一模块内部;
(3) 两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
(4) 一个模块有多个入口。
本题属于数据耦合,采购子系统模块给财务子系统模块传递数据。
试题答案:A

模块A、B和 C有相同的程序块,块内的语句之间没有任何联系,现把改程序块取出来,形成新的模块D,则模块D的内聚类型为( )内聚。以下关于该内聚类型的叙述中,不正确的是( )。
A.巧合 B.逻辑 C.时间 D.过程
A.具有最低的内聚性
B.不易修改和维护
C.不易理解
D.不影响模块间的耦合关系

试题分析
功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
顺序内聚:处理元素相关,而且必须顺序执行。
通信内聚:所有处理元素集中在一个数据结构的区域上。
过程内聚:处理元素相关,而且必须按特定的次序执行。
瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)。
逻辑内聚:完成逻辑上相关的一组任务。
偶然内聚:完成一组没有关系或松散关系的任务。
巧合内聚就是偶然内聚。偶然内聚由于内容都是不相关的,所以必然导致它与外界多个模块有关联,这也使得模块间的耦合度增加。

试题答案:A、D

============================================================================

计算机网络基础

(一)网络互联模型
1977 年,国际标准化组织为适应网络标准化发展的需求,制定了开放系统互联参考模型(Open System Interconnection/Reference Model,OSI/RM),从而形成了网络架构的国际标准。OSI/RM 构造了由下到上的七层模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。口诀:“巫术忘传会飚鹰”。
互联网协议(Internet Protocol Suite)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。
TCP/IP提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层OSI模型。

1.应用层协议
在应用层中,定义了很多面向应用的协议,应用程序通过本层协议利用网络完成数据交互的任务。这些协议主要有 FTP、TFTP、HTTP、SMTP、DHCP、Telnet、DNS 和 SNMP 等。
FTP(File TransportProtocol,文件传输协议)是网络上两台计算机传送文件的协议,运行在 TCP 之上,是通过 Internet 将文件从一台计算机传输到另一台计算机的一种途径。 FTP 的传输模式包括 Bin(二进制)和 ASCII(文本文件)两种,除了文本文件之外,都应该使用二进制模式传输。FTP 在客户机和服务器之间需建立两条 TCP 连接,一条用于传送控制信息(使用 21 号端口),另一条用于传送文件内容(使用 20 号端口)。
TFTP(Trivial FileTransfer Protocol,简单文件传输协议)是用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP 建立在 UDP(User Datagram Protocol,用户数据报协议)之上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。
HTTP(Hypertext TransferProtocol,超文本传输协议)是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。HTTP 建立在 TCP 之上,它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。
SMTP(Simple Mail TransferProtocol,简单邮件传输协议)建立在 TCP 之上,是一种提供可靠且有效的电子邮件传输的协议。SMTP 是建模在 FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息,并提供与电子邮件有关的通知。
DHCP(Dynamic HostConfiguration Protocol,动态主机配置协议)建立在 UDP 之上,是基于客户机/服务器模型设计的。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的 IP 环境数据。 DHCP 通过租约(默认为 8 天)的概念,有效且动态地分配客户端的 TCP/IP 设定。当租约过半时,客户机需要向 DHCP 服务器申请续租;当租约超过 87.5%时,如果仍然没有和当初提供 IP 的 DHCP 服务器联系上,则开始联系其他的 DHCP 服务器。DHCP 分配的 IP 地址可以分为三种方式,分别是固定分配、动态分配和自动分配。
Telnet(远程登录协议)是登录和仿真程序,建立在 TCP 之上,它的基本功能是允许用户登录进入远程计算机系统。以前,Telnet 是一个将所有用户输入送到远程计算机进行处理的简单的终端程序。目前,它的一些较新的版本是在本地执行更多的处理,可以提供更好的响应,并且减少了通过链路发送到远程计算机的信息数量。
DNS(Domain NameSystem,域名系统)在 Internet 上域名与 IP 地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相识别 IP 地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器。DNS 通过对用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,例如,IP 地址。
SNMP(Simple NetworkManagement Protocol,简单网络管理协议)是为了解决 Internet 上的路由器管理问题而提出的,它可以在 IP、IPX、AppleTalk 和其他传输协议上使用。SNMP 是指一系列网络管理规范的集合,包括协议本身、数据结构的定义和一些相关概念。目前, SNMP 已成为网络管理领域中事实上的工业标准,并被广泛支持和应用,大多数网络管理系统和平台都是基于 SNMP 的。
2.传输层协议
传输层主要有两个传输协议,分别是 TCP 和 UDP(User Datagram Protocol,用户数据报协议),这些协议负责提供流量控制、错误校验和排序服务。
TCP 是整个 TCP/IP 协议族中最重要的协议之一,它在 IP 协议提供的不可靠数据服务的基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。TCP 协议一般用于传输数据量比较少,且对可靠性要求高的场合。
UDP 是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信,与 TCP 相比,UDP 是一种无连接的协议,它的错误检测功能要弱得多。可以这样说,TCP 有助于提供可靠性,而 UDP 则有助于提高传输速率。UDP 协议一般用于传输数据量大,对可靠性要求不是很高,但要求速度快的场合。
3.网络层协议
网络层中的协议主要有 IP、ICMP(Internet Control Message Protocol,网际控制报文协议)、IGMP(Internet Group Management Protocol,网际组管理协议)、ARP(Address Resolution Protocol,地址解析协议)和 RARP(Reverse Address Resolution Protocol,反向地址解析协议)等,这些协议处理信息的路由和主机地址解析。
IP 所提供的服务通常被认为是无连接的和不可靠的,它将差错检测和流量控制之类的服务授权给了其他的各层协议,这正是 TCP/IP 能够高效率工作的一个重要保证。网络层的功能主要由 IP 来提供,除了提供端到端的分组分发功能外,IP 还提供很多扩充功能。例如,为了克服数据链路层对帧大小的限制,网络层提供了数据分块和重组功能,这使得很大的 IP 数据包能以较小的分组在网络上传输。
ARP 用于动态地完成 IP 地址向物理地址的转换。物理地址通常是指计算机的网卡地址,也称为 MAC(Media Access Control,媒体访问控制)地址,每块网卡都有唯一的地址;RARP 用于动态完成物理地址向 IP 地址的转换。
ICMP 是一个专门用于发送差错报文的协议,由于 IP 协议是一种尽力传送的通信协议,即传送的数据可能丢失、重复、延迟或乱序传递,所以需要一种尽量避免差错并能在发生差错时报告的机制,这就是 ICMP 的功能。
IGMP 允许 Internet 中的计算机参加多播,是计算机用作向相邻多目路由器报告多目组成员的协议。多目路由器是支持组播的路由器,它向本地网络发送 IGMP 查询,计算机通过发送 IGMP 报告来应答查询。多目路由器负责将组播包转发到网络中所有组播成员。
(二)IPv6
互联网络能发展到当前的规模,IPv4 协议的建立功不可没。但同时它的缺点也已经充分显现出来,如地址空间耗尽、路由表急剧膨胀、缺乏对 QoS 的支持、本身并不提供任何安全机制、移动性差等问题。尽管采用了许多新的机制来缓解这些问题,如 DHCP 技术、 NAT 技术、CIDR 技术等,但都不可避免地要引入其他新的问题,问题没有得到根本解决。于是 IETF 从 90 年代起就开始积极探讨下一代 IP 网络,经过几年努力,在广泛听取业界和专家意见的基础上,终于在 1995 年 12 月推出了下一代网络的 RFC 文档——IPv6 协议,该协议最早叫做下一代 IP(IP Next Generation,IPng)。现在它的全称是“互联网协议第 6 版”,即下一代的网际协议。

下一代IP地址,共128位,以16位为一段,共为8段,每段的16位转换为一个4位的十六进制数,没段之间用“:”分开。例如,2001:0da8:d001:0001:0000:0000:0000:0001,
还可以表示为:2001:da8:d001:1:0:0:0:1与2001:da8:d001:1::1

与IPv4比,IPv6的优势:

IPv4/IPv6 过渡技术有:
(1)双协议栈技术:双栈技术通过节点对 IPv4 和 IPv6 双协议栈的支持,从而支持两种业务的共存。
(2)隧道技术:隧道技术通过在 IPv4 网络中部署隧道,实现在 IPv4 网络上对 IPv6 业务的承载,保证业务的共存和过渡。具体的隧道技术包括:6to4 隧道;6over4 隧道;ISATAP 隧道。
(3)NAT-PT 技术:NAT - PT 使用网关设备连接 IPv6 和 IPv4 网络。当 IPv4 和 IPv6节点互相访问时,NAT - PT 网关实现两种协议的转换翻译和地址的映射。

(三)交换技术
在计算机网络中,当用户较多而传输的距离较远时,通常不采用两点固定连接的专用线路,而是采用交换技术,使通信传输线路为各个用户公用,以提高传输设备的利用率,降低系统费用。
按照实际的数据传送技术,交换技术又可分为电路交换、报文交换和分组交换,它们的主要特点如下:
(1)电路交换。在数据传送之前必须先设置一条通路。在线路释放之前,该通路将由一对用户独占。
(2)报文交换。报文从源点传送到目的地采用存储转发的方式,在传送报文时,同时只占用一段通道。在交换节点中需要缓冲存储,报文需要排队。因此,报文交换不能满足实时通信的要求。

(3)分组交换。交换方式和报文交换方式类似,但报文被分成分组传送,并规定了最大的分组长度。在数据报分组交换中,目的地需要重新组装报文;在虚电路分组交换中,在数据传送之前必须通过虚呼叫设置一条虚电路。分组交换技术是在数据网络中使用最广泛的一种交换技术。
根据各自的特点,不同的交换技术适用于不同的场合。例如,对于交互式通信来说,报文交换肯定是不适合的;对于较轻和间歇式负载来说,电路交换是最合适的,因此,可以通过电话拨号线路来实行通信;对于较重或持续的负载来说,使用租用的线路以电路交换方式通信是合适的;对必须交换中等数据到大量的数据时,可用分组交换方法。
(四)路由技术
路由器是工作在网络层的重要网络互连设备,构成了基于 TCP/IP 协议的 Internet 的主体脉络,工作在 Internet 上的路由器也称为 IP 网关。
路由器的主要功能就是进行路由选择。当一个网络中的计算机要给另一个网络中的计算机发送分组时,它首先将分组送给同一个网络中用于网络之间连接的路由器,路由器根据目的地址信息,选择合适的路由,将该分组传递到目的网络用于网络之间连接的路由器中,然后通过目的网络中内部使用的路由选择协议,该分组最后被递交给目的计算机
根据路由选择协议的应用范围,可以将其分为内部网关协议( Interior Gateway Protocol,IGP)、外部网关协议(Exterior Gateway Protocol,EGP)和核心网关协议(Gateway Gateway Protocol,GGP)三大类。
(1)内部网关协议。内部网关协议是指在一个自治系统(Autonomous System,AS)内运行的路由选择协议,主要包括 RIP(Routing Information Protocol,路由信息协议)、 OSPF(Open Shortest Path First,开放式最短路径先先)、IGRP(Interior Gateway Routing Protocol,内部网关路由协议)和 EIGRP(Enhanced IGRP,增强型 IGRP)等。其中 AS 是指同构型的网关连接的互连网络,通常是由一个网络管理中心控
(2)外部网关协议。外部网关协议是指在两个 AS 之间使用的路由选择协议,最新的EGP 主要有 BGP(Border Gateway Protocol,边界网关协议),其主要功能是控制路由策略。
(3)核心网关协议。Internet 中有个主干网,所有的 AS 都连接到主干网上,主干网中的网关称为核心网关,核心网关之间交换路由信息时使用的是 GGP。

从路由协议使用的算法来看,所有的路由协议可以分为以下三类:
(1)距离向量协议。计算网络中所有链路的矢量和距离,并以此为依据来确定最佳路径。这类协议会定期向相邻的路由器发送全部或部分路由表。
(2)链路状态协议。使用为每个路由器创建的拓扑数据库来创建路由表,通过计算最短路径来形成路由表。这类协议会定期向相邻路由器发送网络链路状态信息。
(3)平衡型协议。结合了距离向量协议和链路状态协议的优点。

(五)网络存储技术
目前,主流的网络存储技术主要有三种,分别是直接附加存储(Direct Attached Storage, DAS)、网络附加存储(Network Attached Storage,NAS)和存储区域网络(Storage Area Network,SAN)。
1.直接附加存储
DAS 是将存储设备通过 SCSI(Small Computer System Interface,小型计算机系统接口)电缆直接连到服务器,其本身是硬件的堆叠,存储操作依赖于服务器,不带有任何存储操作系统。因此,有些文献也把 DAS 称为 SAS(Server Attached Storage,服务器附加存储)。
DAS 的适用环境为:
(1)服务器在地理分布上很分散,通过 SAN 或 NAS 在它们之间进行互连非常困难时;
(2)存储系统必须被直接连接到应用服务器(例如,Microsoft Cluster Server 或某些数据库使用的“原始分区”)上时;
(3)包括许多数据库应用和应用服务器在内的应用,它们需要直接连接到存储器上时。

由于 DAS 直接将存储设备连接到服务器上,这导致它在传递距离、连接数量、传输速率等方面都受到限制。因此,当存储容量增加时,DAS 方式很难扩展,这对存储容量的升级是一个巨大的瓶颈;另一方面,由于数据的读取都要通过服务器来处理,必然导致服务器的处理压力增加,数据处理和传输能力将大大降低;此外,当服务器出现宕机等异常状况时,也会波及存储数据,使其无法使用。目前 DAS 基本被 NAS 所代替。
2.网络附加存储
采用 NAS 技术的存储设备不再通过 I/O 总线附属于某个特定的服务器,而是通过网络接口与网络直接相连,由用户通过网络访问。NAS 存储系统的结构如图所示。

NAS 存储设备类似于一个专用的文件服务器,它去掉了通用服务器的大多数计算功能,而仅仅提供文件系统功能,从而降低了设备的成本。并且为方便存储设备到网络之间能以最有效的方式发送数据,它专门优化了系统硬件与软件架构。NAS 以数据为中心,将存储设备与服务器分离,其存储设备在功能上完全独立于网络中的主服务器,客户机与存储设备之间的数据访问不再需要文件服务器的干预,同时它允许客户机与存储设备之间进行直接的数据访问,所以不仅响应速度快,而且数据传输速率也很高。
NAS 存储支持即插即用,可以在网络的任一位置建立存储。基于 Web 管理,从而使设备的安装、使用和管理更加容易。NAS 可以很经济地解决存储容量不足的问题,但难以获得满意的性能。
3.存储区域网络
SAN 是通过专用交换机将磁盘阵列与服务器连接起来的高速专用子网。它没有采用文件共享存取方式,而是采用块(block)级别存储。SAN 是通过专用高速网将一个或多个网络存储设备和服务器连接起来的专用存储系统,其最大特点是将存储设备从传统的以太网中分离出来,成为独立的存储区域网络,SAN 的系统结构如图所示。

(六)网络系统建设
企业内部网络的建设已经成为提升企业核心竞争力的关键因素。企业网已经越来越多地被人们提到,利用网络技术,现代企业可以在供应商、客户、合作伙伴、员工之间实现优化的信息沟通。这直接关系到企业能否获得关键的竞争优势。企业网络要求具有资源共享功能、通信服务功能、 多媒体功能、远程VPN拨入访问功能。所以在进行企业网络的需求分析时,对企业的需求、应用范围、基于的技术等,要从企业应用来进行分析。
  先期的网络规划对网络建设和使用至关重要。网络规划的任务就是为即将建立的网络系统提出一套完整的设想和方案,对建立一个什么形式、多大规模、具备哪些功能的网络系统做出全面科学的论证,并对建立网络系统所需的人力、财力和物力投入等做出一个总体的计划。
1.网络设计的原则
在网络设计方面,应着重考虑以下几个要素,它们也是网络设计和网络建设的基本原则。
(1)采用先进,成熟的技术。在规划网络、选择网络技术和网络设备时,应重点考虑当今主流的网络技术和网络设备。只有这样,才能保证建成的网络有良好的性能,从而有效地保护建网投资,保证网络设备之间、网络设备和计算机之间的互联,以及网络的尽快使用、可靠运行。
(2)遵循国际标准,坚持开放性原则。网络的建设应遵循国际标准,采用大多数厂家支持的标准协议及标准接口,从而为异种机、异种操作系统的互连提供极大的便利和可能。
(3)网络的可管理性。具有良好可管理性的网络,网管人员可借助先进的网管软件,方便地完成设备配置、状态监视、信息统计、流量分析、故障报警、诊断和排除等任务。
(4)系统的安全性。一般的网络包括内部的业务网和外部网。对于内部用户,可分别授予不同的访问权限,同时对不同的部门(或工作组)进行不同的访问及连通设置。对于外部的因特网络,要考虑网络"黑客"和其他不法分子的破坏,防止网络病毒的传播。有些网络系统,如金融系统对安全性和保密性有着更加严格的要求。网络系统的安全性包括两个方面的内容:一方面是外部网络与本单位网络之间互联的安全性问题,另一方面是本单位网络系统管理的安全性问题。
(5)灵活性和扩充性。网络的灵活性体现在连接方便,设置和管理简单、灵活,使用和维护方便。网络的可扩充性表现在数量的增加、质量的提高和新功能的扩充。网络的主干设备应采用功能强、扩充性好的设备,如模块化结构、软件可升级,信息传输速度高、吞吐量大。可灵活选择快速以太网、千兆以太网、FDDI、ATM网络模块进行配置,关键元件应具有冗余备份的功能。
(6)系统的稳定性和可靠性。选择网络产品和服务器时,最重要的一点应考虑它们的稳定性和可靠性,这也是我们强调选择技术先进、成熟产品的重要原因之一。关键网络设备和重要服务器的选择应考虑是否具有良好的电源备份系统、链路备份系统,是否具有中心处理模块的备份,系统是否具有快速、良好的自愈能力等。不应追求那些功能大而全但不可靠或不稳定的产品,也不要选择那些不成熟和没有形成规范的产品。
(7)经济性。网络的规划不但要保质保量按时完成,而且要减少失误、杜绝浪费。
(8)实用性。网络设计一定要充分保护网络系统现有资源。同时要根据实际情况,采用新技术和新装备,还需要考虑组网过程要与平台建设及开发同步进行,建立一个实用的网络。力求使网络既满足目前需要,又能适应未来发展,同时达到较好的性能/价格比。
代理服务器是介于浏览器和Web服务器之间的一台服务器,当用户通过代理服务器上网浏览时,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息并传送给用户的浏览器。

(七)代理服务器
代理服务器的作用主要体现在以下5个方面:
(1)提高访问速度。因为客户要求的数据存于代理服务器的硬盘中,因此下次这个客户或其他客户再要求相同目的站点的数据时,就会直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,对热门站点有很多客户访问时,代理服务器的优势更为明显。
(2)可以起到防火墙的作用。因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽掉某些信息。这是局域网网管对局域网用户访问范围限制最常用的办法,也是局域网用户为什么不能浏览某些网站的原因。拨号用户如果使用代理服务器,同样必须服从代理服务器的访问限制,除非你不使用这个代理服务器。
(3)通过代理服务器访问一些不能直接访问的网站。因特网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内,那么客户通过代理服务器访问目标网站就成为可能。国内的高校多使用教育网,不能出国,但通过代理服务器,就能实现访问因特网,这就是高校内代理服务器热的原因所在。
(4)安全性得到提高。无论是上聊天室还是浏览网站,目的网站只能知道用户来自于代理服务器,而用户的真实IP就无法测知,这就使得用户的安全性得以提高。
(5)共享IP地址。由于IP地址比较紧张,通过代理服务器,可以节约一些IP地址。

(八)网络管理工具
现在网络管理平台有很多,而真正具有OSI定义的网管五大功能的系统却不多,典型的系统包括HP的Open View、IBM的Net View和Tivoli、SUN的SunNet、Cabletron的SPECTRUM.Cisco Work则是最适用于Cisco网络设备密集的网络的实用性网络管理系统。
  在进行网络维护时,我们经常需要监视网络数据流并对其进行分析,这也称为网络监视,而常见的网络监视器包括Ethereal,NetXRay和Sniffer.
  (1)Ethereal:提供了对TCP,UDP,SMB,telnet,ftp等常用协议的支持,覆盖了大部分应用需求。
  (2)NetXRay:主要是用做以太网络上的网管软件,能够对IP,NetBEUI,TCP/UDP等协议进行详细分析。
(3)Sniffer:它是使网络接口处于混杂模式,以截获网络内容。它是最完善、应用最广泛的一种网络监视器。
  另外,在操作系统中有两个十分常用的网络管理工具:
  (1)ping命令:基于ICMP协议,用于把一个测试数据包发送到规定的地址,如果一切正常则返回成功响应,并且可以从时戳中获得链路的状态信息。它常用于以下几个情形:
  验证TCP/IP协议是否正常安装:ping 127.0.0.1,如果正常返回,说明安装成功。其中127.0.0.1是回送地址。
  验证IP地址配置是否正常:ping本机IP地址。
  查验远程主机:ping远端主机IP地址。
(2)tracert:检查到达的目标 IP 地址的路径并记录结果。tracert 命令显示用于将数据包从计算机传递到目标位置的一组 IP 路由器,以及每个跃点所需的时间。如果数据包不能传递到目标,tracert 命令将显示成功转发数据包的最后一个路由器。
  (3)netstat:用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
  (4)IPConfig:显示当前的TCP/IP配置。这些信息一般用来检验人工配置的TCP/IP设置是否正确。

典型真题
关于网桥和交换机,下面的描述中正确的是( )。
A.网桥端口数少,因而比交换机转发更快
B.网桥转发广播帧,而交换机不转发广播帧
C.交换机是一种多端口网桥
D.交换机端口多,因而扩大可冲突域的大小

试题分析
本题属于纯概念题,交换机又被称为多端口网桥。
试题答案:C

SNMP采用UDP提供的数据报服务,这是由于( )。A.UDP比TCP更加可靠
B.UDP数据报文可以比TCP数据报文大
C.UDP是面向连接的传输方式
D.采用UDP实现网络管理不会太多增加网络负载

试题分析
本题名义上是在考查SNMP协议,实则考查UDP与TCP的差别。
TCP是可靠的,UDP是不可靠的,TCP面向连接,而UDP面向无连接。UDP由于没有反馈机制,所以传输的数据量小一些,效率更高一些,所以D的说法基本正确。
试题答案:D

主机host1对host2进行域名查询的过程如下图所示,下列说法中正确的是( )。

A.根域名服务器采用迭代查询,中介域名服务器采用递归查询
B.根域名服务器采用递归查询,中介域名服务器采用迭代查询
C.根域名服务器和中介域名服务器均采用迭代查询
D.根域名服务器和中介域名服务器均采用递归查询

试题分析
本题考查的是网络中DNS的相关知识,在DNS运行的过程中,常常涉及到两种类型的查询:迭代查询和递归查询。
迭代查询的基本思想是:A服务器问B服务器:“host2的IP是多少?”,B服务器回答:“C服务器管这方面的事务,你问问他吧!”,此时A服务器根据B提供的线索找到C服务器,并问他“host2的IP是多少?”,C服务器回答“D服务器管这方面的事务,你问问他吧!”。依据这样的流程,一步步得到host2的地址,是迭代查询方式。
递归查询的基本思想是:A服务器问B服务器:“host2的IP是多少?”,B服务器发现自己也不知道,但他知道,这个事情在C服务器管辖范围内,所以B服务器直接找到C服务器问“host2的IP是多少?”,C服务器发现自己也不清楚具体情况,但他辖区内的D服务器应该知道,此时他问D服务器“host2的IP是多少?”,当得到答案后,一层一层回复上去,直到A服务器。这种方式,就是递归查询。

试题答案:A

下列关于DHCP的说法中,错误的是( )。
A.Windows操作系统中,默认租约期是8天
B.客户机通常选择最先响应的DHCP服务器提供的地址
C.客户机可以跨网段申请DHCP服务器提供的IP地址
D.客户机一直使用DHCP服务器分配给它的IP地址,直至租约期结束才开始联系更新租约

试题分析
题目中的描述都是关于DHCP的,其中“客户机一直使用DHCP服务器分配给它的IP地址,直至租约期结束才开始联系更新租约”说法有误,因为DHCP租约期过半时,客户端将和它的DHCP服务器联系更新租约。

试题答案:D

软考-软件设计师笔记【原创无样式版】需要笔记请联系相关推荐

  1. 【软考-软件设计师精华知识点笔记】第八章 算法分析设计

    前言 由于笔记复制到CSDN样式失效,没有精力再重新完整的检查并设置一遍样式,有积分的可以前往下载word.pdf.有道云笔记版本. 需要说明的是,下载的内容与本篇分享内容一致,只有样式的区别[比如重 ...

  2. 【软考-软件设计师精华知识点笔记】第十章 网络与信息安全

    前言 由于笔记复制到CSDN样式失效,没有精力再重新完整的检查并设置一遍样式,有积分的可以前往下载word.pdf.有道云笔记版本. 需要说明的是,下载的内容与本篇分享内容一致,只有样式的区别[比如重 ...

  3. 【软考-软件设计师精华知识点笔记】第六章 系统开发与运行

    前言 由于笔记复制到CSDN样式失效,没有精力再重新完整的检查并设置一遍样式,有积分的可以前往下载word.pdf.有道云笔记版本. 需要说明的是,下载的内容与本篇分享内容一致,只有样式的区别[比如重 ...

  4. 软考-软件设计师 笔记一(计算机组成与体系结构)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  5. 软考-软件设计师 笔记九(多媒体基础)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  6. 软考-软件设计师 笔记十(软件工程)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  7. 软考-软件设计师 笔记十二(数据流图)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  8. 软考-软件设计师】(二). 操作系统

    软考-软件设计师](二). 操作系统 概述 进程管理 就绪 :只缺cpu (活跃就绪) 等待:除了缺cpu 还缺其它,比如用户的指令...(活跃阻塞==等待) 就绪–>运行:被程序选中 运行–& ...

  9. 【软考-软件设计师】(五).计算机网络

    [软考-软件设计师](五).计算机网络七层模型 七层模型 补充: 交换机:有存储转发 快速转发和碎片丢弃三种交换模式. 可以多个点同时通信 二层交换机: mac地址和对应端口记录在自己的地址表 跨过网 ...

  10. 【软考-软件设计师】目录

    [软考-软件设计师] 软考中级-软件设计师 废话中 好像又到了软考季节,在此分享下我当时的笔记.... 当时本来是没想要考这个证的,但是看到周围同学好多去报名,所以... 我们的做法基本都是: 视频 ...

最新文章

  1. html body 间距,VBA& HTMLBody - 正文和签名之间的间距
  2. 环形、扭环、LFSR计数器
  3. Kubernetes StatefulSet源码分析
  4. 使用IDEA基于Maven搭建多模块聚合工程(springmvc+spring+mybatis整合)
  5. LeetCode之Number Complement
  6. Java——获取当前线程的对象(currentThread())(两种方式)
  7. FreeRTOS应用开发笔记之一:FreeRTOS在STM32的移植
  8. c语言链表输出header中的乱码,大家帮忙看看这段代码,最后一个链表输出后总带一些乱码?请教...
  9. gc java root_深入理解Java中的Garbage Collection
  10. WEB渗透测试思维导图
  11. APP定制开发之前,这6条铁律要牢记
  12. 如何用python处理文件(图文详解)
  13. 改变 ListBox Item 被点击后的蓝色背景
  14. ROS运行时出现Couldn‘t find executable错误
  15. html页面矩形,HTML5画布(矩形)
  16. 1067 mysql_mysql服务1067错误多种解决方案分享
  17. POBPM集成-数据过滤
  18. Spotfire 数据分析学习之一
  19. nacos发送beat逻辑
  20. Linux——远程管理篇

热门文章

  1. 最大后验(Maximum a Posteriori,MAP)概率估计详解
  2. 程序员考试下午题知识点总结
  3. https://blog.csdn.net/zhi_sheng/article/details/78910082----mybatis写当天 当月的数据 时间段数据...
  4. echarts 中国地图自动播放
  5. Java期末项目体温监测系统,作业三:高温预警系统项目中的观察者模式解析
  6. 毕业设计-基于微信小程序的大学生心理测试系统
  7. 天问:科学有边界吗?----《三体》与量子物理史话
  8. 【React】redux和React-redux
  9. 图文详解MOS管的米勒效应
  10. 简单好用的 Linux/Windows 服务器管理面板