一、形式化说明技术
1.1形式化概念
(课本中遇到的大部分是非形式化的技术
概念:所谓形式化方法,是描述系统性质的基于数学的技术,
如果一种方法有坚实的数学基础,那么就是形式化的。
1.2形式化的优点和非形式化的缺点
1.2.1 非形式化的缺点
用自然语言书写的系统规格说明书,可能存在矛盾,二义性,含糊性,不完整性以及抽象层次混乱等问题。
1.2.2 形式化四个优点
- 数学能够简介准确地描述物理现象、对象或动作的结果。是理想的建模工具。
- 数学比自然语言更适用于描述详细的需求
- 可以在不同软件工程中平滑地过渡
- 提供了高层确认的手段
1.3应用形式化的准则
- 应该选用适当的表示方法。
- 应该形式化,但不要过分形式化。
- 应该有形式化方法顾问随时提供咨询
- 不应该放弃传统的开发方法
- 应该建立详尽的文档。
- 不应该盲目依赖形式化方法
- 应该测试、测试再测试
- 应该重用。(重用是减低软件成本和提高软件质量的唯一合理方法,也只有高质量的才会被拿来重用
二、总体设计(概要设计
2.1 主要目的
产出文档:《总体设计说明书》
基本目的:概括地说明系统应该如何实现。
两个主要阶段:
- 系统设计阶段,确定系统的具体实现方案
- 结构设计阶段,确定软件结构
2.2主要流程
- 设想供选择的方案(枚举
- 选取合理的方案(筛选
- 推荐最佳方案
- 功能分解(化繁为简
- 设计软件结构(使顶层软件调用下层软件
- 设计数据库
- 指定测试计划
- 书写文档
- 审查+复审
2.3模块设计原理
1.模块化:把程序划分成独立命名且可以独立访问的模块,每个模块完成一个子功能,
把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
模块化的优点:
- 使软件结构清晰,不仅容易设计也容易阅读和理解
- 使软件容易测试和调试,有助于提高软件的可靠性
- 提高软件的可修改性
- 有助于软件开发工程的组织管理
**2.抽象:**抽出事务的本质特性,暂时不考虑细节
抽象优点:
5. 简化了软件的设计和实现
6. 提高了软件的可理解性和可测试性
7. 使得软件更容易维护。
**3.信息隐藏和局部化:**使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。隐藏的不是有关模块的一切信息,而是模块的实现细节。
局部化: 把关系密切的软件元素放得彼此靠近。
优点:因为绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。
**4.模块独立:**是模块化、抽象、信息隐藏和局部化概念的直接结果
高内聚 低耦合
耦合: 对一个软件结构内不同模块之间互连程度的度量
松—>密:
无直接耦合、数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合
**内聚:**标志一个模块内各个元素彼此之间结合的紧密程度
低->高:
偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚
2.4启发规则
- 要提高软件的模块独立性
- 模块规模应该适中,不要太大
- 深度、宽度、扇出、扇入都应当适当
- 作用域要在控制域内
- 要降低模块接口的复杂度
- 设计单入单出的模块
- 模块的功能要可以预测,同时避免模块功能过*限。
2.5常用的图形工具
- 层次图
- HIPO图
- 结构图
- 数据流图
2.6面向数据流的方法(结构化设计方法、基于数据流的设计方法
面向数据流的设计方法把【信息流】映射成软件结构
数据流图分为变换流和事物流
三、详细设计
3.1 主要目的
确定应该怎么具体地实现所要求的系统
详细设计的结果基本上决定了代码的质量
3.2模块怎么具体设计
三种控制结构——顺序、选择、循环,就可以实现任何单入口单出口的软件,尽量不用go to语句
3.3人机界面设计的问题
- 系统响应时间(用户做出操作到软件给出相应的时间
两个属性:长度,易变性
**长度:**响应时间不宜过长过短
**易变性:**越低越好,越低说明越稳定 - 用户帮助设施
常见措施分为两类:集成的和附加的。
集成的优于附加的, - 出错信息处理
出错信息或警告信息可以给用户建设性意见,不能含有指责色彩 - 命令交互
- 类似ctrl+c
3.4过程设计的常见工具
程序流程图
盒图
PAD图
判定表/树
过程设计语言(伪码PDL)
3.5程序复杂度的度量
把程序流程图变为流图后计算环形复杂度
计算环形复杂度的方法
- 1.流图中线性无关的区域数等于环形复杂度
- 2.流图G的环形复杂度V(G)=边条数-节点数+2
- 3.流图G的环形复杂度V(G)=判定节点数+1
- 环形复杂度<=10为宜