四、需求分析
1、基本概念
(1):需求任务
需求做什么?
(2):需求过程
1.问题识别:识别需求解决的问题
2.分析与综合
3.产物:编制需求分析文档(需求规格说明书 SRS)
4.需求分析与评审
结构化分析结果:一套分层的数据流图,一本数据词典,一组小说明(加工逻辑说明),补充材料,实体联系图(ER图,数据库设计,概念设计阶段产物)
2、分类
(1):分类
1.业务需求(整体全局)
2.用户需求(用户视角)
3.系统需求(计算机化)
>功能需求,功能点
>非功能需求,明显的数字化(性能上的需求:响应并发、存储容量)
>设计约束,规章制度
例:某企业财务系统需求中,属于功能需求的是(A)
A:每个月特定时间给员工发放工资、B:系统的响应时间不超过3s、C:系统的计算经度符合财务规则的要求、D:系统可以允许100个用户同时查询自己的工资
解:
A:每个月特定时间给员工发放工资:功能需求
B:系统响应时间不超过3s:非功能需求(响应)
C:系统的计算经度符合财务规则的要求:设计约束
D:系统可以允许100个用户同时查询自己的工资:非功能需求(并发)
(2):QFD
1.基本需求(明确的常规需求)
2.期望需求(隐含的)
3.兴奋需求(多余的,不应该完成,没有价值)
3、工具
(1):应用工具
数据流图(DFD)、数据字典(DD)、判定表、判定树
(2):数据流图
自顶向下,逐步求精,从抽象到具体,设计阶段:接口设计的主要依据
原则:
(1)数据守恒原则:对任何一个加工来说,其所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者说是通过该加工能产生的数据。
(2)守恒加工原则:对同一个加工来说,输入与输出的名字必须不相同,即使它们的 组成成分相同。
(3)对于每个加工,必须既有输入数据流,又有输出数据流。
(4)外部实体与外部实体之间不存在数据流
(5)外部实体与数据存储之间不存在数据流
(6)数据存储与数据存储之间不存在数据流
(7)父图与子图的平衡原则:子图的输入输出数据流同父图相应加工的输入输出数据 流必须一致,此即父图与子图的平衡。父图与子图之间的平衡原则不存在于单张图。
(8)数据流与加工有关,且必须经过加工。
)1:概念
图元:

流图:

)2:数据平衡原则
1.父图(顶层图)与子图(0层图)之间的平衡
父图与子团之间的平衡是指:任何一张DFD子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据流保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么他们仍然是平衡的
2.子图内平衡
加工常见的三种错误:
>黑洞:只有输入没有输出
>奇迹:只有输出没有输入
>灰洞:加工中输入不足以产生输出(输入输出不对等)
)3:答题技巧
1.补充实体:如:人物角色(客户/管理员/学生/老师/···),组织机构(银行/供应商/募捐机构/···),外部系统(银行系统/工资系统/后台数据库/···)
2.补充存储(存储的文字数据方面特征):如:**文件,**表,**库,**清单,**档案
3.补充加工名:动词+名词/名词+动词(生成报告,批改作业,物流跟踪,用户管理)
4.补充数据流:数据平衡原则,按题目说明与图进行匹配
)4:例题1



分析:
1.实体:非信用卡客户,信用卡客户,银行
2.加工:申请,激活,管理,查询,
3.存储:申请表,信用卡表,客户表
4.数据流:
>非信用卡客户 =申请》CCMS =拒绝》非信用卡客户
>非信用卡客户 =申请》CCMS =确认》信用卡客户 =激活申请》CCMS =是否成功》信用卡客户
>信用卡客户 =查询交易》CCMS =反馈查询交易结果》信用卡客户
>信用卡客户 =管理》CCMS =反馈》信用卡客户
解:
问题1:E1非信用卡客户,E2信用卡客户,E3银行
问题2:非信用卡客户 =申请信用卡》CCMS,信用卡客户 =激活申请》CCMS,CCMS =交易记录》信用卡客户
问题3:激活请求E2 =》P3,信用卡申请表E1 =》P4
问题4:P1交易查询,P2客户信息管理,P3激活信用卡,P4申请信用卡
)5:例题2


分析:
1.实体:客户服务助理,客户,经纪人,平台
2.加工:开户,存款,取款,证券交易,检查交易
3.存储:客户记录表,账户信息表,交易记录表
4.数据流:
>客户服务助理 =开户》平台 =写表》客户记录表
>客户=存款/取款》平台 =写表》账户信息表
>客户/经纪人 =证券交易》平台 =写表》交易记录表
>交易记录表 =读表》平台 =检查交易》客户
解:
问题1:E1客户服务助理,E2客户,E3经纪人
问题2:D1客户记录表,D2账户信息表,D3交易记录表
问题3:E2 =存款/取款》D2,E2 =证券交易(在线)》D3,E3 =证券交易(电话)》D3
问题4:新增外部实体:证券交易中心。图1-1证券交易平台被输入证券交易后,将交易信息作为数据流输入到证券交易中心当中。图1-2将E2 证券交易(在线)的加工 数据流输出到证券交易中心,将E3 证券交易(电话)的加工 数据流输出到证券交易中心。
)6:例题3




分析:
1.实体:客户,医生,主管,药品
2.加工:信息查询,医生聘用,预约处理,药品管理,报表创建
3.存储:通用信息表,医生表,出诊时间表,药品库存表,预约表
4.数据流:
>客户 =查询》通用信息表 =》客户
>医生 =应聘/辞职》主管 =审批》医生表
=审批》医生
=审批》出诊表
>医生 =安排出诊时间》出诊表
>客户 =预约查询》医生表+出诊表 =》客户
>客户 =提交预约申请》平台 =》预约表
=》出诊表
=》医生
=》客户
>医生 =查询药品》药品库存表 =》医生
>医生 =提交处方》平台 =》药品库存表/预约表 =》医生
>主管 =查询》通用信息表,医生表,出诊时间表,药品库存表,预约表 =创建报表》主管
解:
问题1:E1客户,E2主管,E3医生
问题2:D1通用信息表,D2预约表,D3医生表,D4出诊时间表,D5药品库存表
问题3:
P2 =删除》D4
D5 =开药方查询药品库存反馈》P4
P4 =开药方更新预约表》D2
P3 =预约更新出诊时间》D4
问题4:
分解:安排出诊,预约查询,创建预约,结果反馈
平衡:(数据平衡原则)父图与子团之间的平衡是指:任何一张DFD子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据流保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么他们仍然是平衡的
(3):数据字典
包含条目:数据流、数据项、数据存储、基本加工(源点和终点(外部实体)不在系统之内,不在字典说明中)
|--------------------------|------|-----------------------------------|
| 符号 | 含义 | 说明- |
| = | 被定义为 | |
| + | 与 | x=a+b,表示x为a和b组成 |
| ···,···或···\|··· | 或 | x=a,b或x=a\|b,表示x由a组成或由b组成 |
| {···} | 重复 | x={a},表示x由0或多个a组成 |
| (···) | 可选 | x=(a),表示a可以在x中出现,也可以不出现 |
例:数据字典
机票=姓名+日期+航班号
航班号=Y7100
终点=上海\|北京\|广州\|太原
(4):其他工具
)1:结构化语言(伪代码)
结构化语言:介于自然语言(口述)与形式化语言(较为严谨,非常明确)之间
DO{
IF()
······
ENDIF
}ENDDO
)2:判定表
根据条件作出相应动作
|-----|---------------|---------------|---------------|
| 条件 | 1 | 2 | 3 |
| ··· | T/F | T/F | T/F |
| 动作 | | | |
| ··· | do/do nothing | do/do nothing | do/do nothing |
)3:判定树

五、系统设计
1、概述
(1):软件设计的任务与活动
)1:概要设计(大致划分)
1.划分子系统/模块
2.分配任务
3.抽象化
4.自顶向下,逐步求精
)2:详细设计(内部设计)
1.模块与模块之间的关系
2.模块独立(高内聚、低耦合)
3.信息隐蔽
)3:体系结构设计
定义软件系统各主要部件之间的联系
)4:数据设计(数据建模)
基于ER图,确定软件涉及的文件系统的结构及数据库的表结构
)5:接口设计(人机界面设计)
软件内部,软件和操作系统间以及软件和人之间如何通信
)6:过程设计
软件结构部件转换成软件的过程描述:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法
(2):应用工具
1.IPO图(输入输出图)
2.PDL(伪代码)
3.PDA
4.程序流程图(处理过程建模)
5.N/S盒图(条件矩形)
2、模块设计
(1):原则
1.保持模块大小的适中
2.尽可能减少调用的深度(调用层次不要太深)
3.多扇入,少扇出,数量适中(扇入:被调用,扇出:调用)
4.单入口,单出口
5.模块的作用域应该在模块之内
6.功能应该是可预测的
7.高层依赖于低层
8.高内聚,低耦合
>内聚性:聚合程度(所有模块/功能聚集在一起处理一件事情)

|------------|-----------------------------|
| 内聚类型 | 描述 |
| 功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
| 顺序内聚 | 处理元素相关,而且必须顺序执行 |
| 通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
| 过程内聚 | 处理元素相关,而且必须按特定的次序执行(可以不按顺序) |
| 瞬时内聚(时间内据) | 所包含的任务必须在同一时间间隔内执行 |
| 逻辑内聚 | 完成逻辑上相关的一组任务 |
| 偶然内聚(巧合内聚) | 完成一组没有关系或松散关系的任务 |
>耦合性(模块/功能之间的关联,紧密程度)

|-------|-------------------------------------------------------------------|
| 耦合类型 | 描述 |
| 非直接耦合 | 两个模块之间没有直接关系,他们之间的联系完全是通过主模块的控制和调用来实现的 |
| 数据耦合 | 一组模块借助参数表传递简单数据 |
| 标记耦合 | 一组模块借助参数表传递记录信息(数据结构) |
| 控制耦合 | 模块之间传递的数据中包含用于控制模块内部逻辑的信息 |
| 外部耦合 | 一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息 |
| 公共耦合 | 多个模块都访问同一公共数据环境 |
| 内容耦合 | 一个模块直接访问另一个模块的内部数据;一个模块不通过正常的入口转到另一个模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口 |
3、人机界面设计(接口设计)
黄金三原则:
1.置于用户控制之下:允许用户的交互终端或取消,不脱离用户控制
2.减少用户的记忆负担:提高易学性和易用行,如:见图标就明白功能
3.保持界面的一致性:建立了用户期望就不要轻易修改
4、架构设计
达到架构级的软件复用
(1):架构风格
反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效的组织成一个完整的系统
定义了用于描述系统的术语表,和一组指导构建系统的规则
)1:分类
1.数据流风格:批处理序列、管道过滤器
>批处理:串行,数据必须是完整的,以整体方式传递
>管道过滤器:并行,早期编译器就是采用这种架构(词法分析=>语法分析=>语义解析···),要一步一步的处理,均可考虑采用此架构风格
2.调用/返回风格:主程序/子程序、面向对象、层次结构(MVC、C/S、B/S)
>主程序/子程序:单线程控制,结构化开发,依次调用
>面向对象:构件看做对象,显式调用,可以明确看到谁调用了谁
>层次结构:分层,可以与高层解耦,软件复用非常强大。但是分层过多,性能会下降

3.独立构建风格:进程通信、事件驱动系统(隐式调用)
>进程通信:构件是独立过程,连接件是消息传递
>事件驱动系统(隐式调用):触发或广播
4.虚拟机风格:解释器、基于规则的系统
>解释器:输入语句代码 ==解释器解释==》指令
>基于规则的系统:>解释器:输入语句代码 ==规则转换==》指令
5.仓库风格(以数据为中心):数据库系统、超文本系统、黑办系统
>数据库系统:包含数据源与处理单元,支持可更改和可维护性,具有可复用的只是源,支持容错性和健壮性(可备份数据)
>黑办系统:知识源响应通过黑板变化来控制
>超文本系统:互联网领域