# 名词解释

# 软件工程与软件过程

# 软件工程方法学

软件工程方法学包括三个要素:方法、工具和过程。

  • “过程”是软件产品加工所经历的一系列有组织的活动。
  • “方法”为软件开发提供“如何做”的技术。
  • “工具”可为过程和方法提供自动的或半自动的支持。

习题 P6 6.

# 软件危机

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

软件危机包含下述两方面的问题: 如何开发软件,以满足对软件日益增长的需求; 如何维护数量不断膨胀的已有软件。

书 P1 1.1.2

软件危机的现象如下。

  • 经费超出预算,项目一再拖延。
  • 不重视需求,开发的软件不能满足用户的要求,项目成功率低。
  • 没有规范的软件工程方法,软件可维护性差、软件质量差、可靠性差。
  • 开发工具落后,手工方式,开发效率低。

习题 P4 三、3.

# 软件再工程

运用逆向工程、重构等技术,在充分理解原有软件的基础上,进行分解、综合、并重新构建软件, 用于提高软件的可理解性、可维护性可复用性或演化性。

# 软件测试

测试的正确定义是“为了发现程序中的错误而执行程序的过程”。

习题 P50 5.2.1

# 软件的健壮性

指软件对于规范要求以外的输入情况的处理能力。

健壮性 | 百度百科 (opens new window)

# 软件可靠性

软件按照设计的要求,在规定时间和条件下达到不出故障,持续运行的要求的质量特性称为可靠性。

可靠性是指在规定的一段时间内和规定的条件下,软件维持在其性能水平的能力。

# 详细设计

详细设计也称为模块设计、物理设计或低层设计。 在这个阶段把解法具体化,详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。

书 P13 5.

# 软件生命周期

软件生命周期是软件的产生直到报废或停止使用的生命周期。
周期内一般有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段。

# 软件生存周期模型

软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 (模型:是为了理解事物而对事物做出一种抽象,它忽略不必要的细节,它也是事物的一种抽象形式、一个规划、一个程式。)

主要有:

  • 瀑布模型(整体开发模型)
  • 增量模型(非整体开发模型)
  • 螺旋模型(是瀑布和增量相结合的模型;一种风险驱动的模型)
  • 喷泉模型(是以用户需求为动力,以对象作为驱动的模型)
  • 基于知识的模型(又称智能模型,是把瀑布模型和专家系统结合在一起的模型)
  • 变换模型(合适于形式化开发的模型)等。

# 原型

原型是指模拟某种产品的原始模型。 软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性。

# 瀑布模型

瀑布模型是将软件生存各个活动规定为依线性顺序联接的若干阶段的模型。 它包括可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。

# 喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。 该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。

# 增量模型

增量模型是在项目的开发工程中以一系列的增量方式开发系统。 增量方式包括增量开发和增量提交。 增量开发是指在项目开发过程中以一定的时间间隔开发部分工作软件; 增量提交是指在开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。 增量开发和增量提交可以同时使用,也可单独使用。

# 快速原型模型

快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。

快速原型模型 | 百度百科 (opens new window)

原型模型:需求分析入手迅速、表达直观、容易交流。重点解决瀑布模型的需求分析入手难的问题。

# 螺旋模型

螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。 螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。 同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。 螺旋模型更适合大型的昂贵的系统级的软件应用。

螺旋模型 | 百度百科 (opens new window)

# 概要设计

从总体上解决问题,确定可实现的方案,设计程序的体系结构。

软件概要设计又称结构设计,这是一个把软件需求转换为软件表示(只是描述软件的总的体系结构)的过程。

这个阶段的主要任务是:概括地回答“怎样实现目标系统?”

概要设计又称为初步设计、逻辑设计、高层设计和总体设计。

书 P12 4.

# CMM

CMM 是指“能力成熟度模型”,英文全称为 Capability Maturity Model for Software ,英文缩写为 SW-CMM ,简称 CMM 。

它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM 的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。

CMM | 百度百科 (opens new window)

能力成熟度模型并不是一个软件生命周期模型,而是改进软件过程的一种策略,它与实际使用的过程模型无关。

它的基本思想是:

因为问题是管理软件过程的方法不恰当引起的,所以运用新软件技术并不会自动提高软件生产率和软件质量,应当下大力气改进软件过程的管理。 对软件过程的改进不可能一蹴而就,因此,CMM 以增量方式逐步引入变化,它明确地定义了 5 个不同的成熟度等级,一个软件开发组织可用一系列小的改良性步骤迈入更高的成熟度等级。

书 P33 倒数第二段

# CASE

CASE 即 Computer Aided Software/System Engineering ,中文意思是计算机辅助软件工程。 CASE是一套方法和工具,可使系统开发商规定的应用规则,并由计算机自动生成合适的计算机程序。

用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为 CASE 工具。

# 传统方法学

# 数据流图

简称 DFD (data flow diagram)

数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。

书 P42 3.5

# PAD图

PAD 是问题分析图(Problem Analysis Diagram)的英文缩写。 它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。

P43 4.9.3

# 抽象

抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。

# 耦合

耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点,以及通过接口的数据。
耦合是影响软件复杂程度的一个重要因素。

书 P72 4.3.1

# 内容耦合

如果出现下列情况之一,两个模块间就发生了内容耦合:

  • 一个模块访问另一个模块的内部数据;
  • 一个模块不通过正常入口而转到另一个模块的内部;
  • 两个模块有一部分程序代码重叠(只可能出现在汇编程序中);
  • 一个模块有多个入口(这意味着一个模块有几种功能)。

内容耦合是最高程度的耦合,应该坚决避免使用内容耦合。 书 P72 4.3.1

# 内聚

内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。

书 P73 4.3.2

# 逻辑内聚

如果一个模块完成的任务在逻辑上属于相同或相似的一类(如一个模块产生各种类型的全部输出),则称为逻辑内聚。

书 P73 4.3.2

# 模块化

模块化是指解决一个复杂问题是自顶向下逐层把软件系统划分成若干模块的过程,每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

# 数据字典

数据字典是为了描述在结构化分析过程中定义对象的内容时,使用的一种半形式化的工具。

下面是对这个重要的建模工具的定义:

数据字典是所有与系统相关的数据元素的有组织的列表,并且包括了对这些数据元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、存储的成分甚至中间计算结果有共同的理解。

简而言之,数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。

书 P49 3.7

# 结构化方法

结构化方法 (Structured Approach) 也称新生命周期法,是生命周期法的继承与发展,是生命周期法与结构化程序设计思想的结合。

结构化的最早概念是描述结构化程序设计方法的,它用三种基本逻辑结构来编程,使之标准化、线性化。 结构化方法不仅提高了编程效率和程序清晰度,而且大大提高了程序的可读性、可测试性、可修改性和可维护性。 后来,把结构化程序设计思想引入 MIS(Management Information System,管理信息系统) 开发领域,逐步发展成结构化系统分析与设计的方法。

结构化方法的基本要点是:自顶向下、逐步求精、模块化设计、结构化编码。

结构化方法 | 百度百科 (opens new window)

结构化分析

结构化设计

# 结构化分析

结构化分析是面向数据流进行需求分析的方法,采用自顶向下逐层分解的分析策略把一个复杂的系统分解成若干小问题然后分别解决。

# 结构化设计

结构化设计又称面向数据流的设计,它是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构。

# 经济可行性

经济可行性是指投资/效益分析。 根据估算的直接经济效果和各种间接效益,评价新系统经济上的可行性。

# 信息隐蔽

信息隐蔽指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。

# 控制范围

控制范围是模块本身和它的下属模块的集合。

# 模块的作用范围

模块中的一个判定影响的所有模块的集合。作用范围应该在控制范围内。

# 系统流程图

系统流程图是描述物理系统的传统工具,用图形符号表示系统中的各个元素,如人工处理、数据处理、数据库、文件、设备等, 表达了元素之间的信息流动的情况。

# 白盒法

白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。 这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。

白盒测试又称为结构测试。

书 P111 5.2.2

白盒测试主要针对于程序内部逻辑和数据流程的测试,因此白盒测试的测试用例设计需要了解程序的内部逻辑。 常用的白盒测试方法主要有逻辑覆盖法、基本路径测试法。

习题 P64 9.

# 黑盒法

黑盒测试法是把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。 也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用, 程序是否能适当地接收输入数据产生正确地输出信息,并且保持外部信息(如数据库或文件)的完整性。

黑盒测试又称为功能测试。

书 P111 5.2.2

黑盒测试是依据软件的需求规格说明书,检查程序功能是否满足需求的要求,主要的黑盒测试法有: 等价类划分、边界值分析、错误推测法、因果图法和场景法。

习题 P64 8.

# 等价划分

等价划分是一种黑盒测试方法。 这种方法把程序的输入域划分为数据类,据此可以导出测试用例。 一个理想的测试用例能独自发现一类的错误(如对所有字符数据的处理都不正确)。

习题 P52 5.4.1

# 边界值分析法

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。 通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

# 集成测试

集成测试是测试和组装软件的系统化技术,是把模块按照设计要求组装起来的同时进行测试,主要目标是发现与接口有关的问题。

习题 P54 5.5.3

# 软件调试

调试(也称为纠错)作为成功测试的后果出现,也就是说,调试是在测试发现错误之后排除错误的过程。 调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。

# 非增量测试

对每一个模块进行单元测试

在此基础上按程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试

# 面向对象方法学

# 对象

对象是对现实世界实体的正确抽象,它是由描述内部状态、表示静态属性的数据,以及可以对这些数据施加的操作(实现对象的动态行为),封装在一起所构成的统一体。

习题 P67 6.1.1

# 面向对象分析

面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。

书 P166

# 状态转换图

状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件来表示系统的行为。

此外,状态图还指出了作为特定事件的结果系统将做哪些动作(如处理数据)。

习题 P23 3.6

# 面向对象设计

面向对象设计是面向对象方法在软件设计阶段应用与扩展的结果,就是根据在问题域中已建立的分析模型, 运用面向对象技术进行系统软件设计,并且补充实现的细节部分,如人机界面、数据存储、任务管理等, 形成符合成本和质量要求的、抽象的系统实现方案,在求解域中建立设计模型。

习题 P103 4.

# 继承

广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。 在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。

习题 P72 7.

# 多态性

在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。

也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。 当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。

习题 P72 8.

# 对象模型

对象模型表示静态的、结构化的系统的“数据”性质。 它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。

对象模型为建立动态模型和功能模型,提供了实质性的框架。

习题 P73 6.6

# 动态模型

动态模型明确规定了“什么时候做”。即在何种状态下、接受了什么事件的触发,来确定对象的可能事件的顺序。

习题 P90 4.

# 功能模型

功能模型表示变化的“功能”性质,它指明了系统应该“做什么”。因此,功能模型更直接地反映了用户对目标系统的需求。

# UML

Unified Modeling Language 统一建模语言

统一建模语言是由一系列标准的图形符号组成的建模语言,它用于描述软件系统分析、设计和实施中的各种模型。

UML 是一种建模语言,是一种标准的表示方法,而不是一种完整的方法学。

# 软件项目管理

# 可移植性

把程序从一种硬件配置和(或)软件系统环境转移到另一种配置和环境时,需要的工作量多少。 有一种度量的方法是:用原来程序设计和调试的成本除移植时需用的费用。

书 P290 13.2.1

# 软件质量

软件质量是“反映实体满足明确的和隐含的需求的能力的特性的总和”。 具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的和隐含特征相一致的程度。

# 软件维护的分类

习题 P145 14.1.2

# 完善性维护

完善性维护是软件维护的主要部分。它是针对用户对软件产品所提出的新需求所进行的维护。

# 预防性维护

预防性维护主要采用先进的软件工程方法对已经过时的、很可能需要维护的软件系统的某一部分进行重新设计、编码、测试,以达到结构上的更新,它为以后进一步维护软件打下了良好的基础。

# 风险分析

项目的风险分析可以在项目寿命期的任何一个阶段进行,是一个连续不断的过程。 风险分析是项目风险管理的首要工作,是实施项目风险管理的重要内容。 其中包括:风险识别、风险估计、风险管理策略、风险解决和风险监督等。

风险分析 | 百度百科 (opens new window)

# 注释

注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。 注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。

注释 | 百度百科 (opens new window)

# 重用性

重用性指的是软件的某些部分重复使用的性能。 软件重用是提高软件生产率的重要手段,重用性越高,则软件生产率越高。 按重用性的程度从低至高可以分为代码重用、设计结果重用和分析结果重用几种类型。

# 文档

文档是指某种数据介质和其中所记录的数据。 软件文档是用来表示对需求、过程或结果进行描述、定义、规定或认证的图示信息,它描述或规定了软件设计和实现的细节。