跳转至

完整版的复习内容

# 软件工程复习

第一章

1.软件危机

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

典型表现:(1) 对软件开发成本和进度的估计常常很不准确。(2) 用户对“已完成的”软件系统不满意的现象经常发生。(3) 软件产品的质量往往靠不住。(4) 软件常常是不可维护的。(5) 软件通常没有适当的文档资料。(6) 软件成本在计算机系统总成本中所占的比例逐年上升。(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

**产生原因:**一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。

2.软件工程

**定义:**概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

(软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。)

本质特性:(1) 软件工程关注于大型程序的构造(2) 软件工程的中心课题是控制复杂性(3) 软件经常变化(4) 开发软件的效率非常重要(5) 和谐地合作是开发软件的关键(6) 软件必须有效地支持它的用户(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。基本原理:(1) 用分阶段的生命周期计划严格管理(2) 坚持进行阶段评审(3) 实行严格的产品控制(4) 采用现代程序设计技术(5) 结果应能清楚地审查(6) 开发小组的人员应该少而精(7) 承认不断改进软件工程实践的必要性

3.软件工程方法学的3要素:

方法、工具和过程

4.传统方法学的定义

传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务,从对问题的抽象逻辑分析开始,一个阶段一个阶段地进行开发。

5.面向对象方法学的基本概念(定义和要点)

**定义:**与传统方法相反,面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。

要点:(1) 面向对象程序是由对象组成的。

(2)把所有对象都划分成类(class)。(3)按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。(4) 对象彼此间仅能通过发送消息互相联系。

6.软件生命周期的定义与组成(三时期,八阶段)

**定义:**一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期。通常把软件经历的这个漫长的时期称为生命周期。

**组成:**软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。

软件定义时期:问题定义、可行性研究和需求分析。开发时期:总体设计,详细设计,编码和单元测试,综合测试。维护时期:软件维护

7.软件过程的定义

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常使用生命周期模型简洁地描述软件过程。

8.瀑布、快速原型、增量、螺旋、喷泉过程模型的分析理解(各自特点、比较等)。

①瀑布模型(历史悠久、广为人知)

特点:(1)阶段间具有顺序性和依赖性 (2)推

迟实现的观点(3)质量保证的观点

优点:可强迫开发人员采用规范的方法(例如,结构化技术); 严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:传统的瀑布模型过于理想化。瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。

②快速原型模型

所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

特点:(1)快速原型的本质是“快速”。(2)加速软件开发过程,节约软件开发成本。(3)一旦需求确定了,原型将被抛弃(4)原型通常仅仅是真实系统的一个部分或者是一个模型

优点:投资少,见效快,节约资源,是较好的沟通桥梁

③**增量模型**

增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。

特点:(1)第一个增量构件往往实现软件的基本需求,提供最核心的功能。(2)第二个增量构件提供更完善的编辑和文档生成功能(3)第三个增量构件实现拼写和语法检查功能(4)第四个增量构件完成高级的页面排版功能

优点:(1)能在较短时间内向用户提交可完成部分工作的产品(2)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,而减少一个全新的软件可能给客户组织带来的冲击。 (3)第三个增量构件实现拼写和语法检查功

(4)第四个增量构件完成高级的页面排版功能

缺点:要求下一轮新增的功能能够无缝集成到上一轮系统中去,如果整体结构设计不当,则有可能导致整个软件的结构变差。

④**螺旋模型**

构建原型是一种能使某些类型的风险降至最低的方法。螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。即在每个阶段之前都增加了风险分析过程的快速原型模型。

螺旋模型主要适用于内部开发的大规模软件项目。螺旋模型的主要优势在于,它是风险驱动的,但是,这也可能是它的一个弱点。

优点:有利于已有软件的重用,也有助于把软件

质量作为软件开发的一个重要目标;减少了过多

测试(浪费资金)或测试不足(产品故障多)所

带来的风险;更重要的是,在螺旋模型中维护只

是模型的另一个周期,在维护和开发之间并没有

本质区别。

⑤**喷泉模型**

“喷泉”这个词体现了面向对象软件开发过程迭代、无缝以及易维护的特性。

为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程作为总目标。

第二章

1.可行性研究的目的、内容与步骤;

**目的:**①用最小的代价在尽可能短的时间内确定

问题是否能够解决。(能不能做)②目的不是解

决问题,而是确定问题是否值得去解决。(值不

值做)

内容:(1)技术可行性(2)经济可行性(3)

操作可行性。

**任务:**可行性研究最根本的任务是

对以后的行动方针提出建议。

步骤:(1)复查系统规模和目标(2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型(4)进一步定义问题(5)导出和评价供选择的解法(6)推荐行动方针(7)草拟开发计划(8)书写文档提交审查

2.系统流程图的分析及应用(符号识别,根据事实绘出图形的方法与技巧等)

系统流程图是概括地描绘物理系统的传统工具;表达的是数据在系统各部件之间流动的情况;它是物理数据流图图

3.数据流图的分析及应用(符号识别,根据事实绘出图形的方法与技巧等)

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换;没有任何具体的物理部件;是系统逻辑功能的图形表示;只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能。

数据流图中处理并不一定是一个程序;一个数据存储也并不等同于一个文件;数据存储(静态)和数据流(动态)都是数据,仅仅所处的状态不同;基本要点是描绘“做什么”而不考虑“怎样做”。

数据流图中如果代表同一个事物的同样符号在图中出现在n个地方,则在这个符号的一个角上画(n-1)条短斜线做标记。

画数据流图的基本目的是利用它作为交流信息的工具。另一个主要用途是作为分析和设计的工具。基本符号的含义。附加符号的含义

4.数据字典的定义、内容、用途以及与数据流图的关系

**定义:**关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合,和数据字典共同构成系统的逻辑模型。

内容:(1) 数据流(2) 数据流分量(即数据元素)(3) 数据存储(4) 处理

**用途:**作为分析阶段的工具。

**关系:**数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。

5.成本/效益分析的方法与技术(代码行技术、任务分解技术、货币的时间价值、投资回收期、纯收入、投资回报率的概念及应用价值等)

(1)成本估计

①代码行技术:是比较简单的定量估算方法,它把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。②任务分解技术:这种方法首先把软件开发工程分解为若干个相对独立的任务。再分别估计每个单独的开发任务的成本,最后累加起来得出软件开发工程的总成本。③自动估计成本技术:采用自动估计成本的软件工具可以减轻人的劳动,并且使得估计的结果更客观。

(2)成本/效益分析的方法

①货币的时间价值:通常用利率的形式表示货币的时间价值。②投资回收期:使累计的经济效益等于最初投资所需要的时间。③纯收入:在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。④投资回收率:用它衡量投资效益的大小,并且可以把它和年利率相比较。

第三章

1.需求分析的基本任务及任务内容

**基本任务:**准确地回答“系统必须做什么?”这个问题,仅仅是确定系统必须完成哪些工作

任务内容:(1)确定对系统的综合要求: 功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求(说明软件系统不应该做什么)、 将来可能提出的要求(2)分析系统的数据要求(3)导出系统的逻辑模型:常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型(4)修正系统开发计划

2.情景分析的定义

情景分析就是对用户将来使用目标系统解决某个具体问题的方法和结果进行分析。

3.结构化分析方法(SA)定义

结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。

4.简易的应用规格说明技术的定义

面向团队的需求收集法

5.快速原型的定义和特性

**定义:**快速建立起来的旨在演示目标系统主要功能的可运行的程序;**特性:**快速、易修改

6.需求分析过程建模(数据、功能行为模型)的内容

**数据模型:**用于建立数据模型的图形——实体-联系图(描绘数据对象及数据对象之间的关系)

**功能模型:**建立功能模型的基础——数据流图(描绘当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能)

**行为模型:**行为建模的基础——状态转换图(简称为状态图,描绘了系统的各种行为状态和在不同状态间转换的方式)

7.ER图、状态转换图的概念的理解及绘制

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

包含3种相互关联的信息:(1)数据对象:可以由一组属性来定义的实体(2)数据对象的属性:定义了数据对象的性质(3)数据对象彼此间相互连接的关系:一对一联系(1;1)、一对多联系(1;N)、多对多联系(M;N)。**绘制:**用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体(或关系)的属性,并用直线把实体(或关系)与其属性连接起来。

②状态转换图:通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。

满足第3条分析准则:(1)状态:任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式,规定了系统对事件的响应方式。(2)事件:是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象,就是引起系统做动作或(和)转换状态的控制信息。(3)符号:在状态图中,初态用实心圆表示,终态用一对同心圆(内圆为实心圆)表示。

8.层次方框图的概念及应用。

层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。

应用:描绘一家计算机公司全部产品的数据结构

第四章

1.形式化方法的定义、优点和应用准则

**定义:**是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。

优点:(1)能够简洁准确地描述物理现象、对象或动作的结果,(2)可以在不同的软件工程活动之间平滑地过渡。(3)提供了高层确认的手段

应用准则:(1)应该选用适当的表示方法(2)应该形式化,但不要过分形式化(3)应该估算成本(4)应该有形式化方法顾问随时提供咨询(5)不应该放弃传统的开发方法(6)应该建立详尽的文档(7)不应该放弃质量标准(8)不应该盲目依赖形式化方法(9)应该测试、测试再测试(10)应该重用

2.非形式化方法定义

用自然语言描述需求规格说明,是典型的非形式化方法。

3.半形式化方法的定义

用数据流图或实体-联系图建立模型,是典型的半形式化方法。

第五章

1.总体设计的基本目的及相关概念

总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。

2.总体设计过程的组成

(1)系统设计阶段:确定系统的具体实现方案

(2)结构设计阶段:确定软件结构

3.模块、模块化、抽象、逐步求精、信息隐藏原理的定义

**模块:**由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。是构成程序的基本构件。**模块化:**把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能。把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。**抽象:**把这些相似的方面集中和概括起来,暂时忽略它们之间的差异;或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。**逐步求精:**为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。**信息隐藏原理:**应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

4.模块独立性的定义和必要性

定义:**模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。**必要性:(1)有效的模块化(即具有独立的模块)的软件比较容易开发出来。(2)独立的模块比较容易测试和维护

5.耦合与内聚的定义与区别

**耦合定义:**是对一个软件结构内不同模块之间互连程度的度量。**内聚定义:**标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。**区别:**耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。在软件设计中应该追求松耦合、高内聚。

6.五种耦合的区别

**数据耦合:**两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。

**控制耦合(菜单):**传递的信息中有控制信息

**特征耦合w(数组、指针):**当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时出现

**公共环境耦合(全局变量、局部变量):**当两个或多个模块通过一个公共数据环境相互作用时

**内容耦合:**出现下列情况之一,一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口(这意味着一个模块有几种功能)。

尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。

7.七种内聚的区别

偶然内聚:一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的(长方形和圆的面积程序)

逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类,把几种相关的功能组合在一起(长方形和三角形的面积程序)

时间内聚:一个模块包含的任务必须在同一段时间内执行

过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行(输入、处理、输出)

通信内聚:模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据

顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)(圆面积—>圆柱面积)

功能内聚:模块内所有处理元素属于一个整体,完成一个单一的功能

8.软件总体设计的启发规则

(1)改进软件结构提高模块独立性(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应适当:深度表示软件结构中控制的层数, 宽度是软件结构内同一个层次上的模块总数的最大值,扇出是一个模块直接控制(调用)的模块数目,扇入表明有多少个上级模块直接调用它(4)模块的作用域应该在控制域之内:模块的作用域定义为受该模块内一个判定影响的所有模块的集合。模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。(5)力争降低模块接口的复杂程度(6)设计单入口单出口的模块(7)模块功能应该可以预测

9.HIPO图

HIPO图是“层次图加输入/处理/输出图”的英文缩写,由两部分组成:层次图(H图)和IPO图,层次图给出程序的层次关系,IPO图为程序各部分提供具体的工作细节。

层次图 (H图) 表明各个功能的隶属关系。它是自顶向下逐层分解得到的。

IPO图为层次图中每一功能框详细地指明输入(I)、处理(P)及输出(O)。

10.结构化设计方法(SD)、面向数据流的设计方法(变换流与事务流的定义,变换分析与事务分析模式及分析步骤)

面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。

变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。(不一定满足事务流)

事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在**若干(x>=2)**个动作序列中**选**出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。(满足变换流,一种特殊形式)

变换分析:(数据流图—>软件结构)

分析步骤:(一)变换中心求取

  1. 物理输入、输出确定;(2)逻辑输入、输出确定;(3)变换中心确定;

(二)逐层分解(1)输入分层:输入(I)、变换(P);(2)输出分层:变换(P)、输出;(3)变换分层:根据变换(P)分解。

事务分析:在数据流具有明显的事务特点时,也就是有一个明显的“发射中心”(事务中心)时,还是以采用事务分析方法为宜。

事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同。

第六章

1.详细设计阶段的根本目标与任务

根本目标:确定应该怎样具体地实现所要求的系统。任务:不是具体地编写程序,而是要设计出程序的“蓝图”(程序流程图),以后程序员将根据这个蓝图写出实际的程序代码。

2.结构程序设计SP的定义(经典、扩展、修正)

**经典:**如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。(如果只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这3种基本控制结构,则称为经典的结构程序设计)

**扩展:**如果除了上述3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构,则称为扩展的结构程序设计

**修正:**如果再加上允许使用LEAVE(或BREAK)结构,则称为修正的结构程序设计。

3.过程设计工具的分析及应用(程序流程图、盒图或N-S图、PAD图、PDL的相互转换、判定表与判定树的绘制)

**程序流程图:**又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法,然而它也是用得最混乱的一种方法。

**盒图或N-S图:**出于要有一种不允许违背结构程序设计精神的图形工具的考虑。

**PAD图:**即问题分析图

优点:(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。(2)PAD图所描绘的程序结构十分清晰。(PAD图中竖线的总条数就是程序的层次数)(3)用PAD图表现程序逻辑,易读、易懂、易记。(4)容易将PAD图转换成高级语言源程序(5)即可用于表示程序逻辑,也可用于描绘数据结构。(6)PAD图的符号支持自顶向下、逐步求精方法的使用。

**判定表:**能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

**判定树:**判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。优点在于,它的形式简单到不需任何说明,一眼就可以看出其含义,因此易于掌握和使用。

PDL(过程设计语言、伪码)相互转换

4.McCabe方法及流图的绘制

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

在流图中用圆表示结点,一个圆代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。

在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句(实际上相当于一个空语句,汇点情况)。

5.Jackson图及Jackson方法

Jackson图:**在描绘程序结构时,一个方框也并不(一定)代表一个模块,通常一个方框只代表几个语句。Jackson图表现的是组成关系,一个方框中包括的操作**仅仅由**它**下层框**中的**那些操作组成

(1)顺序结构:**数据由一个或多个数据元素组成,每个元素按确定次序出现一次。(2)选择结构:**数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个 **(3)重复结构(循环):**数据根据使用时的条件由一个数据元素出现零次或多次构成

**Jackson方法:**由下述5个步骤组成:(1) 分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。(2) 找出输入数据结构和输出数据结构中有对应关系的数据单元。(3) 用3条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图:(4) 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。(5) 用伪码表示程序。

第七章 实现

1.软件实现的定义

通常把编码和测试统称为实现。

2.软件测试的定义与准则

**定义:**为了发现程序中的错误而执行程序的过程(1) 测试是为了发现程序中的错误而执行程序的过程;(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3) 成功的测试是发现了至今为止尚未发现的错误的测试。

准则:(1)所有测试都应该能追溯到用户需求 (2)应该远在测试开始之前就制定出测试计划(3)把Pareto原理应用到软件测试中(4)应该从“小规模”测试开始,并逐步进行“大规模”测试(5)穷举测试是不可能的(6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作

3.Pareto原理

测试发现的错误中的80%很可能是由程序中20%的模块造成的

4.黑盒测试法和白盒测试法的定义与比较

**黑盒测试法(功能测试):**①已知产品应该具有的功能,通过测试来检验是否每个功能都能正常使用 ②把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程,在程序接口进行测试

**白盒测试法(结构测试):**①知道产品的内部工作过程,通过测试来检验产品内部动作是否按照规格说明书的规定正常进行 ②可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。

5.穷举测试的理解

所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试。

6.软件配置、测试配置、测试方案、测试用例的定义及理解

软件配置:(包括需求说明书、设计说明书和源程序清单等)软件过程的输出信息可以分为3类:

①计算机程序(源代码和可执行程序)②描述计算机程序的文档(供技术人员或用户使用)(ER图、数据流图等) ③数据(程序内包含的或在程序外的)。上述这些项组成了在软件过程中产生的全部信息,我们把它们统称为软件配置,而这些项就是软件配置项。

**测试用例:**测试时使用的输入数据(测试数据和预期的输出结果)**测试方案:**不仅仅是测试时使用的输入数据(称为测试用例),还应该包括每组输入数据预定要检验的功能,以及每组输入数据预期应该得到的正确输出**测试配置:**包括测试计划和测试方案

7.单元测试(模块测试)的定义及测试重点

**定义:**模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。单元测试集中检测软件设计的最小单元——模块。主要使用白盒测试技术,而且对多个模块的测试可以并行地进行。

测试重点:(1)模块接口(2)局部数据结构(3)重要的执行通路(4)出错处理通路(5)边界条件

8.计算机单元测试方法

模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。

9.集成测试的定义与特点

**定义:**集成测试是测试和组装软件的系统化技术。

**特点:**主要目标是发现与接口有关的问题(系统测试与此类似)

10.非渐增式测试与渐增式测试的区别 (集成测试)

**非渐增式测试:**先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序(装机、技术成熟)**渐增式测试:**把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。

11.自顶向下集成与自底向上集成策略的比较(渐增式测试)

**自顶向下集成:**从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。使用深度优先或使用宽度优先策略**自底向上集成:**从“原子”模块(即在软件结构最低层的模块)开始组装和测试。(因为是从底部向上结合模块,总能得到所需的下层模块处理功能,所以不需要存根程序。)

自顶向下**优点**:不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且能在早期发现上层模块的接口错误。缺点:是需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。

自底向上测试方法的优缺点与自顶向下测试方法的优缺点刚好相反。

12.回归测试的定义

重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。(全部或部分地重复以前做过的测试)

13.确认测试的定义与理解

确认测试也称为验收测试,它的目标是验证软件的有效性。通常使用黑盒测试法。

软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。

14.Alpha测试与Beta测试的区别

Alpha测试由用户在开发者的场所进行, Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场

15.逻辑覆盖技术(语句、判定、条件、路径、判定/条件、条件组合覆盖的定义、分析及比较)

逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。

**语句:**使被测程序中每个语句至少执行一次**判定:**每个判定的每个分支都至少执行一次。**条件:**使判定表达式中的每个条件都取到各种可能的结果。**判定/条件:**既满足判定也满足条件。**条件组合:**使得每个判定表达式中条件的各种可能组合都至少出现一次。**路径:**使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)

16.基本路径测试步骤(白盒测试技术)

(1)根据过程设计结果画出相应的程序流程流图(2)画出相应的流图(3)计算流图的环形复杂度(4)确定线性独立路径的基本集合(5)设计可强制执行基本集合中每条路径的测试用例

17.独立路径的定义

所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。程序的环形复杂度决定了程序中独立路径的数量。

18.等价划分的定义与特点

①等价划分是一种黑盒测试技术,这种技术把程序的**输入域**划分成**若干个数据类**,据此导出测试用例②从每个等价类中只取一组数据作为测试数据③确定输入数据的有效等价类和无效等价类④分析输出数据的等价类,导出对应的输入数据等价类

19.边界值分析、错误推测以及判定表或判定树黑盒测试的特点

**边界值分析:**处理边界情况时程序最容易发生错误,选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值**错误推测:**在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。**判定表或判定树:**选择输入组合的一个有效途径是利用判定表或判定树为工具,列出输入数据各种组合与程序应作的动作(及相应的输出结果)之间的对应关系,然后为判定表的每一列至少设计一个测试用例。

20.调试的****定义与途径

定义:**调试是在测试发现错误之后排除错误的过程**途径:(1)蛮干法(2)回溯法(3)原因排除法:对分查找法、归纳法和演绎法

21.软件可靠性和软件可用性的区别

可靠性:**程序在给定的**时间间隔内,按照规格说明书的规定成功地运行的概率

可用性:**程序在给定的**时间点,按照规格说明书的规定,成功地运行的概率。

区别:可靠性意味着在0到t这段时间间隔内系

统没有失效,而可用性只意味着在时刻t,系统

是正常运行的。

8. 维护

1..软件维护的定义与内容解释(改正性、适应性、完善性、预防性维护各自特点比较与解释)

**定义:**在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

改正性维护:**面向错误;**适应性维护:**针对环境;完善性维护:针对用户;预防性维护:**针对未来

2.结构化维护与非结构化维护的定义与区别

**非结构化维护:**软件配置的惟一成分是程序代码,维护活动从评价程序代码开始,需要付出很大代价。(无完整的软件配置,每个都要重新规划,维护不方便)**结构化维护:**有一个完整的软件配置存在,维护工作从评价设计文档开始,减少精力的浪费并且能提高维护的总体质量。(维护起来方便)

3.维护工作量模型的分析

\(M=P+K×exp(c-d)\)

其中: M是维护用的总工作量,P是生产性工作量,K是经验常数,c是复杂程度(非结构化设计和缺少文档都会增加软件的复杂程度),d是维护人员对软件的熟悉程度。

(维护如何高效展开?减少程序复杂程度,提高维护人员对软件的熟悉程度)

4.决定可维护性的因素

(1)可理解性(2)可测试性(3)可修改性(4)可移植性(5)可重用性

5.预防性维护方法定义

把今天的方法学应用到昨天的系统上,以支持明天的需求。预防性维护实质上是软件再工程。

6.软件再工程、逆向工程、正向工程的定义

**软件再工程:**以软件工程方法学为指导,对程序全部重新设计、重新编码和测试,为此可以使用CASE工具(逆向工程和再工程工具)来帮助理解原有的设计。**逆向工程:**是一个恢复设计结果的过程,逆向工程工具从现存的程序代码中抽取有关数据、体系结构和处理过程的设计信息。(代码->程序流程图)。**正向工程:**也称为革新或改造,应用软件工程的原理、概念、技术和方法来重新开发某个现有的应用系统

7.文档重构、代码重构与数据重构的异同

**文档重构:**建立文档非常耗费时间,不可能为数百个程序都重新建立文档;应采用“使用时建文档”的方法;如果某应用系统是完成业务工作的关键,而且必须重构全部文档。**代码重构:**重构并不修改整体的程序体系结构,它仅关注个体模块的设计细节以及在模块中定义的局部数据结构。**数据重构:**与代码重构不同,数据重构发生在相当低的抽象层次上,它是一种全范围的再工程活动。对数据的修改必然会导致体系结构或代码层的改变。

  1. 面向对象方法学引论

1.面向对象的概念理解(对象、类、实例、消息、方法、属性、封装、继承、多态性、重载)

**对象:**由描述该对象属性的数据以及可以对这些

数据施加的所有操作封装在一起构成的统一体;

定义:是具有相同状态的一组操作的集合;是对属性值和操作的封装。

**类:**对具有相同数据和相同操作的一组相似对象的定义。**实例:**由某个特定的类所描述的一个具体的对象。**消息:**要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。**方法:**对象所能执行的操作,也就是类中所定义的服务。**属性:**类中所定义的数据,它是对客观世界实体所具有的性质的抽象。**封装:**把数据和实现操作的代码集中起来放在对象内部,也就是信息隐藏

**继承:**子类自动地共享基类中定义的数据和方法的机制。**多态性:**子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。**重载:**函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。

2.面向对象建模概念的分析与理解(对象模型、动态模型、功能模型3者各自特点及关系区别)

**对象模型:**描述系统数据结构,是最重要、最基本、最核心的;表示静态的、结构化的系统的“数据”性质。**动态模型:**描述系统控制结构;**功能模型:**描述系统功能

3.类图分析、用例图分析

类图描述类及类与类之间的静态关系;类名是一类对象的名字;属性的可访问性通常有3种:公有的、私有的和保护的;服务也就是操作。

表示关系的符号:(1)关联:表示两个类的对象之间存在某种语义上的联系(2)聚集:也称为聚合,是关联的特例(3)泛化:就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系(4)依赖和细化:依赖关系描述两个模型元素(类、用例等)之间的语义连接关系;当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。

4.一幅用例图包含的模型元素有系统、行为者、用例及用例之间的关系。

系统:被看作是一个提供用例的黑盒子。行为者:指与系统交互的人或其他系统,它代表外部实体。用例:可以被行为者感受到的、系统的一个完整的功能(特征:①用例代表某些用户可见的功能 ②总是被行为者启动的 ③必须是完整的)

用例之间的关系:有扩展和使用两种关系

第十章

1.脚本的定义及应用

**定义:**脚本是指系统在某一执行期间内出现的一系列事件。脚本描述用户(或其他外部设备)与目标系统之间的一个或多个典型的交互过程,以便对目标系统的行为有更具体的认识。

**应用:**建立动态模型的第一步是编写典型交互行为的脚本,ATM系统

第十三章

1.软件配置的定义

**软件配置:**软件过程的输出信息可以分为3类:

①计算机程序(源代码和可执行程序)②描述计算机程序的文档(供技术人员或用户使用)(ER图、数据流图等) ③数据(程序内包含的或在程序外的)。上述这些项组成了在软件过程中产生的全部信息,我们把它们统称为软件配置,而这些项就是软件配置项。

  1. 概括地说,软件质量**就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。上述定义强调了下述的3个**要点
    (1)软件需求是度量软件质量的基础,与需求不一致就是质量不高。(2)指定的开发标准定义了一组指导软件开发的准则,如果没有遵守这些准则,肯会导致软件质量不高。(3)通常,有一组没有显式描述的隐含需求(例如,软件应该是容易维护的)。如果件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。

  2. **能力成熟度模型的基本思想**是,由于问题是由人们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量。能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。改进后的软件过程将开发出质量更好的软件,使更多的软件项目免受时间延误和费用超支之苦。

**能力成熟度的5个等级**从低到高依次是:初始级(又称为1级),可重复级(又称为2级),已定义级(又称为3级),已管理级(又称为4级)和