计算机科学导论:第十章 软件工程

十 软件工程

软件工程是建立在这样一个基础上,即利用合理的工程方法和原则来获得在真实机器上工作的 可靠软件

10.1 软件的生命周期

计算机科学导论:第十章 软件工程

软件最初由开发者小组开发。通常,在它需要修改之前会使用一段时间。

由于软件中会发现错误、设计改变规则或公司本身发生变化,这些都导致需要经常修改软件。

为长久使用考虑软件应该被修改。使用和修改,这两个步骤一直进行下去直到软件过时。

“过时”意味着因效率低下、语言过时、用户需求的重大变化或其他因素而导致软件失去它的有效性。

开发过程模型

开发过程包括4个阶段:分析设计实现 和 测试

最常见的两种开发 过程模型

  1. 瀑布模型: 开发过程只有一个方向的流动,这意味着前一个阶段不结束,后一个阶段不能开始

计算机科学导论:第十章 软件工程
  • 优缺点
    • 优点:在下一个阶段开始前每个阶段已经完成
    • 缺点:如果过程中一部分有问题,必须检查整个过程
  1. 增量模型(迭代模型): 软件的开发要经历一系列步骤。开发者首先完成整个系统的一个 简化版本
    这个版本表示了 整个系统,但不包括 具体的细节

计算机科学导论:第十章 软件工程

10.2 分析阶段

整个开发过程 始于 分析阶段,这个阶段生成 规格说明文档
这个文档说了软件要做什么,而没有说明如何去做

分析阶段的两种独立方法

  • 面向过程分析:依赖于实现阶段使用过程编程语言
  • 面向对象分析:依赖于实现阶段使用面向对象编程语言

面向过程分析

如果实现阶段使用 过程式语言,那么面向过程分析(也称为结构化分析或经典分析)就是分析阶段使用的方法。

这种情况下的规格说明有使用多种建模工具

  • 数据流图: 数据流图显示了系统中数据的流动。

计算机科学导论:第十章 软件工程
  • 实体关系图: 用于数据库设计
  • 状态图: 它通常用于当系统中的实体状态在响应事件时将会改变的情况下

计算机科学导论:第十章 软件工程

面向对象分析

如果实现阶段使用 面向对象语言,那么面向对象分析就是分析阶段使用的方法。

规格说明文档至少使用下列几个工具,

  • 用例图: 给出了系统的用户视图:它显示了用户与系统间的交互。

计算机科学导论:第十章 软件工程
  • 4种组件
    • 系统用例动作者 和 关系
      • 系统(用矩形表示) 执行功能。
      • 系统中的行动由 用例(圆角的矩形) 显示
      • 动作者(线条人物)是使用系统的某人或某事。
  • 类图:

计算机科学导论:第十章 软件工程
  • 状态图: 类图完成之后,就可以为类图中的每个类准备状态图。
    面向对象分析中的状态图 与 面向过程分析中的状态图起相同作用。

10.3 设计阶段

设计阶段 定义系统如何完成在分析阶段所定义的需求。在设计阶段,系统所有的组成部分都被定义

10.3.1 面向过程设计

既要设计过程,也要设计数据,整个系统被分解成一组 过程 或 模块

结构图: 说明 模块间 关系的常用工具

计算机科学导论:第十章 软件工程

模块化: 将大项目分解成较小的部分,以便能够容易理解和处理。换言之,模块化意味着将大程序分解成能互相通信的小程序。

当系统被分解成模块时,主要关心两点: 耦合 和 内聚

  • 耦合: 是对两个模块相互绑定 紧密程度 的度量,越紧耦合的模块,独立性越差,
    所以设计时,尽量松散耦合
  • 松耦合的好处
  1. 松散耦合的模块更可能被重用
  2. 松散耦合的模块不容易在相关模块中产生错误
  3. 系统需要修改时,松散耦合只需要修改一部分模块,而不影响其他模块
  • 软件系统中模块间的耦合必须最小化
  • 内聚: 是程序中处理过程相关紧密度的度量
  • 软件系统模块间的内聚必须最大化

高内聚 松耦合

10.3.2 面向对象设计

在面向对象设计中,设计阶段通过 详细描述 类的 细节 来实现

计算机科学导论:第十章 软件工程

类是由一组变量(属性)和一组方法组成,面向对象设计阶段列出这些属性和方法细节

10.4 实现阶段

语言的选择: 选择合适的开发语言

软件质量

计算机科学导论:第十章 软件工程

10.5 测试阶段

测试阶段的目标就是 发现错误,这就意味着良好的测试策略能发现最多的错误。
有两种测试:白盒测试和黑盒测试

计算机科学导论:第十章 软件工程

10.5.1 白盒测试

白盒测试(或玻璃盒测试)是基于 知道软件内部结构 的。测试的目的是检查软件所有部分是否全部设计出来,
白盒测试假定测试者知道有关软件的一切,程序就像一个玻璃盒子,其中的每件事情都是可见的

4个标准

  1. 每个模块中的所有独立的 路径至少被测试过一次
  2. 所有的判断结构(两路或多路的) 每个分支都被测试
  3. 每个循环都被测试
  4. 所有数据结构都被测试

基本路径测试

软件中 每条语句至少被执行一次 的方法

计算机科学导论:第十章 软件工程

控制结构测试

包含基本路径测试

  1. 条件测试: 检查是否所有的 条件都被正确设置
  • 条件测试应用于模块中的条件表达式
    • 简单条件 是关系表达式
    • 复合条件 是简单条件和逻辑运算符的组合
  1. 数据流测试: 数据流测试是基于通过模块的数据流的。
  • 测试用例涉及检查 变量 的值。
  1. 循环测试: 检查 循环的正确性
  • 所有类型的循环(while、do 和 for)被仔细测试。

10.5.2 黑盒测试

在不知道程序的内部也不知道程序是怎么工作的情况下测试程序,程序就像一个看不见内部的黑盒,
黑盒测试按照软件应该完成的 功能 来测试

几种黑盒测试方法

  1. 穷尽测试: 最好的黑盒测试方法就是 输入域 中的 所有可能 的值去测试软件
  2. 随机测试: 选择输入域的值的子集来测试,子集的选择方式是非常重要的
  3. 边界测试: 当遇到边界值时,错误经常发生

10.6 文档

通常软件有三种独立的文档:

  1. 用户文档: 它通常包含一个教程指导用户熟悉软件包的各项特性
  2. 系统文档: 让原始开发人员之外的人能够维护和修改软件包
  3. 技术文档: 描述了软件系统的安装和服务

文档是一个持续的过程

  • 如果软件在发布之后有问题,也必须写文档。
  • 如果软件被修改,那么所有的修改和与原软件包间的关系都要被写进文档。
  • 只有当软件包过时后,编写文档才停止。

来源:编程进阶之路

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月8日
下一篇 2021年7月8日

相关推荐