软件工程复习

2023-05-16

第一章:课程概述

1.1 软件危机

1.1.1 计算机软件的四个发展阶段

程序设计阶段、程序系统阶段、软件工程阶段、面向对象阶段

1.1.2 什么是软件危机(考点)

软件危机是指在计算机软件的开发和维护过程种所遇到的一系列严重问题。

1.1.3 软件危机产生时间(考点)

20 世纪60年代

1.1.4 软件危机需要解决的两个问题

①如何快速地开发软件,满足对软件日益增长地需求

②如何维护数量不断膨胀地已有软件

1.1.5 软件危机的具体表现

  • 对软件开发成本和进度的估计不准确;
  • 质量不可靠;
  • 不可维护;
  • 没有适当的文档资料;
  • 软件成本在计算机系统总成本中所占的比例逐年上升。

1.1.6 软件危机的产生原因: (考点)

(1)与软件本身的特点有关。
(2)与软件开发和维护的方法不正确有关。主要原因

1.2 软件工程

1.2.1 什么是软件工程(考点)

软件工程是指采用工程地概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量地软件并有效地维护它。

1.2.2 软件工程目的

实现按预期的进度和经费完成软件生产计划,提高软件的生产率和可靠性

1.2.3 软件工程方法学三要素(考点)

方法: 是指完成软件开发的各项任务的技术方法,既回答”怎么做“的问题

工具: 是指为运用方法而提供的自动或者半自动的软件工程支撑环境

过程: 需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤

1.2.4 软件工程方法学之传统方法学(考点)

采用结构化技术,将任务划分为多个阶段,然后顺序地完成每个阶段地任务,每个阶段地任务相互独立,且前一个阶段是后一个阶段的前提和基础。
缺点:
使用传统方法学开发的软件,维护起来仍然困难
数据与操作分离

传统方法学的三大模型:功能模型(数据流图)、数据模型(E-R图)、行为模型(状态转换图)

1.2.5 软件工程方法学之面向对象方法学(考点)

把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法

面向对象方法学的三大模型: (简答)

是什么?定义是什么?工具是什么?
对象模型表示静态的、结构化的系统的“数据”性质类图
动态模型表示动态的、行为化的系统的“控制”性质状态图
功能模型表示变化的系统的“功能性质”用例图

1.2.6 形式化方法学

是一种基于形式化数学变换的软件开发方法,将系统的规格说明转换为可执行的程序
在这里插入图片描述

1.3 软件生命周期

1.3.1 三个时期,八个阶段(考点)

在这里插入图片描述
制定计划——解决什么问题,目标及其可行性(技术、人员、财力、社会)
需求分析——做什么、验收标准
总体设计——怎么做
详细设计——具体怎么做
程序编写——实现
软件测试——保证软件质量
运行/维护——保证正常而可靠地运用

1.3.2 为什么要进行阶段划分(考点)

把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大,结构复杂和管理复杂的软件开发变的容易控制和管理

1.3.3 软件维护在软件生命周期中占比60%(重点)

在这里插入图片描述

1.4 软件过程

1.4.1 瀑布模型

特点:

  • 阶段间具有顺序性和依赖性
  • 推迟实现的观点:清楚区分逻辑设计和物理设计,尽可能推迟程序的物理实现
  • 质量保证的观点:瀑布模型每个阶段必须先完成规定文档,每个阶段结束前都要对完成的文档进行评审

缺点:(考点)

  • 由文档驱动(缺点也是特点)
  • 不能适用于用户需求变动
    在这里插入图片描述

1.4.4 快速原型模型

以某个软件原型为参照模型的开发方法,叫做原型法。在初步需求分析之后,马上向客户展示一个软件产品原型,对客户进行培训,让客户试用,在试用中收集客户意见,修改原型,再让客户试用,反复循环几次,直到客户确认为止。

1.4.5 螺旋模型(考点)

螺旋模型就是在每个阶段开始之前都增加了风险分析的快速原型模型
在这里插入图片描述

第二章:可行性研究

2.1 可行性研究的任务(考点)

2.1.1 可行性研究的目的

用最小的代价在尽可能短的时间内确定问题是否能够解决,不是解决问题,而是确定问题是否值得去解决。(即找出最优解)

2.1.2 可行性研究的实质

进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

2.1.3 可行性研究的内容

1、首先进一步分析和澄清问题定义,导出系统的逻辑模型;
2、然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案);
3、对每种解法都研究它的可行性,至少应该从三方面研究每种解法的可行性 。

2.1.4 可行性研究的主要方面:

1、技术可行性,使用现有的技术能实现这个系统吗?
2、经济可行性,这个系统的经济效益能超过它的开发成本吗?
3、操作可行性,系统的操作方式在这个用户组织内行得通吗?

2.2 可行性研究过程

  • 复查系统规模和目标
  • 研究目前正在使用的系统
  • 导出新系统的高层逻辑模型
  • 进一步定义问题
    可行性研究的前4个步骤实质上构成一个循环。
  • 导出和评价供选择的解法
  • 推荐行动方针
  • 草拟开发计划
  • 书写文档提交审查
    在这里插入图片描述

2.3 系统流程图

2.3.1 系统流程图概念

系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流图。

2.3.2 系统流程图符号

基本符号:
在这里插入图片描述

2.3.3 举例

某校办工厂有一个库房,存放该厂生产需要的各种零件器材,库房中的各种零件器材的数量及其库存量临界值等数据记录在库存主文件上,当库房中零件器材数量发生变化时,应更改库存文件。若某种零件器材的库存量少于库存临界值,则立即报告采购部门以便订货,规定每天向采购部门送一份采购报告。
在这里插入图片描述

2.4 数据流图(考点)

2.4.1 数据流图概念

数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。

2.4.2 数据流图符号(重点)

在这里插入图片描述
数据源点/终点: 通常是人或部门,可重复表示;
处理: 一个处理框可以代表一系列程序、单个程序或程序的一个模块;
数据存储: 可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等,数据存储是处于静止状态的数据;
数据流: 描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件 ,数据流是处于运动中的数据。

2.4.3 步骤

①画出最概括的系统模型
在这里插入图片描述
②细化,描绘系统的主要功能
在这里插入图片描述
③对系统的主要功能进一步细化
在这里插入图片描述

2.4.4 细化时的注意事项

(1)当进一步分解涉及如何具体的实现一个功能时就不应该再分解了。
(2)当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入输出数据流必须相同。
(3)注意对处理进行编号的方法。

2.5 数据字典

2.5.1 数据字典概念

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

是数据流图和数据字典共同构成系统的逻辑模型。

2.5.2 数据字典的用途

1、数据字典最重要的用途是作为分析阶段的工具;

2、数据字典中包含的每个数据元素的控制信息是很有价值的。很容易估计改变一个数据将产生的影响;

3、数据字典是开发数据库的第一步,而且是很有价值的一步。

2.6 成本/效益分析的方法(考点)

2.6.1 货币的时间价值

通常利用利率的形式表示货币的时间价值。假设年利率为i,如果现存入P元,则n年后可以得到的钱为:

F = P(1 + i)^n
P = F/(1 + i)^n 

2.6.2 投资回收期

通常用投资回收期衡量一项开发工程的价值。所谓投资回收期就是使累计的经济效益等于最初投资所需要的时间。显然投资回收期越短,就能越快获得利润,因此这项工程也就越值得投资。

第三章:需求分析

3.1 分析建模与规格说明

3.1.1 需求分析的任务

需求分析的任务不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。

3.1.2 需求分析过程应该建立3种模型(考点)

数据模型、功能模型、行为模型
在这里插入图片描述

数据字典: 是分析模型的核心,它描述软件使用或产生的所有数据对象。(详见上一章)

实体-联系图: 描绘数据对象及数据对象之间的关系,是用于建立数据模型的图形。

数据流图: 描绘当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能,因此,数据流图是建立功能模型的基础。(详见上一章)

状态转换图(简称为状态图): 指明了作为外部事件结果的系统行为。为此,状态转换图描绘了系统的各种行为模式(称为“状态”)和在不同状态间转换的方式。状态转换图是行为建模的基础。

3.1.3 软件需求规格说明

通过需求分析除了创建分析模型之外,还应该写出软件需求规格说明书,它是需求分析阶段得出的最主要的文档。通常用自然语言完整、准确、具体地描述系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求以及将来可能提出的要求。

3.2 实体联系图(E-R图)(考点)

3.2.1 概念

是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。它描述了从用户角度看到的数据,它反映了用户的现实环境,且与在软件系统中的实现方法无关。

数据模型中包含3种相互关联的信息:

1、数据对象

2、数据对象的属性:定义了数据对象的性质

3、数据对象彼此间相互连接的关系

3.2.2 实体-联系图的符号(重点)

实体(即数据对象),用矩形框表示;
关系,用连接相关实体的菱形框表示;
属性,用椭圆形或圆角矩形表示,并用直线把实体(或关系)与其属性连接起来。

3.2.3 ER图的优点

1、比较接近人的习惯思维方式;

2、用简单的图形符号表达系统分析员对问题域的理解,用户也容易理解,可以作为用户与分析员之间有效的交流工具。

3.2.4 例子

银行储蓄系统的ER图

银行计算机储蓄系统的工作过程大致如下:

储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;
在这里插入图片描述

3.3 数据规范化

3.3.1 数据结构规范化

软件系统经常使用各种长期保存的信息,这些信息通常以一定方式组织并存储在数据库或文件中,为减少数据冗余,避免出现插入异常或删除异常,简化修改数据的过程,通常需要把数据结构规范化。

3.3.2 范式

通常用“范式(normal forms)”定义消除数据冗余的程度。第一范式(1 NF)数据冗余程度最大,第五范式(5 NF)数据冗余程度最小。

范式级别越高,存储同样数据需要分解成更多张表,因此,“存储自身”过程越复杂。

随着范式级别的提高,数据的存储结构与基于问题域的结构间的匹配程度也随之下降,因此,在需求变化时数据的稳定性较差。

范式级别提高则需要访问的表增多,因此性能(速度)将下降。

3.3.3 第一、第二和第三范式的定义

第一范式,每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构。

第二范式,满足第一范式条件,而且每个非关键字属性都由整个关键字决定(而不是由关键字的一部分来决定)。

第三范式,符合第二范式的条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述(即一个非关键字属性值不依赖于另一个非关键字属性值)。

3.4 状态转换图

3.4.1 状态转换图概念

状态转换图:通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。状态图还指明了作为特定事件的结果系统将做哪些动作(例如,处理数据)。

3.4.2 状态

状态: 是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态规定了系统对事件的响应方式。

状态主要有:
1、初态(即初始状态),只能有1个
2、终态(即最终状态),可以有多个
3、中间状态

3.4.3 事件

是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。简而言之,事件就是引起系统做动作或(和)转换状态的控制信息。

3.4.4 符号

初态: 用实心圆表示;

终态: 用一对同心圆(内圆为实心圆)表示;

中间状态: 用圆角矩形表示,分成上、中、下3部分。

1、上面部分-----为状态的名称;

2、中间部分-----为状态变量的名字和值;

3、下面部分-----是活动表。

带箭头的连线: 称为状态转换,箭头指明了转换方向。
在这里插入图片描述

3.4.5 例子

电话系统
在这里插入图片描述

第五章:总体设计

5.1 总体设计的任务

5.1.1 总体设计过程

首先寻找实现目标系统的各种不同的方案;然后分析员从这些供选择的方案中选取若干个合理的方案,从中选出一个最佳方案向用户和使用部门负责人推荐;分析员应该进一步为这个最佳方案设计软件结构,进行必要的数据库设计,确定测试要求并且制定测试计划。

5.2.2 总体设计的主要阶段

  • 系统设计阶段
    从数据流图出发构想完成系统功能的若干种合理的物理方案,并从中选出一个最佳方案

  • 结构设计阶段
    确定程序由哪些模块组成以及这些模块之间的关系

5.2.3 典型的总体设步骤

  • 1. 设想供选择的方案:考虑各种可能的实现方案,力求从中选出最佳方案。

  • 2. 选取合理的方案:为每个合理方案准备:系统流程图、组成系统的物理元素清单、成本/效益分析、实现这个系统的进度计划

  • 3. 推荐最佳方案:综合分析对比各种合理方案的利弊,推荐一个最佳的方案。

  • 4. 功能分解:首先进行结构设计,然后进行过程设计。结构设计确定程序由哪些模块组成,以及这些模块之间的关系;过程设计确定每个模块的处理过程。

  • 5. 设计软件结构

  • 6. 设计数据库

  • 7. 制定测试计划

  • 8. 书写文档

  • 9. 审查和复审

5.2 设计原理

5.2.1 模块化

模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

模块化的作用

  • 采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。
  • 模块化使软件容易测试和调试,因而有助于提高软件的可靠性。
  • 模块化能够提高软件的可修改性。
  • 模块化也有助于软件开发工程的组织管理。

5.2.2 抽象

用自顶向下、由抽象到具体的方式分配控制
软件结构顶层的模块,控制了系统的主要功能并且影响全局;
在软件结构底层的模块,完成对数据的一个具体处理。

5.2.3 逐步求精

逐步求精与抽象是互补的概念,由抽象到具体地构造出软件的的层次结构。

抽象使得设计者能够说明过程和数据,同时却忽略了底层细节。
求精则帮助设计者在设计过程中逐步揭示出底层的细节。

5.2.4 信息隐藏和局部化

信息隐藏:
应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的

局部化:
把一些关系密切的软件元素物理地彼此靠近。(局部化有助于信息隐藏)

5.2.5 模块独立

模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

模块独立的重要性:

  • 有效的模块化(即具有独立的模块)的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。

  • 独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够“插入”模块。

5.2.6 模块独立的衡量标准(考点)

1、耦合:

耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单;

耦合性: 低 ----------------------> 高
非直接耦合数据耦合标记耦合控制耦合外部耦合公共耦合内容耦合

2、内聚:

内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。

内聚性: 高 ----------------------> 低
功能内聚信息内聚通信内聚过程内聚时间内聚逻辑内聚偶然内聚

5.3 面向数据流的设计方法(考点)

5.3.1 总述

面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。

因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。

5.3.2 概念(重点)

面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。

信息流有两种类型:

1、变换流

信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
在这里插入图片描述
2、事务流

数据沿输入通路到达一个处理T,T根据输入数据的类型在若干个动作序列中选出一个来执行。处理T称为事务中心,它完成下述任务:

■接收输入数据;

■分析每个事务以确定它的类型;

■根据事务类型选取一条活动通路。
在这里插入图片描述

3、设计过程
在这里插入图片描述

第六章:详细设计

6.1 详细设计的任务

详细设计阶段的根本目标是经过这个阶段的设计工作得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。

结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。

6.2 结构程序设计

如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

尽可能少用GO TO语句的程序设计方法,最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句

6.3 过程设计的工具

6.3.1 图形工具(重点)

将过程细节用图形来表示,在图中,逻辑结构用具体的图形表示。

  • 程序流程图(Program Flow Chart)
  • 盒图(Box Diagram)
  • PAD图(Problem Analysis Diagram)

6.3.2 列表工具

利用表来表示过程细节,表列出了各种操作和相应的条件。

  • 判定表&判定树(Decision Table & Tree)表示复杂的条件(input)组合与应做动作(output)之间的对应关系。

6.3.3 语言工具

用类语言(伪码)表示过程的细节,很接近编程语言。

  • PDL(Program Design Language):又称Pseudo code

6.3.4 程序流程图

在这里插入图片描述
优点:直观、容易掌握,且历史悠久,使用广泛。
缺点:对于提高大型系统的可理解性作用甚微;不易表示数据结构;转移控制太方便。
趋势:使用越来越少。

6.6.5 盒图(考点)

在这里插入图片描述
特点:

  • 没有箭头,不允许随意转移控制。
  • 每个矩形框(Case中条件取值例外)都是一个功能域,结构表示明确。
  • 局部及全程数据的作用域易见。
  • 易表现嵌套关系以及模块的层次结构。

根据代码画盒图
在这里插入图片描述在这里插入图片描述

6.6.6 PAD图

用二维树形结构的图来表示程序的控制流
在这里插入图片描述

6.4 程序复杂度的定量度量(考点,大题)

6.4.1 流图的定义

McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。

所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。

6.4.2 流图的表示:

结点: 用圆表示,一个圆代表一条或多条语句。

边: 箭头线称为边,代表控制流。在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句。

区域: 由边和结点围成的面积称为区域,包括图外部未被围起来的区域。
在这里插入图片描述

6.4.3 映射方法(如何绘制流图):(重点)

任何方法表示的过程设计结果,都可以翻译成流图。

对于顺序结构, 一个顺序处理序列和下一个选择或循环的开始语句,可以映射成流图中的一个结点。
在这里插入图片描述
对于选择结构, 开始语句映射成一个结点;两条分支至少各映射成一个结点;结束映射成一个结点。
在这里插入图片描述

对于循环结构, 开始和结束语句各映射成一个结点。
在这里插入图片描述
例:
程序:

void func(int x,int y){ //画图时,不需要考虑此行
    while(x>0){ //1
    	int sum = x+y; //2
        if(sum>1){ //3
            x--; //4
            y--; //5
        }else{
            if(sum<-1){ //6
                a-=2; //7
            }else{
                a-=4; //8
            } //9
        } // end of if(sum>1) //10
    }    // end of while
    x = x+y; //11
} // end of func //画图时,不需要考虑此行

程序对应的程序流程图:
img
程序对应的流图:
img

6.4.4 环形复杂度的计算方法(重点)

以下三种方法任选一种(建议第三种):

  1. 流图中线性无关的区域数等于环形复杂度。
  2. 流图G的环形复杂度 V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
  3. 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点(选择结构)的数目。

6.4.5 线性独立路径的基本集合(重点,难点,本来在第七章的)

所谓独立路径是指至少引入程序中的一个新的处理语句集合或一个新条件的路径,用流图的术语描述就是:独立路径至少包含之前定义的路径没有使用过的边。

对于上面的例子,求出环形复杂度为4,即有4条独立路径

路径1:1->11

路径2:1->2->3->4->5->10->1->…

路径3:1->2->3->6->7->9->10->1->…

路径4:1->2->3->6->8->9->10->1->…

注:(…)表示可以后接通过该控制结构的其余部分的任意路径,如路径2可以后接路径1也可以后接路径2。

第七章:实现

7.1 确认测试

7.1.1 测试方法(考点)

  • 黑盒测试
    把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程,是在程序接口进行的测试即黑盒是根据程序外部特征进行测试。
  • 白盒测试
    按照程序内部的逻辑来测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。

7.1.2 测试阶段工作步骤(考点)

  • 模块测试: 检验每个模块能否单独工作.

  • 子系统测试:把经过模块测试的模块放在一起形成一个子系统来测试,主要测试模块间接口

  • 系统测试: 把经过测试的子系统装配成一个完整的系统来测试

  • 验收测试:让用户对软件进行测试,并重新执行已经做过的测试的某个子集

7.2 白盒测试

7.2.1 逻辑覆盖(考点)

有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。

从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:
在这里插入图片描述

7.2.2 控制结构测试

1. 基本路径测试

首先计算程序的环形复杂度,以该复杂度为指南定义执行路径的基本集合;

从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。

2. 循环测试

循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。

在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。

7.3 黑盒测试

7.3.1 等价划分

等价划分是一种黑盒测试技术,把程序的输入域划分成若干个数据类,据此导出测试用例。 每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。

等价类划分的启发式规则

  • 如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效的等价类(输入值小于最小值或大于最大值);

  • 如果规定了输入数据的个数,则类似地也可划分出一个有效的等价类和两个无效的等价类;

  • 如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任一个不允许的输入值);

  • 如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从各种不同角度违反规则);

  • 如果规定了输入数据为整型,则可以划分出正整数、零和负整数等3个有效类;

  • 如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。

7.3.2 边界值分析

经验表明,处理边界情况时程序最容易发生错误。例如,许多程序错误出现在下标、纯量、数据结构和循环等等的边界附近。

使用边界值分析方法设计测试方案首先应该确定边界情况。选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。

通常设计测试方案时总是联合使用等价划分和边界值分析两种技术。

7.3.3 错误推测

不同类型不同特点的程序通常又有一些特殊的容易出错的情况。因此必须依靠测试人员的经验和直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案。

错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。

第八章 软件维护

8.1 什么是软件维护

8.1.1 软件维护的定义(考点)

所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

8.1.2 软件维护的特点

软件维护的成本是开发成本的4倍左右

8.2 软件维护过程

8.2.1 软件维护的活动(考点)

  • 改正性维护:诊断和改正错误的过程,占比约为17%-21%
  • 适应性维护:适应环境变换而进行的修改软件的活动,占比约18%-25%
  • 完善性维护:新增功能或者修改已有功能所进行的维护,占比约50%-66%
  • 预防性维护:主动地对软件进行重新设计、编码和测试,占比约4%

只有预防性维护是主动地

8.2.2 维护的类别(考点)

结构化维护和非结构化维护
区别:有无良好的方法学开发软件

8.2.3 软件维护的因素与维护活动的侧重点

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件工程复习 的相关文章

  • ios UILabel显示html文本

    let attrContent 61 try NSAttributedString data htmlContent options NSDocumentTypeDocumentAttribute NSHTMLTextDocumentTyp
  • 转行的辛苦

    我是2004年毕业的 xff0c 学的专业是市场营销 xff0c 毕业后来到深圳 xff0c 换了很多工作 xff0c 一直都无法找到令自己满意的工作 因为我非常喜欢计算机 xff0c 从中学到大学 xff0c 一直是班级里公认的计算机高手
  • 内存优化 和 性能优化 的总结

    从 检查内存 xff0c 减少使用 xff0c 复用 xff0c 以及及时释放几个维度去考虑 1 检查 可以ddms查看内存使用情况 xff0c 可以使用 adb shell dumpsys meminfo 查看 xff0c 也可以使用 l
  • ubuntu16.04 安装gnome经典桌面

    一直比较喜欢旧版本Ubuntu的Gnome风格的菜单栏 xff0c 在Ubuntu16 0 4中可以执行指令 xff1a sudo apt get install gnome session flashback 安装完成 xff0c 注销一
  • Gson在序列化反序列化中的TypeAdapter

    1 package waf json adatpter 2 3 import java io IOException 4 import java util ArrayList 5 import java util List 6 import
  • 技术泡妹子二:篡改百度首页,惊呆女神

    大多数网民上网的入口都是先打开百度 xff0c 然后再搜索xxx 进入 xff0c 为了给女神惊喜 xff0c 决定篡改百度首页让女神惊呆 xff0c 当然不是黑了百度 xff0c 目前没这个实力 xff0c 但是我们可以修改host文件
  • VC多线程中控制界面控件的几种方法

    转 http hi baidu com magicyang87 blog item 23bbf2fd72d6b81108244d73 html 为了保证界面的用户体验经常要把数据处理等放到子线程中进行 xff0c 然后把结果更新到主界面 x
  • 一次性打包学透 Spring

    不知从何时开始 xff0c Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中 xff0c 很多 Java 开发者从工作的第一天开始就在使用 Spring Framework xff0c 甚至有人调侃 不会 Sprin
  • 关于产品的一些思考——写在前面的话

    自己是一个十足的Geek xff0c 喜欢使用各种新奇的东西 xff0c 包括软件 硬件 技术 xff0c 又因为自己一点点轻微的强迫症和完美主义 xff0c 在这个过程中总会有自己的一些思考 xff0c 又因为技术出身 xff0c 总会考
  • mybatis映射文件mapper.xml的写法。

    在学习mybatis的时候我们通常会在映射文件这样写 xff1a lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt DOCTYPE mapper PUBLIC 34 myba
  • layer的弹出层的简单的例子

    如果不了级的基本的清楚官网查看api网址为 http layer layui com 我用的是iframe 如果是iframe层 layer open type 2 content 39 http sentsin com 39 这里cont
  • 左链接Column 'id' in field list is ambiguous

    如题错误如左链接Column 39 id 39 in field list is ambiguous 今天在写sm的时候 xff0c 用到两个表的联合查询出现的如下的错误 xff0c 仔细查找才发现原来两个表的id重复了 xff0c use
  • maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...

    1 我的项目结构是一个父项目 xff0c 多个子项目目录如下 xff1a 2 我这里就举个例子 xff0c 所以应用的也就是core和domain这两个项目 3 两个项目都继承父项目 4 在模块中domain依赖于core xff0c 在c
  • EOS的CPU危机:BM的租赁模式或只是乌托邦

    摘要 xff1a 继RAM内存之后 xff0c EOS的CPU危机也爆发了 昨日 xff0c 由于BetDice和EOSBET为了保证游戏的运行 xff0c 占用了过多的主网CPU xff0c 导致用户资源紧张 xff0c 甚至无法转账 昔
  • 有关Shiro中Principal的使用

    1 定义 principal代表什么那 xff1f 如果阅读官方文档或者源码你会得到如下的定义 xff1a 解释 xff1a 1 xff09 可以是uuid 2 xff09 数据库中的主键 3 xff09 LDAP UUID或静态DN 4
  • 关于shiro的 subject.getPrincipal()方法

    1 说明 上一篇文章说明了 principal xff0c 而subject getPrincipal 是用来干嘛的 xff0c 他就是来获取你存储的principal xff0c 内部是怎么获取的那 xff0c 多个principal怎么
  • CentOS7 64位安装solr7.2.0

    声明 xff1a 本人为学习solr的新手 xff0c 如编写过程中有部队的地方还请各位大佬指正 本文为原创 xff0c 如要转载请注明出处 你能学到 xff1a 1 linux上solr的安装部署 xff0c 官方给出的运行方式 2 添加
  • 阿里巴巴20121009 研发/算法工程师 笔试试题【修正】

    第19题 a i 在排序后的位置是 i k i 43 k xff0c a i 43 2k 在排序后的位置是 i 43 k i 43 3k xff0c 必然有a i lt 61 a i 43 2k 所以数组a里实际上有2k个各自有序的 交错的

随机推荐

  • Jetpakc LiveData ViewMode详解

    前言 xff1a 本文不定时更新 xff0c 有问题欢迎在评论区提出 最近更新时间 xff1a 2022 06 21 介绍 在2017年 xff0c 那时 xff0c 观察者模式有效的简化了开发 xff0c 但是诸如RxJava一类的库有一
  • ARM64 Linux kernel + busybox rootFS via NFS over QEMU with GDB

    由于条件所限 xff0c 一般选择软件做前期模拟 xff0c 这里做一些ARM 64 Linux kernel模拟运行环境搭建工作的总结 xff0c 记录以便后用 本文只涉及kernel 43 busybox rootFS via NFS
  • 寒假学习心得--从0开始学破解

    寒假学习心得 从0开始学破解 写给和我一样将要接触或者才接触破解 的朋友们 前提 你必须得真正喜欢 她 一 工欲善其事 必先利其器 1 找一个中文版的OD PEID 记得就OD就有咱PYG版的某牛人强化版的等等等等 找一个合适的工具 干起事
  • 常用的“密码重置”代码

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • ORACLE多表查询优化

    转自某地 对作者很愧疚 不晓得地址了 ORACLE 多表查询优化 这里提供的是执行性能的优化 而不是后台数据库优化器资料 参考数据库开发性能方面的各种问题 收集了一些优化方案统计如下 当然 象索引等优化方案太过简单就不列入了 嘿嘿 执行路径
  • Word to PDF Converter v3.0 算法分析及注册机

    Word to PDF Converter v3 0算法分析及注册机 详细过程 1 xff0c 主程序在C Program Files doc2pdf DOC2PDF dll xff0c PEID查壳为ASProtect 1 23 RC1
  • Debian11连不上网络问题

    有时候可以连上 xff0c 有时候就连不上 连不上的时候 xff0c 使用ifconfig命令 xff0c 只能看到回环接口 xff0c 看不到分配的网络IP地址 最后终于解决了 xff0c 记录一下 xff0c 以防之后出现同样的问题 1
  • 安全策略调整步骤

    1 修改防火墙 xff0c 保留22 SSHD 8081 APACHE 80 关闭端口443 HTTPS 3306 MYSQL 8080 8088 53 123 2 针对PHP的BUG和安全漏洞 xff0c 只有升级版本一途 xff0c 经
  • 获取微信openid(或昵称头像)的授权登录及其代理

    lt php 本页用于微信授权登录及其代理 64 version V2 0 64 author ty1921 lt ty1921 64 gmail com gt 64 param backurl 传get参数backurl xff0c 则授
  • 常用的PHP文件头和HTML5文件头(含移动端)

    lt php PHP Header Created by ty1921 64 gmail com Ver V1 Date 2017 8 18 1 session session start 2 display errors ini set
  • VB+PHP实现在线修改Windows服务器的配置文件

    本文仅供记录 存档备案用 用途 xff1a 某电话转接系统 xff0c 需要每天修改配置文件 并重启服务端程序 原理 xff1a WEB用于展示修改界面 xff0c 提交 保存配置文件的相关数据 VB端用于定时轮训WEB上保存的数据 xff
  • 按键精灵的5级开发认证,笔试题参考

    4题是抄的 xff0c 只是为了过级 最后得93分 xff0c 可能代码还是不够最优 xff0c 有看出的大大希望能不吝指点 1 写一个脚本 xff0c 要求启动时 xff0c 记录 xff08 录制 xff09 当前鼠标的移动轨迹 xff
  • Linux for Ubuntu用gdebi安装deb文件

    在bantu中安装deb文件有时很不方便 xff0c 通常默认用的安装器并效果并不理想 xff0c 有时用命令吧 xff0c 太多又繁琐 所以有个软件叫GDebi xff0c 可以更加有效的帮助安装deb 首先安装gdebi程序 xff0c
  • Xshell连接后又断开问题(Disconnected from remote host)

    Last login Fri Nov 1 12 36 08 2019 from 10 0 1 25 Connection closed by foreign host Disconnected from remote host 20 0 0
  • ubuntu-16.04.6安装教程

    下载Ubuntu16 04 xff08 1 xff09 下载地址 xff1a http releases ubuntu com 16 04 记得要下载iso文件如 ubuntu 16 04 desktop amd64 iso xff0c 3
  • Hive安装详细步骤

    一 下载hive 下载hive 地址 xff1a http mirror bit edu cn apache hive 二 安装mysql 执行以下几个命令安装8 0版本mysql 1 下载MySQLyum源 xff08 8 0版本的 xf
  • LL(1)文法的语法分析java实现

    java代码如下 xff1a package 文法分析器 import java io BufferedReader import java io FileInputStream import java io InputStreamRead
  • CSDN,我的良师益友

    鲁迅曾说过 xff1a 不是缺乏天才 xff0c 而是缺乏培养天才的土壤 对于中国的 IT 行业来说 xff0c 从来不缺乏技术英雄 xff0c 缺少的是铸就技术英雄的平台 而 CSDN 就给了我们这样一个平台和机会 xff0c 所以我们是
  • 构造中小型园区网实训案例

    构造中小型园区网实训案例 一 实验工具与实验拓扑规划1 实验工具2 实验拓扑 二 需求分析三 数据规划四 实施步骤步骤1 xff1a 配置所有终端步骤2 xff1a 配置所有接入层交换机步骤3 xff1a 配置网关路由器AR1 公网路由器A
  • 软件工程复习

    第一章 xff1a 课程概述 1 1 软件危机 1 1 1 计算机软件的四个发展阶段 程序设计阶段 程序系统阶段 软件工程阶段 面向对象阶段 1 1 2 什么是软件危机 xff08 考点 xff09 软件危机是指在计算机软件的开发和维护过程