计算机基础知识 FOR LEVEL2

计算机基础知识

文章目录

1. 计算机系统

1.1 概述

1.1.1 计算机发展历程
  • ENIAC 第一台数字计算机,1946年诞生于美国宾夕法尼亚大学
  • EDSAC 事实上的第一台存储程序的计算机
  • EDVAC 1951年,冯诺依曼
  • 计算机发展四阶段:
    • 第一阶段 电子管
    • 第二阶段 晶体管
    • 第三阶段 集成电路计算机
    • 第四阶段 大规模集成电路计算机
1.1.2 计算机体系结构
  • 冯诺依曼1946年提出的“储存程序”思想:
    • 计算机(硬件)由运算器、存储器、控制器、输入设备和输出设备5大基本部件组成
    • 计算机内部采用二进制来表示指令和数据
    • 需要将编好的程序和原始数据事先存入存储器中,然后再启动计算机工作
1.1.3 计算机系统基本组成
  • 一个完整的计算机系统包括硬件系统和软件系统两大部分

1.2 计算机硬件系统

  • 中央处理器:主要包括运算器和控制器两个方面,主频和字长决定了CPU的品质
  • 存储器:寄存器 --> 缓存 --> 主存 --> 外存
  • 输入设备
  • 输出设备
1.2.1 中央处理器
  • 控制器(CU):控制器是整个计算机控制中心和指挥中心。对于每个指令,控制单元都要执行4个基本操作:获取指令,分析指令,执行指令,存储结果
  • 运算器(ALU):运算器可以执行算数运算和逻辑运算,并能控制这些操作的速度
  • 寄存器:控制器和运算器都使用寄存器,它是特殊的CPU区域,能提高计算机性能。寄存器是高速存储区域,可以在处理过程中临时存储数据
  • 总线:总线是在CPU内部以及在CPU和主板的其他部件之间传输信息的电子数据线路
1.2.2 存储器
  • 寄存器:
  • 缓存:高速缓冲储存器
  • 主存
    • RAM:随机存储器
    • ROM:只读存储器
  • 外存/辅存:种类繁多
1.2.3 总线和外设
  • 总线:总线是连接计算机中各个部件的信息传输线,是各个部位共享的传输介质。
    • 片内总线
    • 系统总线:数据总线、地址总线、控制总线
    • 通信总线
  • 总线的组成及性能指标
    • 总线组成:总线的结构通常分为单总线结构和多总线结构
    • 总线性能:总线的性能包括总线的宽度(数据总线的根数)、总线的带宽(数据传输率)及时钟同步/异步等
  • 总线仲裁
  • 总线操作
  • 总线标准:日常中最常用的是USB
1.2.4 数据的内部表示(需查询资料)
1.2.5 计算机的基本工作原理(需查询资料)
  • 计算机指令格式:一条计算机指令通常有两部分组成:操作码和操作数(地址码)

    • 指令中的操作码指出该指令需要完成操作的类型或性质
    • 指令中的地址码用来描述该指令的操作对象,或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)
  • 计算机指令的寻址方式:指令中操作数的真实地址被称为有效地址,它是由寻址方式和形式地址共同来决定的

  • 计算机指令系系统:某种计算机的所有指令的集合,称为该计算机的指令系统

    • 数据传送指令
    • 数据处理指令
    • 程序控制指令
    • 输入/输出指令
    • 其他指令
  • 计算机执行指令的基本过程

    • 取指令:按照程序计数器中的地址,从内存储器中取出当前要执行的指令到指令寄存器
    • 分析指令:对指令寄存器中的指令进行分析
    • 执行地址:由操作控制电路发出完成该操作所需要的一系列控制信息,对由源地址码所指出的源操作数做该指令所要求的操作,并将操作结果存放到由目的地址码所指出的地方
    • 修改程序计数器:一条指令执行完后,根据程序的要求修改程序计数器的值

    注:一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短,指令执行就越快

  • 指令执行的时序:计算机工作的过程就是取指令、分析指令、执行指令3个基本动作的重复

    • 通常用内存中读取一个指令字的最短时间来规定CPU周期,也称为机器周期
    • 取指令必须访问存储器,占用以及机器周期
    • 分析指令所占用时间极短,无需分配一个完整的机器周期,一般是在取指令周期后期
    • 执行指令的周期取决于具体指令

    ​ 取指周期—>执行周期1—>执行周期2—>执行周期3

  • 存储器

  • 输入设备

  • 输出设备

1.3 操作系统

1.3.1 操作系统概述
  • 操作系统的功能与任务:操作系统是最基本和最核心的系统软件
  • 从计算机系统的组成层次出发:
    • 管理系统资源
    • 为用户提供资源共享的条件和环境
    • 提供输入/输出的方便环境,简化用户的输入/输出工作,提供良好的用户界面
    • 规定用户的接口,发现、处理或报告计算机操作过程中所发生的各种错误
  • 如果把操作系统看成是计算机系统资源管理者:
    • 处理器管理
    • 存储器管理
    • 设备管理
    • 文件管理
    • 用户接口
  • 操作系统的发展过程
    • 手工操作(无操作系统)
    • 批处理系统
    • 多道程序系统
    • 分时系统
    • 个人计算机操作系统
  • 操作系统分类
    • 多道批处理操作系统:重点在于多道和批处理
    • 分时操作系统:特点:多路性(又称同时性)、交互性、独立性(终端用户互相独立)、及时性
    • 实时操作系统:三种典型的实时系统:过程控制系统、信息查询系统、事务处理系统。又分为硬实时和软实时。实时操作一般会采用基于优先级的抢占调度方式
    • 网络操作系统:应具备的功能:网络通信、资源管理、网络管理网络服务和通信透明性
    • 分布式操作系统:有点:健壮性强、扩充容易、可靠性高、维护方便、效率较高
    • 嵌入式操作系统:微型化是嵌入式系统的重要特点
1.3.2 进程管理
  • 并发程序设计
    • 顺序程序特点
      • 程序所规定的动作严格地按顺序执行,即每个动作都必须在上一个动作执行完成以后才开始。这就是程序的顺序性。
      • 程序一旦开始执行,其计算结果不受外界因素的影响。顺序程序的静态文本与其计算过程有着一一对应的关系。这就是顺序程序的封闭性。
      • 在程序运行过程中,停顿对计算结果没有影响。只要给出相同的初始条件,输入,重复执行一定能得到相同的结果。这就是顺序程序的可再现性。
    • 并发程序的特点
      • 并发程序没有封闭性
      • 程序与其执行过程不是一一对应的关系:被共享的程序必须是可重入程序,其在执行过程中本身不能有任何修改
      • 程序并发执行可以相互制约
      • 并发程序具有并行性和共享性
  • 进程的基本概念:是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
  • 进程与程序有关又有本质的区别
    • 进程是程序在处理机上的一次执行过程,它是动态的概念。而程序只是一组指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念
    • 进程是程序的执行过程,试一次运行活动。因此进程具有一定的生命期,它能动态地产生和消亡。即进程可以由创建而产生,由调度而执行,因得不到资源而暂停,以致最后由撤销而消亡。也就是说,进程的存在是暂时的。而程序是可以作为已追踪软件资源长期保存的,她的存在是永久的
    • 进程是程序的执行过程,因此,进程的组成包括程序和数据。除此之外,进程还包括记录进程相关信息的“进程控制块”
    • 一个程序可能对应多个进程
    • 一个进程可以包含多个程序
  • 进程的状态及其转化
    • 运行状态
    • 就绪状态
    • 等待状态:又称阻塞状态或封锁状态,表示进程在等待某一事件,比如等待输入、分配资源、其他进程传来的信息
    • 创建状态
    • 终止状态
      –> 一旦进程被创建后,进程将在就绪、等待(阻塞)、运行三者间互相迁移,完成相关任务后进入终止状态
  • 进程控制块及其组织
    • 进程控制块PCB:进程控制块是由系统为每个进程分别建立的,用以记录对应进程的程序和数据的存储情况,记录进程的动态信息。PCB中通常包含以下信息
      • 进程名
      • 特征信息
      • 执行状态信息
      • 通信信息
      • 调度优先数
      • 现场信息
      • 系统栈
      • 进程映像信息
      • 资源占有信息
      • 族关系
  • 进程的组织:对进程的物理组织方式通常有线性表和链接表两种
  • 进程调度:进程调度就是按一定的策略动态的把CPU分配给处于就绪队列中的某一进程并使其执行的过程。
    • 先来先服务调度算法:(first-come first-served FCFS)按照进程就绪的先后顺序来调度进程
    • 时间片轮转调度算法:(round-robin algoritgm RR)系统吧所有就绪进程按先后次序排队,CPU总是优先分配给就绪队列中的第一个就绪进程,并分配给它一个固定的时间片。
    • 优先级调度算法:进程调度最常用的一种简单的方法,是把CPU分配给就绪队伍中具有最高优先级的就绪进程。根据CPU是否可被抢占,优先级调度分为抢占式和非抢占式优先级调度算法。
1.3.3 存储管理(内存储器)
  • 存储管理的功能和地址重定位
    • 存储管理的功能
      • 地址变换
      • 内存分配
      • 存储共享与保护
      • 存储器扩充
    • 地址重定位:程序中的相对地址/逻辑地址在进入内存后需要变换为实际地址/物理地址,在执行上述工作时要修改程序中所有有关地址的项
  • 连续存储管理:固定分区容易产生内部碎片,可变分区容易产生外部碎片
  • 分页式存储管理:作业空间被划分为页,实际的内存空间被划分成块,其中页的大小和块的大小相等。优点:能有效结果碎片问题,内存利用率高,内存分配与回收算法也比较简单;缺点是采用动态地址变换机构增加了硬件成本,也降低了处理机的速度。
    • 分页式存储管理的地址重定位:分页式存储管理通常会在内存中为每个作业开辟一块特定区域,建立起作业的逻辑页与储块之间的对应关系表,称为页面映象表或简称页表(page table)。最简单的页表只包含页号、块号两个内容。页表的起始地址和长度放在该作业的进程控制块PCB中。当前运行作业的页表由一个专用的控制寄存器(页表始址寄存器)来指定。当要运行一个新作业时,将该作业的页表始址、长度从进程控制块中取出。在作业执行过程中,由硬件地址分页机构自动将每条程序指令中的逻辑地址解释成两部分——页号p和页内地址w。通过页号查页表得到存储块号b,与页内地址w组合在一起形成物理地址,访问内存后得到操作数据。
    • 分页式管理存储保护:分页式存储管理中的存储信息保护可从两个方面实现,一方面是在进行地址变换时,产生的页号应小于页表长度,否则视为越界访问,这类似于基址——限长存储保护;另一方面,可在页表中增加存取控制和存储保护的信息:对每一个存储块,可允许4种保护方式:禁止做任何操作、只能执行、只能读、能读/写。当要访问某页时,先判断该页的存取控制和存储保护信息是否允许。
  • 分段式存储管理及段页式存储管理
    • 分段式存储管理:分页式管理的优点在于内存空间的管理上,分段式管理的优点体现在地址空间的管理上。
    • 段页式存储管理:兼具分页和分段的优点
      • 作业地址空间进行段式管理
      • 每段内再分成若干大小固定的页
      • 对内存空间的管理仍然和分页式存储管理一样
      • 作业的逻辑地址包括3个部分:段号、段内页号和页内位移
  • 虚拟存储器管理:虚拟存储器是对主存的逻辑扩展
    • 请求页式存储管理:需要时进内存,不需要是在外存
      • 作业表JT
      • 每一个作业要有一个页表PMT
      • 存储分块表MBT
    • 请求页式存储管理的常用页面置换算法包括:最优算法,先进先出算法,最近最久未使用算法
    • 请求段式存储管理:与请求页式存储管理相似
1.3.4 文件管理
1.3.5 I/O设备管理

2. 数据结构与算法

2.1 算法

2.1.1 算法的基本概念
  • 算法是指解题方案的准确而完整的描述
  • 算法应具有以下几个特征
    • 可行性
    • 确定性
    • 有穷性
    • 拥有足够的情报
  • 所谓算法是一组严谨定义运算顺序的规则,且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止
2.1.2 算法设计基本方法
  • 列举法
  • 归纳法
  • 递推
  • 递归
  • 减半递推技术
  • 回溯法:回溯法在处理复杂的数据结构方面有着广泛的应用
2.1.3 算法复杂度
  • 算法的时间复杂度:算法的时间复杂度是指执行算法所需要的计算工作量
    • 如果算法的执行次数取决于特定输入,那么需要从平均性态和最坏情况复杂性来考虑算法的时间复杂度,且最坏情况复杂性比起平均性态更具有实用价值
  • 算法的空间复杂度:一个算法的空间复杂度是指执行这个算法所需要的内存空间

2.2 数据结构的基本概念

  • 数据结构主要讨论以下三方面的问题
    • 数据的逻辑结构
    • 数据的存储结构
    • 对各种数据结构进行的运算
2.2.1 什么是数据结构(略)
2.2.2 数据结构的图形表示(略)
2.2.3 线性结构和非线性结构
  • 线性结构:如果一个非空的数据结构满足下列两个条件:有且只有一个跟节点;每一个节点最多只有一个前件,也最多只有一个后件。则称该结构为线性结构或线性表
  • 一个空的数据结构根据,如果对该数据结构的运算是按线性结构的规则来处理,则该数据结构属于线性结构,否则属于非线性结构

2.3 线性表及其顺序存储结构

2.3.1 线性表的基本概念
  • 有且只有一个根节点
  • 有且只有一个叶子节点
  • 除了根节点和叶子节点外,其他所有节点有且只有一个前件,同时有且只有一个后件。线性表中节点的个数n称为线性表的长度。当n=0时,称为空表
2.3.2 线性表的顺序存储结构
  • 在计算机中存放线性表,一种最简单的方法是顺序存储,也称为顺序分配
  • 线性表的顺序存储结构具有以下两个基本特点
    • 线性表中所有元素所占的存储空间是连续的
    • 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的
2.3.3 顺序表的插入运算(略)
2.3.4 顺序表的删除运算(略)

2.4 栈和队列

2.4.1 栈及其基本运算
  • 栈是一种特殊的线性表,一段封闭,先进后出,理解为一个装羽毛球的球桶
  • 进栈运算
  • 退栈运算
  • 读栈运算
2.4.2 队列及其基本运算
  • 队列是指允许一段进行插入,另一端进行删除的线性表,先进先出,后进后出
  • 循环队列需要增加一个标志s,当s=0时表示队列空,当s=1时表示队伍非空
  • 入队rear+1
  • 退队front+1

2.5 线性链表

2.5.1 线性链表的基本概念
  • 链式存储方式中,要求每个节点由2个部分组成:一部分用于存放数据元素值,称为数据域,另一部分用于存放指针,称为指针域。其中指针用于指向该节点的前一个或者后一个节点
2.5.2 线性链表的基本运算(略)
2.5.3 循环链表
  • 在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的节点。而线性单链表做不到这一点
  • 由于在循环链表中设置了一个表头结点,因此,在任何情况下循环链表中至少有一个结点,从而使空表与非空表的运算同一

2.6 树与二叉树(重点)

2.6.1 树的基本概念
  • 在树结构中,上端结点是前件,下端结点是后件
  • 在树结构中,每个节点只有一个父结点,没有父节点的称为根结点
  • 在树结构中,一个结点拥有的后件个数称为该结点的度
  • 在树结构中,所有节点中最大的度称为树的度
  • 在树结构中,树的节点数是所有节点的度之和+1
    • 度 = 分支数 = 结点数
    • 所有度之和 = 等于所有分支数 = 所有除了根结点的节点数
  • 在树结构中,树的最大层次称为树的深度
  • 在树结构中,以某结点的一个子结点为根构成的树称为该结点的一棵子树,叶子节点没有子树
  • 用树来表示算数表达式的原则如下:
    • 表达式中的每一个运算符在树中对应一个结点,称为运算符结点
    • 运算符的每一个运算对象在树中为该运算符结点的子树(在树中的顺序为从左到右)
    • 运算对象中的单变量均为叶子结点
2.6.2 二叉树及其基本性质
  • 二叉树具有以下两个特点
    • 非空二叉树只有一个根结点
    • 每一个结点最多只有2棵子树,且分别称为该结点的左子树与右子树
  • 二叉树的基本性质:
    • 在二叉树的第k层上,最多有2^(k-1)个结点
    • 深度为m的二叉树最多有2^m - 1个结点
    • 在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个
    • 具有n个结点的二叉树,其深度至少为[log2 n]+1:已知二叉树结点为n,深度最小的情况为完全二叉树,设该二叉树的深度为m+1,则2m<n<2(m+1)-1 ,则[log2 n] = m,从而推导出深度至少为[log2 n]+1
  • 满二叉树:我满了
  • 完全二叉树:在最后一层上只缺少右边的若干结点
  • 若从根结点开始从左到右对结点进行编号,总数n
    • k = 1,该结点为根结点,若k > 1则该结点的父节点编号是INT(k/2)
    • 若2k ≤ n,则编号为k的结点的左子结点编号是2k
    • 若2k+1 ≤ n,则编号为k的结点的右子结点编号是2k+1
2.6.3 二叉树的存储结构
  • 二叉树通常采用链式存储结构
2.6.4 二叉树的遍历(难点)
  • 前序遍历
    • 访问根结点
    • 前序遍历左子树
    • 前序遍历右子树
  • 中序遍历
    • 中序遍历左子树
    • 访问根结点
    • 中序遍历右子树
  • 后续遍历
    • 后续遍历左子树
    • 后续遍历右子树
    • 访问根结点
  • 逆推,确定根结点,分界

2.7 查找技术

2.7.1 顺序查找
  • 如果线性表为无序表(即表中元素的排列是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找
  • 即使是有序线性表,如果采用链式存储结构,也只能用顺序查找
2.7.2 二分法查找
  • 只适用于顺序存储的有序表(从小到大)
  • 最多比较次数log2 n ,及时间复杂度为O(log2 n)

2.8 排序技术(重点)

2.8.1 交换类排序法
  • 冒泡排序法:从头往后消除逆序 最坏比较次数n(n-1)/2
  • 快速排序法:(补充学习)最坏比较次数n(n-1)/2
2.8.2 插入类排序法
  • 简单插入排序法:最坏比较次数n(n-1)/2
  • 希尔排序法:(补充学习)
2.8.3 选择类排序法
  • 简单选择排序法:最坏比较次数n(n-1)/2
  • 堆排序法:

3. 程序设计基础

3.1 程序设计方法和风格

  • 就程序设计方法和技术的发展而言,主要经过了结构化程序设计和面向对象的程序设计阶段
  • 源程序文档要考虑以下几点:
    • 符号名的修改
    • 程序注释
    • 视觉组织
  • 数据说明的方法
    • 数据说明的次序规范化
    • 说明语句中变量安排有序化
    • 使用注释来说明复杂数据的结构
  • 语句的结构
    • 在一行内只写一条语句
    • 程序编写应优先考虑清晰性
    • 除非对效率有特殊要求,程序编程要做到清晰第一,效率第二
    • 首先要保证程序正确,然后才能要求提高速度
    • 避免使用临时变量而使程序的可读性下降
    • 避免不必要的转移
    • 尽可能使用库函数
    • 避免采用复杂的条件语句
    • 尽量减少使用“否定”条件的条件语句
    • 数据结构要有利于程序的简化
    • 要模块化,使模块功能尽可能单一化
    • 利用信息隐蔽,确保每一个模块的独立性
    • 从数据出发去构造程序
    • 不要修补不好的程序,要重新编写
  • 输入和输出
    • 对所有输入的数据要校验数据的合法性
    • 检查输入项的各种重要组合的合理性
    • 输入格式要简单,以使得输入的步骤和操作尽可能的简单
    • 输入数据时,应允许使用自由格式
    • 应允许默认值
    • 输入一批数据时,最好使用输入结束标志
    • 在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时在数据输入过程中和输入结束时,应在屏幕上给出状态信息
    • 当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性,给所有的输出加注释,并设计输出报表格式

3.2 结构化程序设计

3.2.1 结构化程序设计原则
  • 自顶向下
  • 逐步求精
  • 模块化
  • 限制使用goto语句
    • 滥用GOTO语句确实有害,应尽量避免
    • 完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序的流程更清楚、效率更高
    • 争论的焦点不应该放在是否取消GOTO语句,而应该放在用什么样的
      程序的程序结构上
3.2.2 结构化程序的基本结构于特点
  • 顺序结构
  • 选择结构
  • 循环结构
    • 对先判断后执行循环体的称为当型循环结构
    • 对先执行循环体后判断的称为直到型循环结构
3.2.3 结构化程序设计原则和方法的应用
  • 使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑
  • 选用的控制结构只准许有一个入口和一个出口
  • 程序语句组成容易识别的块,每块只有一个入口和出口
  • 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现
  • 语言中所没有的控制结构,应该采用前后一致的方法来模拟
  • 严格控制goto语句的使用
    • 用一个非结构化的程序设计语言去实现一个结构化的构造
    • 若不使用goto语句会使功能模糊
    • 在某种可以改善而不是损害程序可读性的情况下

3.3 面向对象的程序设计

3.3.1 关于面向对象:优点
  • 与人类习惯的思维方式一致
  • 稳定性好
  • 可重用性好
  • 易于开发大型软件产品
  • 可维护性好
    • 用面向对象的方法开发的软件稳定性较好
    • 用面向对象的方法开发的软件比较容易修改
    • 用面向对象的方法开发的软件比较容易理解
    • 易于测试和调试
3.3.2 面向对象的基本概念
  • 对象:对象是面向对象方法中最基本的概念
    • 特点:标识唯一性
    • 特点:分类性
    • 特点:多态性:指同一个操作可以是不同对象的行为
    • 特点:封装性
    • 特点:模块独立性好
  • 类和实例:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。类是对对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例
  • 消息:面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为消息
  • 继承:继承是指能够直接获得已有的性质和特征,而不必重复定义他们
  • 多态性:在面向对象的软件技术中,多态性是指子类对象可以和父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象

4. 软件工程基础

4.1 软件工程基本概念

4.1.1 软件定义与软件特点
  • 计算机软件:计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合
  • 软件的特点:
    • 软件是一种逻辑实体,而不是物理实体,具有抽象性
    • 软件的生产与硬件不同,它没有明显的制作过程
    • 软件在运行、使用期间不存在磨损、老化的问题
    • 软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题
    • 软件复杂性高,成本昂贵
    • 软件开发涉及诸多的社会因素
4.1.2 软件危机与软件工程

软件危机主要表现在

  • 软件需求的增长得不到满足
  • 软件开发成本和进度得不到控制
  • 软件质量难以保证
  • 软件不可维护或维护程度非常低
  • 软件的成本不断提高
  • 软件开发生产率的提高赶不上硬件的发展和应用需求的增长

软件工程包括3个要素:

  • 方法:完成软件工程项目的技术手段
  • 工具:支持软件的开发、管理、文档生成
  • 过程:支持软件开发的各个环节的控制、管理
4.1.3 软件过程与软件声明周期
  • 软件过程:软件过程是把输入转化为输出的一组彼此相关的资源和活动
    • P:软件规格说明
    • D:软件开发或软件设计与实现
    • C:软件确认
    • A:软件演进
  • 软件生命周期:
    • 定义阶段:
      • 可行性研究与计划指定
      • 需求分析
    • 开发阶段:
      • 总体设计
      • 详细设计
      • 编码
      • 测试
    • 维护阶段:
      • 使用
      • 维护
      • 退役
4.1.4 软件工程的目标与原则
  • 软件工程的目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可操作性且满足用户需求的产品
  • 软件开发技术:软件开发学、开发过程、开发工具和软件工程环境,其主体是软件开发方法学
  • 软件工程管理:软件管理学、软件工程经济学、软件心理学等内容
  • 软件工程的原则:基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性
4.1.5 软件开发工具与软件开发环境(略)

4.2 结构化分析方法

4.2.1 需求分析与需求分析方法
  • 需求分析
    • 需求的定义
      • 用户解决问题或达到目标所需的条件或权能
      • 系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或权能
      • 一种反映上述2条所描述条件或权能的文档说明
    • 需求分析阶段的工作
      • 需求获取
      • 需求分析
      • 编写需求规格说明书
      • 需求评审
  • 需求分析的方法
    • 结构化分析方法
    • 面向对象的分析方法
4.2.2 结构化分析方法
  • 关于结构化分析方法步骤
    • 通过付用户的调查,以软件的需求为线索,获得当前系统的具体模型
    • 去掉具体模型中非本质因素,抽象出当前系统的逻辑模型
    • 根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型
    • 完善目标系统并补充细节,写出目标系统的软件需求规格说明
    • 评审直到确认完全符合用户对软件的需求
  • 结构化分析的常用工具
    • 数据流图(data flow diagram,DFD)
      • 对加工处理建立唯一、层次性的编号,且每个加工处理通常要求既有输入又有输出
      • 数据存储之间不应该有数据流
      • 数据流图的一致性,处理的数据既要读也要写
      • 父图、子图关系与平衡规则
    • 数据字典(data dictionary, DD):是结构化分析方法的核心
    • 判定树:先从问题定义的文字中描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树
    • 判定表:当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由某一组条件取值的组合而引发的,使用判定表描述比较合适
4.2.3 软件需求规格说明书
  • 软件需求规格说明书的作用
    • 便于用户、开发人员进行理解和交流
    • 反映出用户问题的结构,可以作为软件开发工作的基础和依据
    • 作为确认测试和验收的依据
    • 为成本估算和编制计划进度提供基础
    • 软件不断改进的基础
  • 软件需求规格说明书的内容:软件需求说明应重点描述软件的目标,软件的功能需求,外部接口,属性即约束条件等
  • 软件需求规格说明的特点
    • 正确性
    • 无歧义性
    • 完整性
    • 可验证性
    • 一致性
    • 可理解性
    • 可修改性
    • 可追踪性

4.3 结构化设计方法

4.3.1 软件设计的基本概念
  • 软件设计的基础
    • 软件开发阶段占软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节
    • 软件设计师开发阶段最重要的步骤,是将需求准确的转化为完整的软件产品或系统的唯一途径
    • 软件设计做出的决策,最终影响软件实现的成败
    • 设计是软件工程和软件维护的基础
  • 软件设计的基本原理
    • 抽象
    • 逐步求精和模块化
    • 信息隐蔽和局部化
    • 模块独立性:高内聚、低耦合
4.3.2 概要设计
  • 概要设计的任务
    • 设计软件系统结构
      • 采用某种设计方法,将一个复杂的系统按功能划分成模块
      • 确定每个模块的功能
      • 确定模块之间的调用关系
      • 确定模块之间的接口,即模块之间传递的信息
      • 评价模块结构的质量
    • 设计数据结构及数据库
      • 用于功能和行为的系统分析原则也应用于数据
      • 应该标识所有的数据结构以及以上的操作
      • 应当简历数据字典,并用于数据设计和程序设计
      • 低层的设计决策应该推迟到设计过程的后期
      • 只有哪些需要直接使用数据结构、内部数据的模块才能看到该数据的表示
      • 应该开发一个由有用的数据结构和应用于其上的操作组成的库
      • 软件设计和程序设计语言应该支持抽象数据类型的规格说明和实现
    • 编写概要设计文档:在概要设计阶段,需要编写的文档有概要设计说明书、数据库设计说明书、集成测试计划等
    • 评审概要设计文档
  • 面向数据流的结构化设计方法
    • 数据流类型:
      • 变换型:取得数据 变换数据 输出数据
      • 事务型:接收一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果
        -面向数据流设计方法的实施要点与设计过程(略)
  • 设计的准则
    • 提高模块独立性
    • 模块规模适中
    • 深度、宽度、扇出和扇入适当
    • 使模块的作用域在该模块的控制域内
    • 应减少模块的接口和界面的复杂性
    • 设计成单入口、单出口模块
    • 设计功能可预测的模块
4.3.3 详细设计
  • 常见的过程设计工具:
    • 图形工具:程序流程图,N-S图,PAD图,HIPO图
    • 判定工具:判定表
    • 语言工具:PDL(伪码)

4.4 软件测试

4.4.1 软件测试的目的和定义
  • 在规定条件下运行系统或构件的过程:在此过程中观察和记录结果,并对系统或构件的某些方面给出评价
  • 软件项目的过程:检测现有状况和所需状况的不同(bug),并评估软件项目的特性
4.4.2 软件测试的准则
  • 所有测试都应追溯到需求
  • 严格执行测试计划,排除测试的随意性
  • 充分注意测试中的群集现象
  • 程序员应避免检查自己的程序
  • 穷举测试不可能
  • 妥善保管相关资料
4.4.3 软件测试方法与技术综述
  • 静态测试
  • 动态测试
  • 白盒测试:结构测试或逻辑驱动测试
    • 逻辑覆盖测试
      • 语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次
      • 基本路径覆盖:执行足够的测试用例,使得程序中所有可能的路径都至少经历一次
      • 判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次
      • 条件覆盖:设计的测试用例保证程序中每个判断的每个条件的可能取值至少执行一次
      • 判断-条件覆盖:设计足够的测试用例,是判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能取值分支至少执行一次
    • 基本路径测试:根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试
  • 黑盒测试:功能测试或数据驱动测试,主要用于软件确认测试
    • 等价类划分法
      • 有效等价类:合理、有意义的输入数据构成的集合
      • 无效等价类:不合理、无意义的输入数据构成的集合
    • 边界值分析法
      • 如果输入条件规定了取值范围或数据个数,则可选择正好等于边界值、刚刚在边界值范围内和刚刚超越边界外的值进行测试
      • 针对规格说明的每个输入条件,使用上述原则
      • 对于有序数列,选择第一个和最后一个作为测试数据
    • 错误推测法:通过直觉和经验推测可能存在的错误,并针对性的编写例子
4.4.4 软件测试的策略
  • 单元测试:对软件设计的最小单位——模块(程序单元)进行正确性检验的测试
    • 模块接口测试——测试通过模块的数据流
    • 局部数据结构测试
    • 重要执行路径的检查
    • 出错处理测试
    • 影响以上各点及其他相关点的边界条件测试
  • 集成测试:测试和组装软件的过程
    • 非增量方式组装:一次性组装
    • 增量方式组装
      • 自顶向下增量方式,自底向上增量方式,混合增量方式
  • 确认测试:确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中确定的各种需求,以及软件配置是否完全、正确
  • 系统测试:评估系统环境下的软件性能

4.5 程序调试

4.5.1 基本概念
  • 程序调试的基本步骤
    • 错误定位
    • 修改设计和代码,以排除错误
    • 进行回归测试,防止引进新的错误
  • 程序调试的原则
    • 确定错误的性质和位置时的注意事项
      • 分析思考与错误征兆有关的信息
      • 避开死胡同
      • 只把调试工具当做辅助手段来使用
      • 避免试探法,最多只能把它当做最后手段
    • 修改错误的原则
      • 在出现错误的地方,很可能还有别的错误
      • 修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身
      • 注意修正一个错误的同时有可能会引入新的错误
      • 修改错误的过程将迫使 人们暂时回到程序设计阶段
      • 修改源代码程序,不要改变目标代码
4.5.2 软件调试方法
  • 强行排错法
  • 回溯法
  • 原因排除法

5. 数据库设计基础

5.1 数据库基本概念

5.1.1 数据、数据库、数据库管理系统
5.1.2 数据库系统的发展
5.1.3 数据库系统的基本特点
5.1.4 数据库系统的内部结构体系

5.2 数据模型

5.2.1 数据库模型的基本概念
5.2.2 E-R模型
5.2.3 层次模型
5.2.4 网状模型
5.2.5 关系模型

5.3 关系代数

5.4 数据库设计与管理

5.4.1 数据库设计概述
5.4.2 数据库设计的需求分析
5.4.3 数据库概念分析
5.4.4 数据库的逻辑设计
5.4.5 数据库的物理设计
5.4.6 数据库管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值