目录

2024-12-26-软件工程导论期末复习重点

【软件工程导论】期末复习重点

【软件工程导论】期末复习笔记

1. 软件工程学概述

1.1 软件危机

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

产生的原因

  • 一方面与 软件本身的特点 有关,另一方面也和 软件开发和维护的方法不正确 有关。

1.2 软件工程

软件工程 是指导计算机软件 开发和维护 的一门工程学科。

基本原理

  • 用分阶段的生命周期计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果应能清楚地审查
  • 开发小组的人员应该少而精
  • 承认不断改进软件工程实践的必要性

1.3 软件工程方法学三要素

  • 三要素:方法、工具、过程
  • 最广泛的软件工程方法学是 传统方法学、面向对象方法学

1.4 软件生命周期

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

1.5 软件过程的几个模型

瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型

选择题

  • 瀑布模型 :带反馈环

    https://i-blog.csdnimg.cn/blog_migrate/2e67efeac09f273f5e319b43ae97674b.png

  • 快速原型模型 :不带反馈环(快速)

    https://i-blog.csdnimg.cn/blog_migrate/adbf0af4b0915b3ac5eded74335dc22a.png

  • 喷泉模型 :面向对象、无缝、迭代

    https://i-blog.csdnimg.cn/blog_migrate/61ba06d21c3844817341fb53a23db635.png

  • 增量模型(Incremental Model)

    增量模型是一种非整体开发的模型。是一种进化式的开发过程。

  • 螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:

    https://i-blog.csdnimg.cn/blog_migrate/7c09c0802bb6ae90c32d771080bd751f.png

2. 可行性研究

2.1 可行性研究实质

目的 :用最小的代价在尽可能短的时间内确定问题是否能够解决。

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

2.2 系统流程图符号

P39

https://i-blog.csdnimg.cn/blog_migrate/3770a6ee6d11672fba38cd7dd4c83f5b.png

2.3 数据流图的特点

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

2.4 数据字典的定义

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

2.5 数据字典由四类元素定义组成

  1. 数据流
  2. 数据流分量(数据元素)
  3. 数据存储
  4. 处理

2.6 成本效益分析的目的

成本/效益分析的目的 :正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地做出是否投资于这项开发工程的决定。

2.7 三种成分估计技术

  1. 代码行技术
  2. 任务分解技术
  3. 自动估计成本技术

2.8 货币的时间价值的计算

P51

通常用利率的形式表示货币的时间价值。假设年利率为

i i

i ,如果现在存入

P P

P 元。则

n n

n 年后可以得到的钱数为:

F

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

F

=

P

(

1

i

)

n ,也就是

P P

P 元钱在

n n

n 年后的价值。反之,如果

n n

n 年后能收入

F F

F 元钱,那么这些钱现在的价值是:

P

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

P

=

F

/

(

1

i

)

n

3. 需求分析

3.1 模型是什么?

所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述 。通常,模型由一组图形符号和组织这些符号的规则组成。

3.2 结构化分析实质

结构化分析实质是一种创建模型的活动

3.3 需求分析过程建立的三种模型

数据模型 功能模型 行为模型

3.4 数据模型中包含的三种相互关联的信息

数据对象数据对象的属性 以及 数据对象彼此间相互连接的关系

3.5 验证软件需求的方法

  1. 验证需求的一致性
  2. 验证需求的现实性
  3. 验证需求的完整性和有效性

4. 总体设计

4.1 总体设计的两个阶段

  • 系统设计阶段 :确定系统的具体实现方案
  • 结构设计阶段 :确定软件结构

4.2 总体设计中,划分出组成系统的物理元素有

程序 文件 数据库 人工过程 文档

4.3 模块是构成程序的基本条件

4.4 什么是抽象?

人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。

4.5 信息隐藏还来的好处

绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传到软件的其他部分。

4.6 模块独立的概念

模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。

4.7 耦合

  1. 数据耦合(低耦合): 如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是 数据
  2. 控制耦合(中等程度的耦合):如果传递的信息中有控制信息,则是控制耦合
  3. 特征耦合: 当把数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合
  4. 公共环境耦合(介于数据耦合和控制耦合之间): 如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合
  5. 内容耦合(最高程度的耦合): 出现下列情况之一,就发生了内容耦合
    • 一个模块访问另一个模块的内部数据
    • 一个模块不通过正常入口而转到另一个模块的内部
    • 两个模块有一部分程序代码重叠
    • 一个模块有多个入口

4.8 耦合设计原则

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

4.9 内聚

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

几种内聚的区分:

  1. 偶然内聚:各个元素没有实质性联系。
  2. 逻辑内聚:不同功能混在一起,合用部分程序代码。
  3. 时间内聚:一个模块包含的任务必须在同一段时间内执行
  4. 过程内聚:模块内必须以特定次序执行。
  5. 通信内聚:所有元素都使用同一个输入数据产生同一个输出数据。
  6. 顺序内聚:处理必须顺序执行。
  7. 功能内聚:所有元素处理属于一个整体,完成一个单一的功能。

重内聚的优劣评分:

	功能内聚 10分

    顺序内聚  9分        

    通信内聚  7分

    过程内聚  5分

    时间内聚 3分  

    逻辑内聚  1分

    偶然内聚  0 分

4.10 扇出的定义

扇出 是一个模块直接控制(调用)的模块数目。

4.11 描述软件结构的图形工具

几种图形工具的区别(选择题)

  • 层次图

    https://i-blog.csdnimg.cn/blog_migrate/f7a7f7dc1d48896e1fe8942959868c88.png

    自顶向下设计软件的过程

  • HIPO图

    带编号的层次图

  • 结构图

    带箭头表示模块的调用关系

5. 详细设计

5.1 根本目标

详细设计阶段的根本目标是: 确定应该怎样具体地实现所需要的系统

5.2 任务

详细设计阶段的任务 :不是具体地编写程序,而是要设计出程序的“蓝图”,以后根据这个“蓝图”写出实际的程序代码。

详细设计的结果基本上决定了最终地程序代码的质量

5.3 三种基本的控制结构

顺序、选择和循环

5.4 判定表

判定表能清晰地表示复杂的条件组合与应做的动作之间的对应关系。(判定树和判定表概念一样,选判定表)

5.5 判定树

判定树是判定表的变种,它也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。

5.6 过程设计语言

P128页,过程设计语言那里前两段,会选择描述不正确的。

过程设计语言PDL也称为 伪码 ,是用正文形式表示数据处理过程的设计工具。

5.7 程序复杂度

McCabe 方法和 Halstead 方法是程序复杂程度定量度量的两种方法。

5.8 设计题

P141页,3和5题,必考其中之一

https://i-blog.csdnimg.cn/blog_migrate/17ecdb0d7d4ca1eb69c1742e4b593340.png https://i-blog.csdnimg.cn/blog_migrate/8b575b4bc8c1b99ddeb94c2721930fe9.png https://i-blog.csdnimg.cn/blog_migrate/a6edf58056ee6343e9fcd89adc39eb2c.png

6. 实现

6.1 概念

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

所谓 编码 就是把软件设计结果翻译成用某种程序设计语言书写的程序

6.2 程序的质量

程序的质量主要取决于 软件设计的质量

6.3 软件测试

对于软件测试而言, 黑盒测试法 把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。

6.4 测试步骤

  1. 模块测试

    目的:保证每个模块作为一个单元能正确运行,又称单元测试

  2. 子系统测试

    把经过单元测试的模块放在一起形成一个子系统来测试

  3. 系统测试

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

  4. 验收测试

    目的 是验证系统确实能够满足用户的需要,也称确认测试

  5. 平行运行

P151,7.2.4 测试步骤

6.5 单元测试

单元测试集中检测软件设计的最小单元—— 模块

6.6 集成测试

模块组装成程序有两种方法:先分别测试每个模块,再把所有模块按照设计要求结合成所要的程序,这种称为 非渐增式测试方法 ,每次增加一个模块叫 渐增式测试

6.7 自顶向下集成

自顶向下集成方法是一个被人们广泛采用的测试和组装软件的途径。

把附属于(及最终属于)主控制模块的那些模块组装到程序结构中去时,使用 深度优先策略 或者 宽度优先策略

深度优先和广度优先

6.8 确认测试

为验证软件的有效性,应使用确认测试,也称验收测试。

目标是 :验证软件的有效性

6.9 白盒/黑盒测试

白盒测试包括:基本路径测试、条件测试、循环测试。

条件组合覆盖是几种覆盖标准中最强的。

黑盒测试 是把程序看做一个黑盒子,完全不考虑程序的内部结构和处理过程。

黑盒测试技术包括:等价划分、边界值分析、错误推测。

6.10 软件可靠性

保证软件可靠性主要手段是 软件测试

7. 维护

7.1 软件维护

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

7.2 维护活动

四项描述软件交付后可能进行的维护活动:

  1. 改正性维护:诊断和改正错误的过程。
  2. 适应性维护:为了和变化了的环境适当地配合而进行。
  3. 完善性维护:在使用中,用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。
  4. 预防性维护:为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础。

完善性维护 占全部维护活动的50%-66%,改正性维护占17%-21%, 适应性维护 占18%-25%,其他占4%。

来源大佬的:


加油!

感谢!

努力!

68747470733a2f2f62:6c6f672e6373646e2e6e65742f71715f34363039323036312f:61727469636c652f64657461696c732f313232303231373734