十 软件工程
软件工程是建立在这样一个基础上,即利用合理的工程方法和原则来获得在真实机器上工作的 可靠软件
10.1 软件的生命周期
软件最初由开发者小组开发。通常,在它需要修改之前会使用一段时间。
由于软件中会发现错误、设计改变规则或公司本身发生变化,这些都导致需要经常修改软件。
为长久使用考虑软件应该被修改。使用和修改,这两个步骤一直进行下去直到软件过时。
“过时”意味着因效率低下、语言过时、用户需求的重大变化或其他因素而导致软件失去它的有效性。
开发过程模型
开发过程包括4个阶段:分析、设计、实现 和 测试
最常见的两种开发 过程模型
- 瀑布模型: 开发过程只有一个方向的流动,这意味着前一个阶段不结束,后一个阶段不能开始
-
优缺点
- 优点:在下一个阶段开始前每个阶段已经完成
- 缺点:如果过程中一部分有问题,必须检查整个过程
- 增量模型(迭代模型): 软件的开发要经历一系列步骤。开发者首先完成整个系统的一个 简化版本,
这个版本表示了 整个系统,但不包括 具体的细节
10.2 分析阶段
整个开发过程 始于 分析阶段,这个阶段生成 规格说明文档,
这个文档说了软件要做什么,而没有说明如何去做
分析阶段的两种独立方法
- 面向过程分析:依赖于实现阶段使用过程编程语言
- 面向对象分析:依赖于实现阶段使用面向对象编程语言
面向过程分析
如果实现阶段使用 过程式语言,那么面向过程分析(也称为结构化分析或经典分析)就是分析阶段使用的方法。
这种情况下的规格说明有使用多种建模工具
- 数据流图: 数据流图显示了系统中数据的流动。
- 实体关系图: 用于数据库设计
- 状态图: 它通常用于当系统中的实体状态在响应事件时将会改变的情况下
面向对象分析
如果实现阶段使用 面向对象语言,那么面向对象分析就是分析阶段使用的方法。
规格说明文档至少使用下列几个工具,
- 用例图: 给出了系统的用户视图:它显示了用户与系统间的交互。
-
4种组件
-
- 系统(用矩形表示) 执行功能。
- 系统中的行动由 用例(圆角的矩形) 显示
-
- 类图:
- 状态图: 类图完成之后,就可以为类图中的每个类准备状态图。
面向对象分析中的状态图 与 面向过程分析中的状态图起相同作用。
10.3 设计阶段
设计阶段 定义系统如何完成在分析阶段所定义的需求。在设计阶段,系统所有的组成部分都被定义。
10.3.1 面向过程设计
既要设计过程,也要设计数据,整个系统被分解成一组 过程 或 模块
结构图: 说明 模块间 关系的常用工具
模块化: 将大项目分解成较小的部分,以便能够容易理解和处理。换言之,模块化意味着将大程序分解成能互相通信的小程序。
当系统被分解成模块时,主要关心两点: 耦合 和 内聚。
-
耦合: 是对两个模块相互绑定 紧密程度 的度量,越紧耦合的模块,独立性越差,
所以设计时,尽量松散耦合 - 松耦合的好处
- 松散耦合的模块更可能被重用
- 松散耦合的模块不容易在相关模块中产生错误
- 系统需要修改时,松散耦合只需要修改一部分模块,而不影响其他模块
- 软件系统中模块间的耦合必须最小化
- 内聚: 是程序中处理过程相关紧密度的度量
- 软件系统模块间的内聚必须最大化
高内聚 松耦合
10.3.2 面向对象设计
在面向对象设计中,设计阶段通过 详细描述 类的 细节 来实现
类是由一组变量(属性)和一组方法组成,面向对象设计阶段列出这些属性和方法细节
10.4 实现阶段
语言的选择: 选择合适的开发语言
软件质量
10.5 测试阶段
测试阶段的目标就是 发现错误,这就意味着良好的测试策略能发现最多的错误。
有两种测试:白盒测试和黑盒测试
10.5.1 白盒测试
白盒测试(或玻璃盒测试)是基于 知道软件内部结构 的。测试的目的是检查软件所有部分是否全部设计出来,
白盒测试假定测试者知道有关软件的一切,程序就像一个玻璃盒子,其中的每件事情都是可见的
4个标准
- 每个模块中的所有独立的 路径至少被测试过一次
- 所有的判断结构(两路或多路的) 每个分支都被测试
- 每个循环都被测试
- 所有数据结构都被测试
基本路径测试
软件中 每条语句至少被执行一次 的方法
控制结构测试
包含基本路径测试
- 条件测试: 检查是否所有的 条件都被正确设置。
- 条件测试应用于模块中的条件表达式
- 简单条件 是关系表达式
- 复合条件 是简单条件和逻辑运算符的组合
- 数据流测试: 数据流测试是基于通过模块的数据流的。
- 测试用例涉及检查 变量 的值。
- 循环测试: 检查 循环的正确性。
- 所有类型的循环(while、do 和 for)被仔细测试。
10.5.2 黑盒测试
在不知道程序的内部也不知道程序是怎么工作的情况下测试程序,程序就像一个看不见内部的黑盒,
黑盒测试按照软件应该完成的 功能 来测试
几种黑盒测试方法
- 穷尽测试: 最好的黑盒测试方法就是 输入域 中的 所有可能 的值去测试软件
- 随机测试: 选择输入域的值的子集来测试,子集的选择方式是非常重要的
- 边界测试: 当遇到边界值时,错误经常发生
10.6 文档
通常软件有三种独立的文档:
- 用户文档: 它通常包含一个教程指导用户熟悉软件包的各项特性
- 系统文档: 让原始开发人员之外的人能够维护和修改软件包
- 技术文档: 描述了软件系统的安装和服务
文档是一个持续的过程。
- 如果软件在发布之后有问题,也必须写文档。
- 如果软件被修改,那么所有的修改和与原软件包间的关系都要被写进文档。
- 只有当软件包过时后,编写文档才停止。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!