网工 内存管理

页式存储

页式存储是现代操作系统中常用的一种内存管理技术。在这种机制下,程序的逻辑地址空间被划分为固定大小的页面,而物理内存也被划分为同样大小的页框(或称为物理页面)。这种划分使得内存管理更加高效,并支持虚拟内存的概念。

下面是一些关于页式存储的关键点:

  1. 页面和页框
    • 页面(Page):程序逻辑地址空间中的固定大小块。
    • 页框(Page Frame):物理内存中的固定大小块,用于存放页面。
  2. 页面大小
    • 页面大小通常是2的幂次方,例如4KB、8KB等。页面大小的选择需要平衡多个因素,包括寻址开销、碎片率和TLB(Translation Lookaside Buffer)命中率。
  3. 页表
    • 每个进程都有一个页表,它记录了逻辑页面与物理页框之间的映射关系。
    • 页表中的每一项称为页表项(Page Table Entry, PTE),通常包含物理页框号、有效位(是否已分配给某个页面)、保护位(读写权限)等信息。
  4. 地址转换
    • 地址转换由硬件的MMU(Memory Management Unit)完成,MMU根据页表将逻辑地址转换成物理地址。
    • 逻辑地址由两部分组成:页面号和页内偏移量。MMU使用页面号索引页表以找到对应的物理页框号,然后加上页内偏移量得到最终的物理地址。
  5. 缺页处理
    • 当进程试图访问的页面不在物理内存中时,会发生缺页中断(Page Fault)。
    • 缺页中断由操作系统处理,它负责从磁盘加载缺失的页面到物理内存,并更新页表。
  6. 页面置换算法
    • 当物理内存空间不足时,需要使用页面置换算法来决定从物理内存中替换出哪个页面,以便腾出空间给新的页面。
    • 常见的页面置换算法包括最近最少使用(LRU)、先进先出(FIFO)和最优置换算法(Optimal)等。
  7. 分层页表和反向映射
    • 对于大内存空间,通常采用多级页表结构来减少页表占用的内存。
    • 反向映射允许物理内存到逻辑地址的映射,这对于调试和监控系统行为很有帮助。

页式存储提供了灵活性和安全性,允许操作系统实现虚拟内存、内存保护和内存共享等功能。

页号是把虚拟地址分为多少个页,通过页号和页内地址找到虚拟地址(数据),

通过一个具体的例子来说明如何进行程序逻辑地址到物理地址的转换。

虚拟地址转换为物理地址过程

假设条件

  1. 页面大小:设定为4KB(即 2的12次方字节)。
  2. 逻辑地址空间:假设为32位地址空间,这意味着地址范围是从0到2的32次方-1
  3. 物理内存大小:假设为1GB(即 2的30次方字节)。

计算页面数量

  1. 逻辑页面数量:由于地址空间为32位,页面大小为4KB,我们可以计算逻辑页面的数量。逻辑地址空间大小为 2的32次方字节,每个页面大小为 2的12次方字节,所以逻辑页面数量为 2的32次方除以2的12次方=2的20次方
  2. 物理页框数量:物理内存大小为1GB,每个页框也是4KB,所以物理页框数量为

1GB = 1,073,741,824 字节 (因为 1GB = 2^30 字节) 每个页框大小为 4KB = 4096 字节 (因为 1KB = 2^10 字节)

那么物理页框的数量就是总字节数除以每个页框的字节数:

物理页框数量 = 1,073,741,824 字节 / 4096 字节/页框 = 262,144 页框

因此,1GB的物理内存可以划分为262,144个4KB大小的页框。

页表结构

  • 页表项大小通常为4字节,因此页表本身占用的内存为2的20次方乘以4等于2的22次方 字节,即4MB。
  • 每个页表项包含物理页框号,以及其他控制信息(例如有效位、读写权限等)。

地址转换过程

假设我们要访问的逻辑地址为 0x12345678

  1. 计算页面号:逻辑地址可以分为两部分:页面号和页内偏移量。页面号可以通过逻辑地址除以页面大小来计算,即 0x12345678/2的12次方。在32位地址空间中,页面号占用20位(因为 2的20次方个页面),页内偏移量占用12位。因此,页面号为 0x12345页内偏移量为 0x678
  2. 查询页表:使用页面号 0x12345作为索引去查询页表,假设该页表项中记录的物理页框号为 0x345678
  3. 计算物理地址:将物理页框号 0x345678左移12位(即乘以 2的12次方)再加上页内偏移量 0x678 得到最终的物理地址。因此,物理地址为 0x34567800+0x678=0x34567E78。

总结

  • 逻辑地址:0x12345678
  • 页面号:0x12345
  • 页内偏移量:0x678
  • 物理页框号:0x345678(假设)
  • 物理地址:0x34567E78

这就是一个简单的逻辑地址到物理地址转换的例子。请注意,在实际的操作系统中,页表可能还会包含其他的信息,如访问权限、修改标志等。此外,对于更大的地址空间,可能会使用多级页表来减少页表的大小。

示例

进程P有8个页面,页号分别为0~7,页面大小为4K,假设系统给进程P分配了4个存储块,进程P的页面变换表如下所示。表中状态位等于1和0分别表示页面在内存和不在内存。

  1. 若进程P要访问的逻辑地址为十六进制5148H,则该地址经过变换后,其物理地址应为十六进制XXXX
  2. 如果进程P要 访问的页面6不在内存,那么应该淘汰页号为XXXX的页面(也就是需要调入页面6淘汰一个页面)

第一题:

根据题意,页面大小为4K,逻辑地址为十六进制5148H页号为5,页内地址为148H,查页表后可知页帧号(物理块号)为3,该地址经过变换后,其物理地址应为页帧号3拼上页内地址148H,即十六进制3148H。
之所以第一位为5,即可以通过查表来转换物理地址,最后拼上页内地址

主要的逻辑如下:

  • 5148H转换为二进制为0101 0001 0100 1000
  • 由于页面大小为4K字节,也就是12次方,对应上方二进制的后12位即为页内地址
  • 通过查表可知,前面4个二进制代表5,对应表格为3。 最后拼接后面的地址 即3 148

第二题(先看访问位再看修改位,如果最近被访问过则不替换,如果都被访问了再看修改位)

据题意,页面变换表中状态位等于1和0分别表示页面在内存或不在内存,所以1、2、5和7号页面在内存。当访问的页面4不在内存时,系统应该首先淘汰未被访问的页面,因为根据程序的局部性原理,最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该先淘汰未修改过的页面,因为未修改过的页面内存与辅存一致, 故淘汰时无须写回辅存,使系统页面置换代价更小。

综上分析,1、5和7号页面都是最近被访问过的,但2号页面最近未被访问过,故应该淘汰2号页面。

页面置换算法

页面置换算法是内存管理中的一个重要组成部分,用于决定当物理内存空间不足时,应该从内存中替换掉哪些页面。这些算法的目标是在保证进程运行效率的同时,尽量减少缺页中断的次数,以降低系统的整体响应时间和提高性能。

下面是几种常见的页面置换算法:

  1. 先进先出(FIFO, First-In First-Out)
    • 这是最简单的页面置换算法。
    • 它总是选择最早进入内存的页面进行替换。
    • FIFO 算法可能导致“Belady 异常”,即增加物理页面的数量反而会导致更多的缺页中断。
  2. 最近最少使用(LRU, Least Recently Used)
    • LRU 算法选择最近最久未使用的页面进行替换。
    • 实现 LRU 需要维护一个能够快速查找每个页面最后使用时间的数据结构,这可能增加硬件成本。
    • 在软件实现中,LRU 可以通过链表或其他数据结构来近似实现。
  3. 最近未使用(NRU, Not Recently Used)
    • NRU 是一种简化的 LRU 算法,它基于每个页面的一个位来标记页面是否在最近的时间段内被访问过。
    • 如果所有页面都被标记为最近使用过,则随机选择一个页面进行替换。
  4. 最佳置换算法(Optimal)
    • 这是一种理论上的算法,它总是选择未来最长时间内不会被访问的页面进行替换。
    • 由于它需要预知未来,所以在实际系统中无法实现,但它提供了一个基准,用于衡量其他算法的性能。
  5. 最近未用过(NUB, Never Used Before)
    • NUB 算法选择从未被使用过的页面进行替换,适用于刚启动的应用程序或新加载的页面。
  6. 时钟置换算法(Clock)
    • 时钟算法结合了 LRU 和 NRU 的思想。
    • 每个页面有一个位来标记是否最近被访问过,以及一个指针来遍历页面。
    • 算法遍历页面列表,找到第一个未被访问过的页面进行替换,并将所有被访问过的页面标记为未访问状态。
  7. 第二次机会(Second Chance)
    • 这是时钟算法的一个变体。
    • 当算法遍历时,如果页面的访问位被设置,则将其清除而不立即替换页面,给页面一个“第二次机会”。
    • 这种方法有助于减少频繁替换最近使用过的页面的情况。
  8. 工作集(Working Set)
    • 工作集算法考虑进程当前的工作集,即一段时间内访问的所有页面。
    • 算法选择那些不在工作集内的页面进行替换,从而减少缺页中断。
  9. 最近最少使用近似(Approximate LRU, A-LRU)
    • A-LRU 是 LRU 的近似实现,通常使用缓存行中的计数器来近似页面的使用情况。
    • 计数器越低的页面被认为越少使用,从而被选择替换。

每种算法都有其优点和缺点,选择哪种算法取决于具体的应用场景和系统设计的需求。例如,LRU 被广泛认为是性能较好的算法之一,但由于其实现复杂度较高,有时会选择时钟算法或其变体作为替代方案。

示例

https://wenku.csdn.net/answer/ff8e13cb931f4d7983abc7c02a8463cc

进程有4个页面,页号为0〜3,页面变换表及状态位、访问位和修改位的含义如下 图所示。若系统给该进程分配了3个存储块,当采用第二次机会页面替换算法时,当访问的页面1不在内存时,淘汰表中页号为 (D) 的页面代价最小。

页帖号就是物理块号,

不在内存中,是不能淘汰不在内存中的页号,当状态位和访问位都为1时,看修改位,先淘汰未修改过的,因为根据时间局限性,页面没被修改过,则不久以后也不会被修改,如下图所示:

分页内存管理的核心是将虚拟内存空间和物理内存空间皆划分为大小相同的页面,并以页面作为内存空间的最小分配单位,下图给出了内存管理单元的虚拟的物理页面翻译过程,假设页面大小为4KB,那么CPU发出虚拟地址0010000000000100,其访问的物理地址是( )。

解析:页面大小为4KB 即2的12次方,虚拟地址中后12位去掉,得到0010是对应的物理块2得到110地址,所以物理地址是110000000000100

为了解决程序比内存大的问题,我们可以允许一个进程的部分虚拟页面存放在物理页面之外,也就是磁盘上。在需要访问这些外部虚拟页面时,再将其调入物理内存。由此,交换系统的所有缺陷均被克服。

内存管理单元对虚拟地址的翻译只是对页面号的翻译,即将虚拟页面号翻译成物理页面号。而对于偏移值,则不进行任何操作。这是因为虚拟页表和物理页表大小完全一样,虚拟页面里的偏移值和物理页面里的偏移值完全一样,因此无须翻译。

在页式存储管理系统中,地址寄存器(也称为虚拟地址或线性地址)被分为两部分:页号(Page Number)和页内偏移(Offset)。给定的信息是地址寄存器长度为 24 位,其中页号占 12 位。这意味着剩余的 12 位用于页内偏移。

采用ECC校验技术,一个8位的数据产生的ECC码要占用5位的空间,一个32位的数据产生的ECC码要占用( )位的空间。

本题考查服务器技术的相关概念。ECC( Error Checking and Correcting ,错误检查和纠正)不是一种内存类型,而是一种内存技术。ECC纠错技术也需要额外的空间来存储校正码,但其占有的位数跟数据的长度并非成线性关系。ECC将信息进行8比特位的编码,采用这种方式可以恢复1比特的错误。每一次数据写入内存的时候,ECC码使用一种特殊的算法对数据进行计算,其结果称为校验位(Check Bits)。然后将所有校验位加在一起的和是“校验和”(checksum),校验与数据一起存放。当这些数据从内存中读出时,采用同一算法再次计算校验和,并和前面的计算结果相比较,如果结果相同,说明数据是正确的,反之说明有错误,ECC可以从逻辑上分离错误并通知系统。当只出现单比特下位错误的时候,ECC可以把错误改正过来不影响系统运行。一个8位的数据产生的ECC码要占用5位的空间,16位数据需占用6位;而32位的数据则只需再在原来基础上增加一位,即7位的ECC码即可,以此类推。

网工 数据通信基本术语

数据通信涉及许多术语和技术,下面列出了一些常见的数据通信术语及其含义:

1. 基本术语

  • 比特 (Bit): 二进制位,数据通信中的最小单位,只有两种状态:0 或 1。
  • 字节 (Byte): 由 8 个比特组成的数据单元。
  • 波特率 (Baud Rate): 每秒信号的变化次数,对于二进制信号来说,波特率等于比特率。
  • 比特率 (Bit Rate): 每秒传输的比特数,通常用 bps(bits per second)表示。
  • 吞吐量 (Throughput): 在给定时间内实际成功传输的数据量,通常也用 bps 表示。

2. 通信信道相关术语

  • 信道 (Channel): 数据传输的物理路径或逻辑路径。
  • 带宽 (Bandwidth): 信道能够传输信号的最大频率范围,通常用 Hz 表示。
  • 信噪比 (Signal-to-Noise Ratio, SNR): 信号功率与噪声功率的比率,通常用分贝 (dB) 表示。
  • 调制 (Modulation): 将数字信号转换成适合在信道上传输的模拟信号的过程。
  • 解调 (Demodulation): 将模拟信号转换回数字信号的过程。

3. 通信模型相关术语

  • 源 (Source): 发送数据的设备或软件。
  • 目的地 (Destination): 接收数据的设备或软件。
  • 发送器 (Transmitter): 负责将数据转换为适合传输的形式并发送出去的设备。
  • 接收器 (Receiver): 负责接收并解码数据的设备。
  • 协议 (Protocol): 控制数据通信的标准或规则集合。

4. 传输模式

  • 基带传输 (Baseband Transmission): 直接使用原始数字信号进行传输的方法。
  • 宽带传输 (Broadband Transmission): 使用频分复用技术将多个信号组合在单个信道上进行传输的方法。
  • 全双工 (Full-Duplex): 同时支持双向数据传输的通信方式。
  • 半双工 (Half-Duplex): 支持双向数据传输但不能同时进行的通信方式。
  • 单工 (Simplex): 只支持单向数据传输的通信方式。

5. 错误检测与纠正

  • 奇偶校验 (Parity Check): 一种简单的错误检测机制,通过添加一个额外的比特来确保数据中 1 的总数为奇数或偶数。
  • 循环冗余校验 (CRC, Cyclic Redundancy Check): 一种常用的错误检测算法,通过生成一个校验和来检测数据传输中的错误。
  • 前向纠错 (FEC, Forward Error Correction): 一种错误纠正技术,允许接收方在不请求重新传输的情况下自动纠正错误。

6. 编码与压缩

  • 曼彻斯特编码 (Manchester Encoding): 一种自定时的编码方案,每个比特都包含一个中间电平跳变。
  • 脉冲编码调制 (PCM, Pulse Code Modulation): 一种将模拟信号转换为数字信号的编码方法。
  • 霍夫曼编码 (Huffman Coding): 一种基于频率的无损数据压缩方法。

7. 多路复用

  • 频分多路复用 (FDM, Frequency Division Multiplexing): 不同用户使用不同频率范围来共享同一个信道。
  • 时分多路复用 (TDM, Time Division Multiplexing): 不同用户在不同的时间片内使用相同的信道。
  • 码分多址 (CDMA, Code Division Multiple Access): 用户使用独特的码序列来共享信道。

8. 网络架构

  • 局域网 (LAN, Local Area Network): 一个较小地理范围内的网络。
  • 广域网 (WAN, Wide Area Network): 跨越较大地理范围的网络。
  • 城域网 (MAN, Metropolitan Area Network): 介于 LAN 和 WAN 之间的网络规模。

9. 其他重要术语

  • 协议栈 (Protocol Stack): 组织在一起完成特定功能的一系列协议。
  • 互联网协议 (Internet Protocol, IP): 规定了如何在网络中寻址和路由数据包。
  • 传输控制协议 (Transmission Control Protocol, TCP): 提供面向连接的、可靠的字节流服务。
  • 用户数据报协议 (User Datagram Protocol, UDP): 提供无连接的服务,数据传输简单快速,但可靠性较低

网工 模拟信号

模拟信号是在时间和幅度上连续变化的信号,它们可以用来表示各种物理现象,如声音、图像或温度等。模拟信号的特性包括振幅、频率和相位,并且可以通过电子设备如放大器、滤波器等进行处理。

特性

  • 振幅: 信号强度的最大值。
  • 频率: 信号每秒重复的次数,单位是赫兹 (Hz)。
  • 周期: 完成一次完整波动所需的时间。
  • 相位: 信号相对于参考点的位置。

应用

模拟信号在很多领域都有广泛的应用,比如:

  • 音频: 音乐、语音等都是以模拟信号形式存在的。
  • 视频: 电视信号通常是模拟信号。
  • 无线电: FM 和 AM 广播使用模拟信号。
  • 传感器: 温度计、压力计等传感器输出的是模拟信号。

模拟信号的优缺点

  • 优点:
    • 直观易理解:模拟信号更接近自然界的现象。
    • 易于产生和处理:许多自然信号本身就是模拟信号。
    • 高保真度:理论上可以达到无限精度。
  • 缺点:
    • 易受干扰:模拟信号容易受到电磁干扰和其他噪声的影响。
    • 不易存储和复制:模拟信号的精确复制比较困难。
    • 不易远距离传输:信号会衰减,需要放大器来增强信号。

模拟信号的处理

  • 放大: 通过增加信号振幅来增强信号。
  • 滤波: 通过去除不需要的频率成分来改善信号质量。
  • 调制: 将低频信号加载到高频载波上以便于传输。
  • 解调: 从已调制信号中恢复原始信号。

模拟信号与数字信号的转换

模拟信号和数字信号之间可以互相转换,这种转换通常通过模数转换器 (ADC) 和数模转换器 (DAC) 实现。

  • 模数转换 (ADC): 将模拟信号转换为数字信号的过程。
  • 数模转换 (DAC): 将数字信号转换为模拟信号的过程。

模拟信号的例子

  • 音频: 声音波形是一种典型的模拟信号。例如,人说话的声音可以通过麦克风捕捉并转换成电信号。
  • 视频: 传统的电视广播使用模拟信号传输图像和声音。
  • 无线电: FM 和 AM 广播使用模拟信号传输音乐和语音节目。
  • 传感器: 温度传感器、压力传感器等通常输出模拟电压信号。

网工 软件开发基础

软件生命周期

软件生命周期(Software Development Life Cycle, SDLC)是指从软件产品构思开始直到其不再使用的整个时间段内的一系列阶段。这些阶段覆盖了软件开发过程的所有方面,包括需求分析、设计、实现、测试、部署和维护等。

软件生命周期可以分为几个主要阶段:

  1. 项目规划
    • 在这个阶段确定项目的范围,评估资源需求,并制定项目计划。
    • 这包括定义项目目标、里程碑和交付时间表。
  2. 需求分析
    • 收集并分析用户的需求,明确软件的功能和性能需求。
    • 创建需求规格说明书,作为后续设计和开发的基础。
  3. 设计
    • 根据需求分析的结果设计软件架构和系统设计。
    • 包括总体设计和详细设计两个部分,确保软件的结构能够满足需求。
  4. 实现/编码
    • 开发人员根据设计文档编写代码。
    • 通常会采用模块化的方式进行开发,便于测试和维护。
  5. 测试
    • 对软件进行各种类型的测试,例如单元测试、集成测试、系统测试和验收测试。
    • 目的是找出并修复软件中的缺陷和错误。
  6. 部署/实施
    • 将软件发布给最终用户。
    • 可能涉及安装配置、数据迁移和培训等工作。
  7. 维护
    • 软件上线后需要持续进行维护,修复新发现的问题,改进功能,适应新的技术或业务需求。
    • 维护阶段可能持续很长时间,直到软件被替换或退役。
  8. 退役
    • 当软件不再满足业务需求或技术要求时,可能会被新的软件所替代。
    • 这个阶段涉及到软件的下线、数据归档或转移等工作。

每个组织可能会根据自己特定的需求和流程定制不同的软件生命周期模型,常见的模型有瀑布模型、迭代模型、敏捷开发模型等。

软件开发模型

敏捷开发(Agile Development)是一种以用户需求进化为核心、迭代发布的开发方法。它的出现是为了应对传统瀑布模型中的一些不足之处,特别是当需求变化频繁时,瀑布模型难以适应。敏捷开发强调团队合作、客户协作、响应变化和快速交付。

敏捷开发的主要特点包括:

  1. 迭代和增量开发:软件被分成若干个小的部分,每一部分在短周期内完成,然后发布给客户以收集反馈。这种迭代方式使得开发团队可以及时调整方向,确保产品的价值最大化。
  2. 用户参与:用户(通常是产品的最终用户或者代表用户利益的产品负责人)积极参与到整个开发过程中,确保产品能够满足用户的真实需求。
  3. 团队协作:强调跨职能团队之间的密切合作,鼓励团队成员之间的开放沟通,促进知识共享。
  4. 适应性规划:虽然有总体计划,但是计划会随着项目的进展而不断调整。敏捷方法认为计划应当是灵活的,以应对不断变化的需求。
  5. 持续改进:在每个迭代周期结束后,团队都会评估工作流程的有效性,并寻找改进的机会。
  6. 简化:敏捷开发鼓励简化复杂度,关注最有价值的功能优先开发。
  7. 质量保证:持续集成和测试是敏捷开发的重要组成部分,目的是尽早发现并解决问题。
  8. 响应变化:敏捷开发重视响应变化胜过遵循计划,这意味着即使是在后期阶段,也能接受变更请求。

敏捷开发有许多不同的框架和实践,其中最著名的包括 Scrum、Kanban、XP(极限编程)、Crystal 等。每个框架都有自己独特的方法和实践,但它们都遵循敏捷宣言的原则:

  • 我们最重要的目标,是通过尽早地、持续地交付有价值的软件来使客户满意。
  • 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化的优势来为客户创造竞争优势。
  • 频繁地交付可以工作的软件,间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  • 业务人员和开发人员必须每天共同工作。
  • 激发个体和互动。构建项目的内外部团队氛围。
  • 可工作的软件是进度的首要度量标准。
  • 敏捷过程倡导可持续开发。责任人、开发人员和用户应该能够保持恒久的工作节奏。
  • 坚持不懈地追求技术卓越和良好设计以增强敏捷能力。
  • 简洁是必不可少的。
  • 最佳的构架、需求和设计出自自组织团队。
  • 团队定期反思如何更有效地工作,并相应地调整自身的行为。

软件性能测试

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

软件开发模型

https://blog.csdn.net/lonelymanontheway/category_10805425.html

软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程,叫软件生存周期模型,又叫软件开发方法、软件开发模型(Software Develop Model)、软件过程模型 (Software Process Model)

大体来说,有3类:

  • 软件需求完全确定为前提,可以采用瀑布模型;
  • 软件开发初期阶段只能提供基本需求,可以采用迭代式或渐进式模型,如喷泉模型,螺旋模型、统一开发过程和敏捷方法、极限编程。开发人员对算法的效率,操作系统的兼容性和人机交互的形式不明确等情况下,快速原型开发
  • 形式化为基础的变换模型

原型模型

又称快速原型模型,是快速建立起来的可以在计算上运行的程序,是软件的一个早期可运行的版本,它的功能是最终产品的子集。用途主要是获取用户的真正的需求。

原型模型主要有两个阶段:

  • 原型开发阶段。软件开发人员根据用户提出的软件系统的定义,快速地开发一个原型。该原型应该包含目标系统的关键问题和反映目标系统的大致面貌,展示目标系统的全部或部分功能、性能等
  • 目标软件开发阶段。在征求用户对原型的意见后对原型进行修改完善,确认软件系统的需求并达到一致的理解,进一步开发实际系统

瀑布模型

特点:
阶段间具有顺序性和依赖性,前一阶段结束后才能开始后一阶段的工作,前一阶段的输出是后一阶段的输入;推迟实现观点,尽可能推迟程序的物理实现;强调质量保证观点,每个阶段必须完成规定的文档,每个阶段结束前完成文档以便及早改正错误。

瀑布模型可以说是最早使用的软件生存周期模型之一。由于这个模型描述软件生存的一些基本过程活动,所以它被称为软件生存周期模型。这些活动从一个阶段到另一个阶段逐次下降,形式上很像瀑布。瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。

每一个阶段都是建立在前一个阶段的正确结果之上,前一个阶段的错误和疏漏会隐蔽地带入后一个阶段。这种错误有时甚至可能是灾难性的,因此每一个阶段工作完成后,都要进行审查和确认。

优点:

  • 原理简单,容易掌握
  • 各阶段间都有验证和确认环节,以便进行质量管理
  • 主要用于支持结构化方法

缺点:

  • 缺乏灵活性,不能适应用户的需求变化
  • 缺乏演化性,返回上一级的开发需要付出十分高昂的代价
  • 是线性的软件开发模型,回溯性差

渐增模型

也叫增量模型,其实质上是分段的线性模型,是一种非整体开发模型,渐增模型把软件产品作为一系列增量构件来设计、编码、集成和测试,在项目开发过程中以一系列的增量方式来逐步开发系统。

优点:

  • 可分批次提交软件产品,方便用户及时了解软件开发进展情况,及早发现问题
  • 以组件为单位进行开发,降低软件开发风险
  • 开发顺序灵活,优先级最高的服务首先交付

缺点:

  • 由于对整个软件系统的需求没有一个完整的定义,会给总体设计带来麻烦
  • 在把每个新的增量构件集成到现有软件结构中时,必须不破坏原来已开发出的产品
  • 软件的体系结构必须是开放的,即向产品中加入新构件的过程必须简单、方便。每次增量开发的产品都应当是可测试的,可扩充的

适用场合:

  • 软件产品可以分批次地进行交互
  • 待开发的软件系统能够被模块化
  • 软件开发人员对应用领域不熟悉、难以一次性地进行软件开发时
  • 项目管理人员把握全局的水平较高时
  • 对软件需求把握不准确、设计方案有一定风险的项目

螺旋模型

螺旋模型是在结合瀑布模型与快速原型模型基础上演变而成,加入风险分析。

软考很恶心的地方在于抠字眼(单选题):

  • 有瀑布和原型两个选项,选择原型
  • 有快速、原型、瀑布三个选项,选择快速

其基本思想,使用原型及其它方法来尽量降低风险。沿着螺线进行若干次迭代。两个显著特点:

  • 采用循环的方式逐步加深系统定义和实现的深度,降低风险
  • 确定一系列里程碑,确保项目开发过程中的相关利益者都支持可行的和令人满意的系统解决方案

形式化方法

形式化方法是一种具有坚实数学基础的方法,从而允许对系统和开发过程做严格处理和论证,适用于那些系统安全级别要求极高的软件的开发。

主要优越性:能够数学(精确)地表述和研究应用问题及软件实现。

但是它要求开发人员具备良好的数学基础。用形式化语言书写的大型应用问题的软件规格说明往往过于细节化,并且难以为用户和软件设计人员所理解。由于这些缺陷,形式化方法在目前的软件开发实践中并未得到普遍应用。

敏捷方法

目标:尽可能早地、持续地对有价值的软件的交付
1.极限编程–XP
价值观:沟通、简单、反馈、勇气
原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作
2.水晶法(Crystal)
水晶法认为每个不同的项目都需要不通的策略、约定和方法论,认为人对软件质量有重要的影响,软件质量随开发人员素质的提高而提高
3.并列争求法(Scrum)
用迭代的方法,把每30天一次的迭代看做一次冲刺,并按需求的优先级来实现产品

企业集成

  • 企业信息集成是一个十分复杂的问题,按照组织范围来分,分为企业内部的信息集成外部的信息集成两个方面。
  • 1.企业内部的信息集成
  • 按集成内容,企业内部的信息集成一般可分为以下四个方面:
  • (1)技术平台的集成
  • 系统底层的体系结构、软件、硬件以及异构网络的特殊需求首先必须得到集成。这个集成包括信息技术硬件所组成的新型操作平台,如各类大型机、小型机、工作站、微机、通信网络等信息技术设备,还包括置入信息技术或者说经过信息技术改造的机床、车床、自动化工具、流水线设备等新型设施和设备。
  • (2)数据的集成
  • 为了完成应用集成和业务流程集成,需要解决数据和数据库的集成问题。数据集成的目的是实现不同系统的数据交流与共享,是进行其他更进一步集成的基础。数据集成的特点是简单、低成本,易于实施,但需要对系统内部业务的深入了解。
  • 数据集成是对数据进行标识并编成目录,确定元数据模型。只有在建立统一的模型后,数据才能在数据库系统中分布和共享。数据集成采用的主要数据处理技术有数据复制、数据聚合和接口集成等。
  • (3)应用系统的集成
  • 应用系统集成是实现不同系统之间的互操作,使得不同应用系统之间能够实现数据和方法的共享。它为进一步的过程集成打下了基础。
  • (4)业务过程的集成
  • 对业务过程进行集成的时候,企业必须在各种业务系统中定义、授权和管理各种业务信息的交换,以便改进操作、减少成本、提高响应速度。业务流程的集成使得在不同应用系统中的流程能够无缝连接,实现流程的协调运作和流程信息的充分共享。

配置库

配置库有三种:开发库、受控库、产品库。

信息系统项目完成后,最终产品或项目成果应置于产品库内,当需要在此基础上进行后续开发时,应将其转移到受控库后进行。

电子政务与电子商务

B2B:企业与企业之间通过互联网进行产品、服务及信息的交换
B2C:是指企业直接面向消费者提供商品或服务
G2E:指政府(Government)与政府公务员即政府雇员(Employee)之间的电子政务
G2B:是指政府(Government )与企业(Business)之间的电子政务

软件集成测试

软件集成测试也称为组装测试、联合测试(对于子系统而言,则称为部件测试)。它将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。从组装策略而言,可以分为一次性组装测试和增量式组装(包括自顶向下、自底向上及混合式)两种。集成测试计划通常是在软件概要设计阶段完成的,集成测试一般采用黑盒测试方法。一般来说:单元测试所对应的是详细设计环节;
集成测试对应概要设计;
系统测试,就是根据需求分析;验收测试与用户需求对应,是非设计流程。

  • UML中将各种事物构造块归纳成了以下4类。
  • (1)结构事物:UML的静态部分,用于描述概念或物理元素。包含包括类、对象、接口、用例、协作、构件、节点等。
  • (2)行为事物:UML的动态部分,描述一种跨越时间、空间的行为。行为事物包括交互、状态机等。
  • (3)分组事物:类的分组。
  • (4)注释事物:注释图形。

软件文档是影响软件可维护性的决定因素。软件系统文档可以分为用户文档和(系统文档)两类。其中,用户文档主要描述(系统功能)和使用方法,并不关心这些功能是怎样实现的。