软件生命周期(3个时期)
1.软件定义:问题定义阶段——>可行性研究阶段——>需求分析阶段
2.软件开发:总体设计阶段——>详细设计阶段——>编码和单元测试阶段——>综合测试阶段
3.运行维护:改正性维护、适应性维护、完善性维护、预防性维护
设计分为概要设计和详细设计
概要设计:软件需求——>数据结构和软件系统结构 ,即系统的模块划分(不涉及算法)
详细设计:细化每个模块的内部工作,得到详细的数据结构和算法
一、总体设计
1.设计过程
1.1 总体设计过程分为两个阶段:
系统设计阶段:确定系统的具体实现方案
结构设计阶段:确定软件结构
2.设计原理
2.1模块化:每个模块完成一个子功能
2.2抽象:过程抽象+数据抽象
2.3逐步求精:(自顶向下)尽量推迟对问题细节的考虑
2.4信息隐藏和局部化
2.5模块独立性:耦合和内聚
它是模块化、抽象、信息隐藏和局部化概念的结果
2.5.1耦合
非直接耦合:无直接联系
数据耦合:简单数据参数
标记耦合:一组模块通过参数表传递记录信息(某一数据结构,不是简单变量)
控制耦合:在单一接口上选择多功能模块中的某项功能
外部耦合:一组模块访问统一全局简单变量(而且不是通过参数传递)
公共耦合:一组模块访问同一个公共数据环境
内容耦合
2.5.2 内聚
偶然内聚
逻辑内聚:单接口多功能模块
时间内聚
过程内聚
通信内聚
顺序内聚
功能内聚
3.启发式规则
降低耦合提高内聚
4.图形工具
层次图
HIPO图(带结构的层次图)
结构图:模块间的隶属关系
4.面向数据流的设计方法(SD方法、结构化设计方法)
把信息映射成软件结构
5.体系结构风格
二、详细设计
根本目的:确定应该怎样具体的实现所要求的系统
包括:接口设计和过程设计
1.结构程序设计
结构化程序设计是详细设计的逻辑基础
经典定义:顺序、选择、循环三种基本控制结构,并且每个代码块只有一个入口和一个出口
扩展的:加上DO-CASE和DO-UNTIL
修正的:再加上LEAVE(或BREAK)
2.过程设计工具
2.1图形工具
程序流程图
盒图(N-S图)
PAD图
2.2表格工具
判定表:表示静态逻辑,不能称为一种通用的设计工具
2.3语言工具
判定树(PDL):伪代码
3.人机界面设计
基于计算机的系统或产品的最重要的元素
3.1黄金规则
赋予用户控制权
减少用户记忆负担
保持界面一致
3.2设计过程
用户、任务和环境分析及建模
界面设计
界面构造
界面确认
4.程序复杂程度的定量度量
McCabe方法
三、编码
四、测试