第一章:软件与软件工程
软件工程三要素是方法、工具、过程。
软件开发模型
软件开发模型又称为软件过程模型。
软件过程模型是对软件开发实际过程的抽象和简化。
目前典型的有瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。
- 瀑布模型
主要思想:
软件开发过程与软件生命周期一致;
相领二阶段存在因果关系;
需要对阶段性产品进行评审
优点:
软件开发过程具有系统性,可控性,客服了软件开发的随意性;
每个阶段都有产出,非常经典的模型
缺点:
项目开始阶段用户很难精确提出产品需求,由于技术进步,用户对系统深入的理解,修改需求十分普遍。每个阶段都依赖于上一阶段,不能应对客户需求变更;
项目开发晚期才能得到程序运行版本,这时修改软件需求和开发的错误代价很大;
采取线性模型组织项目开发经常发生小组成员“堵塞状态”。
- 增量模型
增量模型是一个非整体开发的模型。
先开发核心模块,按照模块一个个开发。
- 快速原型
- 螺旋模型
- 其他
软件开发方法
软件开发方法分为两大类:
①面向过程的开发方法
②面向对象的开发方法
结构化开发方法:
现有软件开发方法中最成熟,应用最广泛的方法,特点是快速、自然和方便。
面向对象方法
四个要点:对象;类;父类(基类)和子类(派生类);消息
模拟人类习惯的思维方式,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
信息系统开发方法
第三章:需求分析基础
软件生命周期
需求工程
功能需求、非功能需求、领域需求
没有需求就没有软件。
软件需求的困难:
- 应用领域的广泛性;
- 非功能性需求建模技术缺乏
- 沟通上的困难
需求分析的作用
需求工程的基本活动
- 获取需求
- 需求分析与建模
- 确认需求
- 进化需求
获取需求
非常困难
原因:
需求获取方法:
需求分析与建模
包含三个层次工作:
需求分析
需求建模
需求规格说明——不同的描述方式
需求的有效性验证
由于需求是软件开发的第一阶段,直接影响后面各阶段的开发。
需求的可变性必须进行验证。
需求验证的内容:
- 有效性检查
- 一致性检查
- 完备性检查
- 可检验性检查
需求管理
3.需求分析方法
3.1 功能分解方法
3.2 结构化分析方法
数据流图(DFD图):是一种以数据、数据的封闭性为基础,从问题空间到某种表示的映射方法。
ER图:E-实体。是一个或一组对象;R-关系。
面向对象的分析方法(OOA)
SA法的描述方法:
1.分层的数据流图(DFD图)
2.数据词典
3.描述加工逻辑的结构化语言、判定表和判定树
数据流图DFD
数据字典DD
加工说明
判定表
4.结构化分析流程
SA法的基本思想:“分解”和“抽象”
分解:对于一个复杂的系统,为了将复杂度降低到可以掌握的程度,可以把大问题分解成若干小问题,然后分别解决。
抽象:分解可以分层进行,即先考虑问题最本质的属性,暂时把细节略去,以后再逐层添加细节,直至设计最详细的内容,这种用最本质的属性表示一个系统的方法就是“抽象”。
软件设计基础
软件设计过程
软件开发的信息流——
设计任务分类:
系统结构设计、数据设计、过程设计、界面设计
软件设计的目标 就是构造一个高内聚低耦合的软件模型
软件设计准则
- 原则1:软件结构的准则
- 原则2:模块化设计
模块个数的标准:7±2 - 原则3:独立性原则
高内聚、低耦合
内聚:
巧合性内聚
逻辑性内聚
时间内聚
过程内聚
通信内聚
信息内聚
功能内聚
耦合
2.软件架构设计
体系结构的设计过程的主要活动:
- 系统分解
- 控制建模
- 模块分解
2.1 仓库模型
- 各子系统共享中央数据库中的数据——共享容器模型
- 各子系统可以有自己的数据库,子系统之间通过信息传递实现数据交换
优缺点
2.2 客户机/服务器模型(C/S)
客户机:向服务器发送请求
服务器:响应请求,进行相应操作,将结果回传给客户机,客户机再将格式化的结果呈现给用户
三级/多级应用模型
2.3 分布式对象结构
2.4 抽象机模型
2.5 控制模型
结构化设计
SD方法的阶段
- 总体设计(任务:解决系统的模块结构,即分解模块,确定模块功能和系统模块的层次结构)
- 详细设计(对模块图每个模块的过程进行描述)
SD法的设计步骤:
1.从DFD图导出初始的模块结构图(SC)
2.按照SD法设计总则,改进模块结构图
软件:
层次性:反映软件整体的性质(结构图)
过程性:反映局部的性质(框图)
模块结构图的改进
设计总则:“降低块间联系,提高块内联系”提高内聚,减少耦合
(1)尽可能建立功能模块
功能模块具有最强的内聚性,应满足信息屏蔽原则:一个模块内包含的信息对不需要这些信息的模块是不能访问的。
(2)消除重复功能
(3)控制范围
(4)模块大小适宜
50-100行
(5)模块的扇入扇出不宜过多
详细设计工具
常用的描述方法工具
1.流程图
2.结构化流程图(N-S图)