跳转至

软件工程复习

《软件工程》复习纲要

考试范围:第1-10章,第13章。

一. 概念题的主要内容及复习方法

(红色表示重要概念,涵盖期末考试简答题、分析题内容)

  1. 主要内容:传统软件工程(1-8章)以软件生命周期为核心概念展开,面向对象软件工程(9-12章)以面向对象概念与建模建模为主题展开,软件项目管理思路展开。

第1章:1.1~1.3, 1.4.1~1.4.5,1.5

软件危机的定义、表现以及产生的原因;软件工程的定义、本质特性及基本原理;软件工程方法学的3要素、传统方法学的定义、面向对象方法学的基本概念(定义和要点);软件生命周期的定义与组成;软件过程的定义与瀑布、快速原型、增量、螺旋、喷泉过程模型的分析理解(各自特点、比较等)。

瀑布模型

这张图片是一个瀑布模型的流程图,它可以帮助我们理解瀑布模型的特点。瀑布模型是一种线性和顺序的软件开发过程模型,它有以下特点12

  • 瀑布模型将软件开发过程划分为五个基本阶段:需求分析、设计、编码、测试和运行与维护。每个阶段都有明确的输入和输出,以及相应的文档和任务。
  • 瀑布模型要求每个阶段必须完成后才能进入下一个阶段,且不能回退到前一个阶段。这体现了软件开发过程的顺序性和依赖性。
  • 瀑布模型推迟了软件的实现,即编码阶段,直到需求分析和设计阶段都完成。这体现了软件开发过程的推迟实现的特点,以避免过早的编程导致的返工和错误。
  • 瀑布模型强调了软件的质量保证,即在每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。这体现了软件开发过程的质量保证的观点。

从图片中,我们可以看到瀑布模型的以下细节:

  • 图片中的五个矩形框代表了软件开发过程的五个阶段,它们分别是“需求分析”、“设计”、“编码”、“测试”和“运行与维护”。
  • 图片中的箭头代表了软件开发过程的流向,即从上到下,从左到右,依次进行每个阶段的工作。
  • 图片中的虚线代表了软件开发过程的反馈循环,即当后面的阶段发现前面的阶段的问题时,可以返回到前面的阶段进行修改。这是对传统瀑布模型的改进,以增加软件开发过程的灵活性和自适应性。

1: 什么是瀑布模型? - 知乎 - 知乎专栏 2: 瀑布模型 - 维基百科,自由的百科全书

快速原型模型

这张图片是一个快速原型模型的流程图,它可以帮助我们理解快速原型模型的特点。快速原型模型是一种软件开发过程模型,它有以下特点12

  • 快速原型模型需要迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
  • 快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能。
  • 快速原型模型通过用户对原型的测试评定,给出具体改进意见以丰富细化软件需求,开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。
  • 快速原型模型可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,适合预先不能确切定义需求的软件系统的开发。

从图片中,我们可以看到快速原型模型的以下细节:

  • 图片中的多个矩形框代表了软件开发过程的各个步骤,它们分别是“可行性分析”、“规格说明”、“设计”、“编码”、“测试”和“维护”。
  • 图片中的实线箭头代表了软件开发过程的流向,即从上到下,从左到右,依次进行每个步骤的工作。
  • 图片中的虚线箭头代表了软件开发过程的反馈循环,即当在某个步骤中发现前面步骤的问题时,可以返回到前面的步骤进行修改。这是对传统瀑布模型的改进,以增加软件开发过程的灵活性和自适应性。
  • 图片中的水印文字是“快速原型”,表明这是一个快速原型模型的示例。

1: 快速原型模型_百度百科 2: 快速原型模型的概念,优缺点。 - CSDN博客

增量模型

这张图片是一个增量模型的流程图,它可以帮助我们理解增量模型的特点。增量模型是一种软件开发过程模型,它有以下特点12

  • 增量模型将软件系统分成若干个小的部分,每个部分都是一个增量,每个增量都要进行开发、测试和交付。在每个增量完成后,它们都需要集成到系统中,形成一个完整的软件系统。
  • 增量模型采用迭代式的开发方式,每个迭代都会增加新的功能。这种方式可以快速交付可用的软件系统,从而提高软件开发速度。
  • 增量模型可以适应需求变化和不确定性。每个迭代都会增加新的功能,同时可以根据用户的反馈和需求进行调整,从而满足用户的需求。
  • 增量模型可以降低软件开发成本和风险。每个增量都需要进行开发、测试和交付,可以及时发现和解决问题,从而降低软件开发成本和风险。
  • 增量模型可以提高软件质量和用户满意度。每个增量都是一个可工作的软件系统,使得用户可以在迭代之间获得立即的价值和反馈。同时,每个增量都需要进行测试和集成,可以及时发现和解决问题,从而提高软件质量和用户满意度。

从图片中,我们可以看到增量模型的以下细节:

  • 图片中的三个矩形框代表了软件开发过程的前期阶段,它们分别是“需求分析”、“规格说明”和“概要设计”。这些阶段是顺序进行的,需要完成整个软件系统的需求分析、规格说明和概要设计。
  • 图片中的多个矩形框代表了软件开发过程的后期阶段,它们分别是“详细设计”、“编码”、“测试”和“维护”。这些阶段是并行进行的,需要针对每个增量进行详细设计、编码、测试和维护。
  • 图片中的实线箭头代表了软件开发过程的流向,即从上到下,从左到右,依次进行每个阶段的工作。
  • 图片中的虚线箭头代表了软件开发过程的反馈循环,即当在某个阶段中发现前面阶段的问题时,可以返回到前面的阶段进行修改。这是对传统瀑布模型的改进,以增加软件开发过程的灵活性和自适应性。

1: 增量模型_百度百科 2: 软件工程–增量模型详解-CSDN博客

螺旋模型

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

从图片中,我们可以看到螺旋模型的以下细节:

  • 图片中的多个同心圆代表了软件开发过程的多个迭代层,每个迭代层都包括了制定计划、风险分析、工程化和规划下一阶段四个步骤。这些步骤是顺序进行的,需要完成每个迭代层的目标、方案、限制、风险评估、计划风险、消除风险、开发与验证、计划下一阶段的产品和项目等活动。
  • 图片中的每个扇形代表了软件开发过程的不同阶段,它们分别是需求计划、概念设计、初步设计、详细设计、编码与测试、单元测试、集成测试、系统测试、运行维护、交付、安装、运行、维护、改进等阶段。这些阶段是并行进行的,需要针对每个迭代层的工程化步骤进行具体的任务实施和结果验证。
  • 图片中的实线箭头代表了软件开发过程的流向,即从内到外,从左到右,依次进行每个迭代层的工作。
  • 图片中的虚线箭头代表了软件开发过程的反馈循环,即当在某个步骤中发现前面步骤的问题时,可以返回到前面的步骤进行修改。这是对传统瀑布模型的改进,以增加软件开发过程的灵活性和自适应性。
  • 图片中的水印文字是“CSDN @快乐江湖”,表明这是一个来自CSDN博客的图片。

1: 螺旋模型 - 维基百科,自由的百科全书 2: 螺旋模型的优点与缺点_螺旋模型风险驱动,主要使用与大规模软件项目优点-CSDN博客

喷泉模型

这张图片是一个喷泉模型的流程图,它可以帮助我们理解喷泉模型的特点。喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。12

从图片中,我们可以看到喷泉模型的以下细节:

  • 图片中的五个圆形代表了软件开发过程的五个阶段,它们分别是分析、设计、实现、测试和集成。这些阶段是顺序进行的,需要完成软件系统的需求分析、方案设计、功能实现、质量测试和系统集成。
  • 图片中的实线箭头代表了软件开发过程的流向,即从下到上,从左到右,依次进行每个阶段的工作。
  • 图片中的虚线箭头代表了软件开发过程的反馈循环,即当在某个阶段中发现前面阶段的问题时,可以返回到前面的阶段进行修改和优化。这是对传统瀑布模型的改进,以增加软件开发过程的灵活性和自适应性。
  • 图片中的水印文字是“CSDN @快乐江湖”,表明这是一个来自CSDN博客的图片。

1: 喷泉模型_百度百科 2: 喷泉模型:一种灵动而高效的软件开发方法 - 百家号

图1.1~1.9的分析理解(符号含义、过程解释等)

第2章:2.1~2.7

可行性研究的目的、内容与步骤;系统流程图的分析及应用(符号识别,根据事实绘出图形的方法与技巧等);数据流图的分析及应用(符号识别,根据事实绘出图形的方法与技巧等);数据字典的定义、内容、用途以及与数据流图的关系;成本/效益分析的方法与技术(代码行技术、任务分解技术、货币的时间价值、投资回收期、纯收入、投资回报率的概念及应用价值等)

可行性研究的目的:

用最小的代价在尽可能短的事件当中确定问题是否可以解决,不是解决问题,而是确定问题是否值得解决。

可行性研究的内容:

至少包括三方面研究可行性:技术可行性、经济可行性、操作可行性。还可以包括法律、社会效益等其他的方面。

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

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

数据字典的内容:

数据字典由四部分组成:

数据流、数据流分量、数据存储、处理。还包括数据的其他一些信息。

数据字典的用途:

作为分析阶段的工具。通过数据字典,建立一组严密一致的定义,有助于改进分析员和用户之间的交流,消除潜在的误解。

数据字典与数据流图的关系:
成本/效益分析:

图2.1~图2.9的分析理解

第3章:3.1~3.9

需求分析的基本任务及任务内容,情景分析的定义,结构化分析方法(SA)定义,简易的应用规格说明技术的定义,快速原型的定义和特性,需求分析过程建模(数据、功能行为模型)的内容,ER图、状态转换图的概念的理解及绘制,层次方框图的概念及应用。

需求分析的基本任务是:

准确地回答“系统必须要做什么的问题”

需求分析的任务是:

确定系统必须要完成哪些工作(对于目标系统提出完整、准确、清晰、具体的要求)

情景分析的定义:

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

结构化分析方法(SA)的定义:

就是面向数据流,自顶向下逐步求精进行需求分析的方法。通常从DFD(数据流图的输出端分析)

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

是一种面向团队的需求收集法,倡导用户与开发者密切合作,共同标识问题,提出解决方案要素,商讨不同方案并且指定基本需求。

快速原型的定义和特性:Ps:这部分对照第一张的快速原型模型

快速原型的定义:

快速建立起来旨在演示目标系统主要功能的个运行程序(比如通过屏幕显示,或者打印具体的报表)

快速原型的特性:

实现用户看得见的功能(屏幕显示、打印报表)省略目标系统的隐含功能(例如:修改文件)。

快速原型的第一个特性:“快速”,尽可能快速的向用户提供可在计算机上运行的目标系统的模型,从而使得用户和开发者统一“目标系统应该做什么”。(原型可以存在不严重损害功能的缺陷,只要不会使用户误解产品的行为,就无碍)。

快速原型的第二个特性:“容易修改”,需要根据用户的意见迅速的修改版本,从而更好的满足用户的需求。

需求分析过程建模的内容:

数据模型:E-R图、行为模型:状态图、功能模型:DFD(数据流图)。

image-20240104194135905

E-R图:

实体联系图:描述数据对象、对象属性以及数据对象之间彼此相连的关系。

状态转换图:

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

层次方框图:

使用树形结构的一系列多层次的矩形方框标表示数据的层次结构。

图3.1~图3.5的分析理解

第4章:4.1

形式化方法的定义、优点和应用准则,非形式化方法、半形式化方法的定义。

形式化方法的定义:

描述系统性质的基于数学的技术,如果一种方法有坚实的数学基础,那就是形式化的。

形式化方法的优点:

1.使用数学描述系统状态几乎没有二义性。2. 可以在不同的软件工程活动中平滑的过渡。3. 可以使用数学方法证明设计符合规格说明、代码正确实现设计结果。

形式化方法的应用准则:

1.选用适当的表示方法。应该仔细选择一种适用于当前项目的形式化说明技术,避免错误使用不当的描述导致工作量增加项目复杂(例如有些概念不适用于描述、有些适用,需要具体情况具体分析)。2. 应该形式化,但是不能过分形式化(不要所有部分都强硬的使用数学语言描述,造成理解负担)。3. 应该实现估算形式化的成本。 4. 应该有形式化顾问随时提供咨询。 5. 不应该放弃传统的开发方法。6. 应该建立详尽的文档。 7. 不应该放弃质量标准。 8. 不应该盲目依赖形式化方法。9. 应该测试、再测试,反复测试,以降低错误率。 10. 应该重用,从而提高软件成本和软件质量。

非形式化方法的定义:

用自然语言描述需求规格说明。

半形式化方法:

用数据流图或者实体-联系图建立模型。

第5章:5.1~5.6

总体设计的基本目的及相关概念,总体设计过程的组成,模块、模块化、抽象、逐步求精、信息隐藏原理的定义,模块独立性的定义和重要性,耦合与内聚的定义与区别,5种耦合的区别,7种内聚的区别,软件总体设计的启发规则(重点理解软件结构的深度、宽度,模块的扇入、扇出、作用域、控制域等概念),,HIPO图,结构化设计方法(SD)、面向数据流的设计方法(变换流与事务流的定义,变换分析与事务分析模式及分析步骤)。

总体设计的基本目的:

回答”概括地说,系统应该如何实现的问题“。总体设计也称为概要设计或者初步设计。

模块的定义:

模块是由边界元素限定的相邻程序元素(数据说明、可执行的语句)的序列,并且有一个总体的表示符代表它,例如面向对象当中的对象、对象中的方法也是模块。

模块化的定义:

把程序划分成为独立命名并且可以独立访问的模块,每个模块完成一个子功能,把子模块集成就可以完成指定的功能满足用户的需求。

抽象的定义

把相似的方面集中概括,忽略其中的差异。

逐步求精的定义:

为了能集中精力解决主要问题,而尽量推迟对问题细节的考虑。

信息隐藏原理的定义:

一个模块当中包含的信息(过程和数据),对于不需要这些信息的模块来说,是不能访问的。

模块独立性的定义:

每个模块单独完成相对独立的特定子功能,并且于其他的模块之间的关系简单。

模块独立性的重要性:
  1. 有效的模块化较为容易开发
  2. 独立的模块更容易测试和维护
耦合的定义:

耦合是衡量软件不同模块之间的互连程度的度量。

内聚的定义:

内聚是一个模块内部各个元素之间彼此结合的紧密程度。

五种耦合:
  1. 数据耦合:两个模块彼此通过参数交换信息,交换的只有数据。(低耦合)
  2. 控制耦合:(中等程度的耦合,增加了系统的复杂程度)。
  3. 特征耦合:传参为整个数据结构,但是调用只有其中的一部分数据元素。
  4. 公共环境耦合:两个或者多个模块通过一个公共数据环境相互作用。
  5. 内容耦合:最高程度的耦合,一个模块访问另一个的内部数据或者一个模块不通过正常入口转入另一个模块,两个模块中有一部分代码重叠,一个模块有多个入口。
七种内聚:
  1. 偶然内聚:一个模块完成一组任务,但是任务之间关系很松散。
  2. 逻辑内聚:一个模块完成的任务在逻辑上属于相同/相似的一类
  3. 时间内聚:一个模块包含的任务必须在同一段时间内执行。
  4. 过程内聚:一个模块当中处理的元素是相关的,而且需要按照特定的次序执行。(中内聚)
  5. 通信内聚:模块中所有的元素都使用同一个输入数据或者输出数据。(中内聚)
  6. 顺序内聚:模块内的处理元素和一个功能密切相关,且处理必须依据顺序执行(一个输出作为下一个输入)(高内聚)
  7. 功能内聚:模块内所有元素属于整体,完成单一的功能(高内聚,且是最高程度的内聚)
软件总体设计的启发规则:
软件结构的深度:

软件结构当中控制的层数。

软件结构的宽度:

软件结构当中同一个层次的模块总数的最大值。

模块的扇入、扇出、作用域、控制域:

扇入:表明一个模块被多少个上级模块直接调用

扇出:一个模块直接控制调用的模块数目

作用域:模块内一个判定所影响到的所有模块的集合

控制域:模块本身和直接或者间接从属于他的模块的集合。

HIPO图:

层次结构方框图

结构化设计方法(SD)

绘制软件结构图:

面向数据流的设计方法:
变换流的定义:

信息沿输入通路进入系统,由外部形式变为内部形式,经系统处理后成为外部形势输出的数据流就是变换流。

事物流的定义:

数据以事物为中心,数据沿着输入通路到达处理,并且有选择分支进行处理,这种数据流就是事物流

变换分析和事务分析:

要画出软件结构图

图5.1~图5.19的分析理解

第6章:6.1~6.6

详细设计阶段的根本目标与任务,结构程序设计(SP)的定义(经典、扩展、修正),过程设计工具的分析及应用(程序流程图、盒图或N-S图、PAD图、PDL的相互转换、判定表与判定树的绘制),McCabe方法及流图的绘制,Jackson图及Jackson方法。

结构程序设计(SP)的定义:

经典定义:如果一个程序的代码块仅仅通过选择顺序循环这三种基本控制结构连接,并且只有一个入口和出口,那这个程序就是结构化的。

扩展定义

修正定义:

图6.1~图6.18的分析理解

第7章:7.1~7.9

软件实现的定义,软件测试的定义与准则,Pareto原理,黑盒测试法和白盒测试法的定义与比较,穷举测试的理解,软件配置、测试配置、测试方案、测试用例的定义及理解,单元测试的定义及测试重点,计算机单元测试方法,集成测试的定义与特点,非渐增式测试与渐增式测试的区别,自顶向下集成与自底向上集成策略的比较,回归测试的定义,确认测试的定义与理解,Alpha测试与Beta测试的区别,逻辑覆盖技术(语句、判定、条件、路径、判定/条件、条件组合覆盖的定义、分析及比较),基本路径测试步骤,独立路径的定义、分析及应用,等价划分的定义与特点,边界值分析、错误推测以及判定表或判定树黑盒测试的特点,调试的定义与途径,软件可靠性和软件可用性的区别。

图7.1~图7.8的分析理解

第8章 8.1~8.7

软件维护的定义与内容解释(改正性、适应性、完善性、预防性维护各自特点比较与解释),结构化维护与非结构化维护的定义与区别,维护工作量模型的分析,决定可维护性的因素,预防性维护方法定义,软件再工程、逆向工程、正向工程的定义与理解,文档重构、代码重构与数据重构的异同。

图8.1~图8.2的分析理解

第9章 9.1~9.7

面向对象的概念理解(对象、类、实例、消息、方法、属性、封装、继承、多态性、重载),面向对象建模概念的分析与理解(对象模型、动态模型、功能模型3者各自特点及关系区别),类图的识别及分析、用例图的识别及分析

图9.4~图9.17的分析理解

第10章 10.4

脚本的定义及应用

图10.1~图10.13的分析理解

第13章 13.3、13.5.1、13.6.1、13.7

13.3工程网络图的绘制,估算工程进度,关键路径确定、各工序节点机动时间的计算,Gantt图的绘制;软件质量的定义;软件配置的定义、软件配置管理与软件维护的区别;能力成熟度模型(CMM)的基本思想,能力成熟度模型(CMM)的5个等级名称及含义理解。

  1. 方法:以书中各章所示图的分析(建模分析)为重点、以应用为导向全面复习,特别注意重点概念结合插图的分析与说明,以点带面。

二. 分析题内容重点

1.重点分析:

1)对于任意给定的陈述事实,DFD(数据流图)、ER图和状态图的绘制;(第2章2.4节,第3章3.4节、3.6节)

2)DFD→软件结构方法(变换分析模式和事务分析模式的分析理解);(第5章,5.5节)

3)详细设计工具中程序流程图、NS图、PDL、PAD、Jackson图的绘制要点和相互转换;(第6章6.1节、6.3节、6.4节)

4)详细设计工具中对于任意给定的陈述事实,绘制判定表和判定树;(第6章6.3节)

5)逻辑覆盖技术和基本路径测试技术的分析与应用(语句、判定、条件、路径、独立路径的概念分析技术);(第7章7.6节,第6章6.3节、6.5节)

6)McCabe方法的分析及应用,主要解题过程的熟练掌握。主要解题过程为:

任意C语言程序代码或PDL→程序流程图→流图→计算复杂度过程→独立路径的确定;(第6章6.5节、6.3节、7.6.2节)

7)Jackson方法的理解及Jackson图→程序流程图的过程;(第6章6.4节、6.3节)

8)工程网络图的计算分析:各工序节点最短工期计算,关键路径的确定,各工序节点完成的机动时间计算。(第13章13.3节)

2.方法:

1)已布置的作业内容及解题过程;

2)已讲授过的书上的例题的分析及解题过程;

3)1-10章课堂上分析过的软件工程模型及数学模型的分析及应用。

四.考试题型

1.单选题(每题2分,共20分)

2.填空题(每空2分,共20分)

3.判断题(每题1分,共10分)

4.简答题(每题5分,共15分)

5.分析题(每题:1×5分,1×6分,3×8分,共35分)

五.考试形式及特别及备考方略

1.形式:闭卷

2.手机禁止带入考场,允许使用铅笔绘图。

3.备考方略:系统复习,重点防范,以点带面!