软件设计与编码
3 第三 章软件设计阶段的任务与目标软件设计是对实现软件的结构,系统的数据,系统组件之间的接口以及所用算法的描述 。
软件设计是软件开发的关键步骤,直接影响软件的质量 。
在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件,做什么,的问题,
并已在软件需求说明书和数据要求说明书中详尽和充分地阐明了这些需求以后,下一步就要着手实现软件的需求,即软件设计阶段要解决,怎么做,的问题 。
3.1 软件设计阶段的任务与目标设计过程的一般模型需求描述体系结构设计 抽象描述 接口设计 组件设计 数据结构 设计系统体系结构 软件描述 接口描述 组件描述 数据结构 描述 算法描述算法设计设计活动设计产品
3.1.1 软件设计在开发阶段中的重要性软件设计功能与性能需求编码 软件测试程序模块 已测试软件过程设计数据结构设计信息域需求开发阶段信息流
3.1.1 软件设计在开发阶段中的重要性软件设计阶段要解决,如何做,的问题 。 这显然是整个软件开发过程的核心问题,所有的开发工作都将根据设计的方案进行 。 系统的总体结构在该阶段决定,因此软件的总体设计决定了系统的质量 。
系统结构设计定义软件系统的整体结构,是软件开发的核心步骤 。 在设计步骤中,建立软件主要成份之间的关系 。
过程设计则是把结构成份转换成软件的过程性描述 。
在 编码 步骤中,根据这种过程性描述,生成源程序代码,
然后通过 测试,最终得到完整有效的软件 。
3.1.2 软件设计阶段的任务总体设计需求说明书复审软件结构修 改详细设计可接受 模块描述 复审修 改设计说明书软件设计工作流程
3.1.2 软件设计阶段的任务一,软件设计的任务从工程管理的角度来看,软件设计分两步完成;分为总体设计 ( 概要设计 ) 和详细设计两个阶段 。 其工作流程如图所示 。
首先做概要设计,将软件需求转化为数据结构和软件的系统结构 。 然后是详细设计,即过程设计 。 通过对结构表示进行细化,得到软件详细的数据结构和算法 。
三类设计任务
1,划分模块,确定软件结构开发方法不同,确定软件结构的方法也不同 。 例如 SD法,
是从分层的 DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图 。
一般包括确定系统的软件结构,分解模块,确定系统的模块层次关系 。
2,确定系统的数据结构数据结构的建立对于信息系统而言尤为重要 。 要确定数据的类型,组织,存取方式,相关程度及处理方式等 。
3,设计用户界面作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命 。
因此,软件设计阶段的任务可分为三部分:
软件设计的目标3.1.2 软件设计阶段的任务软件设计高可靠性 高可维护性高可理解性高效率软件设计的目标
3.1.2 软件设计阶段的任务二,软件设计的目标在设计阶段应达到的目标是,
提高可靠性;提高可维护性;提高可理解性;提高效率 。
衡量该目标的准则,
1,软件实体有明显的层次结构,利于软件元素间控制 。
2,软件实体应该是模块化的,模块具有独立功能 。
3,软件实体与环境的界面清晰 。
4,设计规格说明清晰,简洁,完整和无二义性 。
软件设计的目标常用的设计方法有,SD法,Jackson法,HIPO法,Parnas法、
Warnier法等。
3.2 软件结构与软件结构图
3.2 软件结构与软件结构图软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量 。 模块之间的关系可有多种,但都可以归结为一种层次关系 。
软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素 ——模块及模块之间的调用关系,模块之间的数据传递关系。
本节讨论如何进行软件结构的设计,设计的准则以及为了提高软件系统的质量,如何对软件结构进行改进的技术。
3.2.1 软件结构的基本概念二,模块化模块化就是将系统划分为若干个模块,每个模块完成一个子功能 。 模块化的目的是将系统,分而治之,,模块化能够降低问题的复杂性,使软件结构清晰,易阅读,易理解,
易于测试和调试,因而也有助于提高软件的可靠性 。
3.2.1软件结构的基本概念软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图 。 下面先介绍几个相关的的概念 。
A
B C D
E F G H I
J K L M
一,模块 ( Module)
模块是程序对象有名字的集合 。 例如,过程,函数,子程序,宏等,是构成软件系统结构的基本元素 。
软件结构图模块化降低软件复杂度的 简单证明3.2.1软件结构的基本概念模块化降低软件复杂度的 简单证明令,C( X) 表示问题 X 的复杂度函数;
E( X) 解决问题 X 所需工作量的复杂度函数;
若:有问题 P1,P2 ;
C( P1) > C( P2) ;
显然,E( P1) > E( P2)
由经验,C( P1+P2) > C( P1) + C( P2)
于是,E( P1+P2) > E( P1) + E( P2)
将问题 ( P1+P2) 划分为两个问题 P1和 P2
后,其工作量和复杂度都降低 。
并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加 。
显然,每个软件系统都有一个最佳模块数 M。 注意选择分解的最佳模块数 。
右上图描述了模块化与软件成本的关系 。
软件总成本模块化与软件成本的关系成本模块数目模块成本接口成本最小成本区
M
软件的层次结构
3.2.1软件结构的基本概念顶层
1层
2层
A
B C D
E F G H
I J K L M
N
深度扇入为 2
扇出为 3
扇入为 3
3层
4层宽度宽度宽度软件结构示意图有关指标,
⑴ 深度,表示软件结构中从顶层模块到最底层模块的层数 。
⑵ 宽度,表示控制的总分布 。
⑶ 扇出数,指一个模块直接控制下属的模块个数 。
⑷ 扇入数,指一个模块的直接上属模块个数 。
一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数 。
软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构 。 如图所示 。
3.2.2 软件的树状结构和网状结构
3.2.2 软件的树状结构和网状结构由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构 。
在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块 。 与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构 。
树状结构的特点是:
整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系 。
顶层
1层
2层
3层软件的 树状结构
A
B C D
E F G H I
K L M
网状结构在网状结构中,任何两个模块间都可以有双向的关系,不分层次 。 任何两个模块都是平等的,没有从属关系 。
网状结构
( a) ( b)
3.2.2 软件的树状结构和网状结构
A B
C DE
F G H
A
B C
D
比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。
模块 5模块 4
3.2.3 软件结构图( SC图)
模块 1
模块 3模块 2
values
values data data
模块
3.2.3 软件结构图 ( SC图 )
结构图 ( Structure Chart,简称 SC图 ) 是精确表达软件结构的图形表示方法,它以特定的符号表示模块,模块间的调用关系和模块间信息的传递 。 结构图的主要构成有:
⑴ 模块 ( Module),
⑶ 数据:
模块调用图
⑵ 调用,data
数字信息控制信息例,画出打印报告的软件结构图调用次序为上层调用下层; 同层按照数据传递关系确定;一般从左到右执行 。
执行过程即按照数据流向进行 。
报 告计 算获得编辑 确认数据读入 编辑打印报告头 打印报告尾打印输入
EOF 输入已编辑已编辑已编辑已确认已确认数据已确认数据 计算结果结果日期 总结果行行 行
3.2.3 软件结构图( SC图)
打印报告予以确认
3.3 模块的独立性
3.3 模块的独立性上一节讨论了关于软件结构与软件结构图的概念,本节进一步讨论影响软件系统质量的另一个关键问题,模块的独立性问题。
模块化方法已经为所有工程领域所接受。模块化的主要优点是,模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,
从而提高了软件的生产率。
提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。
3.3.1 模块独立性 (moduleindependence)
3.3.1 模块独立性
,模块,,又称,构件,,一般指用一个名字可调用的一段程序 。 它一般具有如下 三个基本属性,
⑴ 功能 即指该模块实现什么功能,做什么事情 。 必须注意:
模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能 。
⑵ 逻辑 即描述模块内部怎么做 。
⑶ 状态 即该模块使用时的环境和条件 。
所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的 。 即功能专一,模块之间无过多的相互作用的模块 。
这种类型的模块可以并行开发,模块独立性越强,开发越容易 。 独立性强的模块,还能减少错误的影响,使模块容易组合,修改及测试 。
3.3.1 模块独立性 (moduleindependence)
3.3.1 模块独立性模块独立性的度量标准是两个定性准则,
耦合性 用于描述模块之间联系的紧密程度 。
内聚性 用于描述模块内部联系的紧密程度 。
模块独立性比较强的模块应该是具有高内聚性和的低耦合度。
3.3.2 耦合性 (Coupling)
3.3.2 耦合性耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量 。 模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:
数据方式作用少多数量控制混合直接调用过程调用
① 方式 — 块间联系方式有,直接引用,或
,用过程语句调用,。
② 作用 — 块间传送的共用信息 ( 参数 ) 类型,可为,数据型,,,控制型,或,混合型,
( 数据 /控制型 ) 。
③ 数量 — 块间传送的共用信息的数量 。
耦合性的几种类型内容耦合 公共耦合 控制耦合复合耦合 数据耦合高耦合性低
1,内容耦合 (contentcoupling)
一个模块直接访问另一模块的内部数据 。
一个模块不通过正常入口转到另一模块的内部 。
一个模块有多个入口 。
两个模块有部分代码重迭 。
A B
进入另一模块内
A B
部分代码重迭
Entry1….
Entry2….
多重入口
3.3.2 耦合性
3.3.3 内聚性
3.3.3 内聚性 (cohesion)
3.3.3 内聚性块内联系的类型分为六类,
偶然型 逻辑型瞬时型 通信型顺序型弱内聚性强功能型内聚性表示一个模块内部各种数据和各种处理之间联系的紧密程度,它是从功能的角度来度量模块间的联系 。
显然,块内联系愈紧,即内聚性愈强,模块独立性愈好 。
3.3.4 信息隐蔽
3.3.4 信息隐蔽每个模块的实现细节对于其他模块来说是隐蔽的 。 也就是说,模块中所包含的信息 ( 数据和过程 ) 不允许其他不需要这些信息的模块使用 。
该原则有利于提高模块的内聚性 。 由于一个软件系统在整个软件生存期内要经过多次修改,在划分模块时要采取措施,
使得大多数过程和数据对软件的其他部分是隐蔽的 。 这样,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分 。
由 parnas方法提倡的 信息隐蔽 如下:
3.4 结构化设计( SD)方法
3.4 结构化设计( SD)法结构化设计方法 ( Structured Design,SD ) 是结构化开发方法的核心,与 SA法,SD法密切联系,主要完成软件系统的总体结构设计 。
SD法的设计步骤三,SD法的设计步骤
1、总体设计解决系统的模块结构,即分解模块,确定系统模块的层次结构。
任务:
① 划分模块
② 确定模块功能
③ 确定模块间调用关系
④ 确定模块间界面文档:模块结构图及其模块功能说明。
2、详细设计对模块图中每个模块的过程进行描述,常用的描述的方式有:
伪代码,
流程图,N-S图,PAD图等 。
SD法也分为总体设计和详细设计两个阶段:
3.4.1 结构化设计方法概述软件 〈 层次性,反映软件整体的性质 (结构图 )
过程性,反映局部的性质 (框图 )
由于软件具有两类特征:
SD法的设计总则 3.4.1 结构化设计方法概述
SA法总体设计的步骤是:
⑴ 从 DFD图导出初始的模块结构图 。
⑵ 按照 SD法设计总则,改进模块结构图 。
四,SD法的设计总则根据软件结构的准则,模块化准则,软件独立性准则得到结构化设计的总则是:
“降低块间联系,提高块内联系,
3.4.2 数据流图的分类与典型的系统结构
3.4.2 数据流图的分类与典型的系统结构一,DFD图的分类分类报名付款注销查询复审检查顺序(
物理输入
)
检查合理性扩充代码核对检查和修改 压缩代码配检查和
(
逻辑输入
)
(
逻辑输出
)
输 入 主加工 输 出卡 片旧文件
(物理输出)
新文件事务处理型 (transaction)— 事务分析这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理 。
中心变换型 (transform center) — 变换分析其特点是,DFD图可以明显分为,输入 -处理 -输出,三部分 。
典型的系统结构二,典型的系统结构
⑴ 变换型系统结构图通过变换分析技术,将中心变换型的 DFD图转换而得的 SC
图,称为变换型系统结构图 。
⑵ 事务型系统结构图通过事务分析技术,将事务处理型的 DFD图转换为的 SC图,
称为事务型的系统结构图 。
3.4.2 数据流图的分类与典型的系统结构
① 确定主加工及逻辑输入 /输出主加工 — 描述了系统的主要功能,特征 。 其特点是:输入 /输出数据流较多,往往主加工不止一个 。
逻辑输入 /输出 — 是指输入 /输出主加工的数据流 。
输入流 — 是把物理输入转换为逻辑输入的数据流 。
输出流 — 是将逻辑输出转换为物理输出的数据流 。
F
DC 中心加工
2号加工
3号加工
1号加工
4号加工
A
B E
输入流 转换流输出流输入流输出流
② 进行一级分解,设计上层模块为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为每个主加工设计一个处理模块 。
M
CI CT CO
C C DD
3.4.3 变换分析技术
3.4.3 变换分析技术变换分析技术
DDCC
变换分析步骤
③ 进行二级分解,设计中下层模块这一步的工作是自顶向下,逐步细化,为第一层的每一个输入模块,
输出模块,处理模块设计它们的从属模块,设计下层模块的顺序一般从设计输入模块的下层开始 。
M
CI CT CO
处理 C取 B 转换 B 转换 D 送 E
DC C DB B EE
DC 中心加工
2号加工
3号加工
1号加工
4号加工
A
B E
输入流转换流 输出流
④ 进一步细化取 A 转换 A 转换 E 送 F
A A B F
F
E
3.4.3 变换分析技术变换分析技术
F
3.4.4 事务分析技术
3.4.4,事务分析”技术
① 确定流界 ; 首先从数据流图中找出事务流,事务处理中心和事务路径 。
对应模块图原 始 的 数 据 流 图
I
P1
P2
P3
事物流 事务中心 事务处理事务控制接受事务 发送事务
P1 P2 P3
② 进行一级分析,设计上层模块 ; 对事务中心应设计,事物控制,
模块;对事物流应设计,接受事物,模块;对事务路径,应设计
,发送控制,模块 。
③ 进行二级分解,设计中下层模块; 接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层 。 对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层 。
事务分析技术
3.4.5 实例:银行贷款文件管理 ( MFUP)
3.4.5 应用举例每个贷款用户在贷款文件中占有一个记录,记录结构如表 3-1。
序号 内 容 长度(字节) 数据类型 可否修改
1 账号 5 数字 否
2 户名 30 数字字母 可
3 地址 30 数字字母 可
4 省 10 字母 可
5 市 15 字母 可
6 邮政编码 6 数字 可
7 电话 8 数字 可
8 类型 1 字母 否
9 信贷员号 5 数字 可
10 最近一次业务日期 6 数字 否
11 最近一次付息日期 6 数字 否
12 余额 8 数字 否
13 业务总量 8 数字 否
14 限额 6 数字 否表 3-1
分析,
要求对贷款文件进行修改,修改信息由卡片输入,卡片上的修改信息格式如下:
1-5位 6-9位 10位起账号 空 ×× 修改值 1* ×× 修改值 2* …,.**
(序号 )
其中 * 为分界符,* * 为结束符
1,贷款文件的记录格式 ( 如表 3-1 )
2,修改记录 ( 卡片 ) 格式
3,需求分析结果贷款文件的 DFD 图,是一种混合的 DFD 图 。
输入为:卡片和旧记录 。
输出为:新记录和报告 。
4,将 DFD图转换为模块结构图 。
3.4.5 应用举例图 3.28修改贷款文件 DFD
修改记录写记录卡片编辑卡片检查顺序检查次序账号相等错误 顺序卡片修改信息旧记录 顺序记录要修改的记录不修改的记录已修改的记录新记录抽出修改抽出编辑顺序卡片修改信息
2
3
4
5
6
7
9
编辑卡片加工分解主加工是??
报告报告修改信息顺序记录新记录
3.4.5 应用举例修改贷款文件的 DFD图需求分析结果 — DFD 图答案主加工图 3.29模块结构图贷款文件管理系统取顺序记录修改记录打印报告打印记录比较账号取修改信息读旧记录检查顺序取卡片读卡片 检查顺序卡片 卡片 顺序卡片旧记录 旧记录顺序记录顺序记录顺序卡片 顺序卡片已修改编辑卡片
“编辑卡片”应继续向下分解,是典型的“事务处理”
型的 DFD图。
写记录写记录旧记录不修改的记录已修改的记录新记录修改记录卡片 编辑卡片检查顺序检查次序账号相等错误顺序卡片修改信息顺序记录 要修改的记录 报告
3.4.5 应用举例转换后的模块图如图所示。
将 DFD图转换为 模块结构图已编辑卡片按照,降低块间联系,提高块内联系,的设计总则进行修改,完善系统的模块图,写出模块的功能说明 。
具体应从以下方面改进:
1) 尽可能建立功能模块功能模块具有最强的内聚性,应满足信息屏蔽原则:
一个模块内所包含的信息 ( 过程和数据 ) 对不需要这些信息的模块是不能访问的 ( 黑盒 ) 。
功能模块的组成:
执行某项任务的部分出错处理部分返回结束标志
3.4.6 模块结构图的改进
3.4.6 模块结构图的改进
3.4.6 模块结构图的改进
2) 消除重复功能若两模块含有重复的部分,应设法将重复的功能消去 。
重复部分有完全相同和部分相同的情况,在确定重复部分及实施方案时,一定要谨慎小心 。
3.4.6 模块结构图的改进
(a)
X Y
Q’1 Q’2
Y
Q’2
Q
X
Q
(b) (c) (d)
Q重复部分
YX
Q1
Y
Q2
X
图 3.31、图 3.32
控制范围 — 结构方面的特点,包括模块及其所有下属模块 。
作用范围 — 判断所涉及到的模块,是从功能特点考虑的 。
SD方法认为,当作用范围为控制范围的子集时,才能获得较低的块间联系 。 如下图中的设计,判定的作用范围恰好在判定所在模块的下一层 。
3) 模块的作用范围与控制范围
TOP
X T
B
A B1 B2
模块 TOP 的控制范围是:
TOP,X,T,B,A,B1,B2;
模块 B 的控制范围与作用范围相同,
模块 A的控制范围:
A,B,C,D,G,E,F
则 F的的作用范围,B,E,F
A
B C D
G E F
3.4.6 模块结构图的改进图 3.33控制范围与作用范围
TOP
A B
C D
E F?
(a) TOP?
A B
C D
E F
(b) TOP
A B?
C D
E F
(c)
TOP
A B
C?
D E F
(d)
显然,图( a)不满足作用范围应与控制范围的原则,模块 F的作用范围不在控制范围之内。
图( b)中模块 TOP和图( c)中模块 B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。
图( d)的模块设计最合理。
3.4.6 模块结构图的改进应用范围与作用范围 举例模块图的改进
4) 模块的大小适当模块大小指其篇幅,一般模块大小约 50-100行为宜 。
5) 模块的扇入扇出数不宜太多一个模块调用其他模块的个数,称为该模块的扇出 。 模块的扇出不宜过大,一般认为不要超出7个 。
一个模块被其他模块调用的个数,称为该模块的扇入 。 扇入越大,除服务性模块外,模块的扇入扇出数不宜太多 。 否则块间联系增加 。
3.4.6 模块结构图的改进举例:
银行贷款文件管理中,编辑卡片加工编辑卡片卡片抽出修改项 编辑修改项卡片项 项已编辑项编辑项 2编辑项 1 编辑项 14…
项 1 项 2
已编辑项 1
已编辑项 2 项 14
已编辑项 14
图 3.30 编辑卡片的分解已编辑卡片模块图的改进编辑修改项编辑修改项编辑项 2 编辑项 3 编辑项 4 编辑项 5 编辑项 6 编辑项 7 编辑项 9
编辑修改项类型 1
编辑项 2,3
类型 5
编辑项 6,9
类型 2
编辑项 4
类型 3
编辑项 5
类型 4
编辑项 7
项已编辑项项已编辑项项项项已编辑项 已编辑项 已编辑项编辑修改项设计模块图的改进编辑修改项编辑项
2
编辑项
3
编辑项
4
编辑项
5
编辑项
6
编辑项
7
编辑项
9
拒绝超长拒绝非字母数字项 拒绝非 字母 拒绝非 数字调整长度 拒绝太短操作层设计模块图的改进编辑修改项编辑项
2
编辑项
3
编辑项
4
编辑项
5
编辑项
6
编辑项
7
编辑项
9
拒绝超长拒绝非字母数字项 拒绝非字母项 拒绝非数字项调整长度 拒绝太短图 3.38 细节层设计查字符类型 查字符长度报告出错
3.5 详细设计一,任务详细设计阶段的任务是开发一个可以直接转换为程序的软件表示,即对系统中每个模块的内部过程进行设计和描述 。
二,常用的描述方法工具
1,流程图
2,结构化流程图 ( N-S图 )
3,PAD图 —问题分析图
a
b
X1
X2
X7
X6
X4
X3
X5
h
ig
f
e
d
c
j
F
T
F
F
F
TT
T
多分支选择结构先判定型循环结构选择结构后判定型循环结构
3.5,1 程序流程图图 3.44 流程图
N-S图由而且仅由顺序,选择,循环三种基本结构组成 。
基本图例如下:
顺序结构块 1
块 2
块 3
块 4
条件T F
块 1 块 2
选择结构
Case I=1,2,3T
块 1 块 2
多分支选择结构
F
块 3
块当条件成立时当型循环块直到条件成立时直到型循环
3.5,2 N—S图
3.6.2 N—S图图 3.45 N- S图
a
b
条 件 1T F
Case Xi,i=2,3,4
X2 X3 X4
当条件 3成立条 件 2
直到条件 4成立直 到 条 件 成立
c d e
f
g
h
i
j
顺序结构选择结构多分支选择结构先判定型循环结构后判定型循环结构
FT
T F
N-S图举例
3.5,2 N—S图
N- S图举例
3,PAD图 —问题分析图 ( problem Analysis Diagram)
其基本控制结构如下:
任务 1
任务 2
任务 3
顺序结构
WHILE型条件 循环体先判定型循环结构条件
then部分
else部分选择结构
T
F
UNTIL型条件 循环体后判定型循环结构控制变量任务 1
任务 2
任务 n
多分支选择结构值 1
值 2
值 n
3.5,3 PAD图
3.5,3 PAD图
PADL图基本结构例 1:对数组 X进行排序。,自顶而下,逐步求精,
1、循环一次,排好一个 X[h]
排好第 H个 X [h]
找 X[J]= MAX( X[h]。。 X[n])
交换 X[J] 和 X[h]
2、细化
(a)
(b)
(b)
(a)
3,连接各图,构成完整的 PAD图
H,=1,n-1 排好第 h个 X [h]:,:,
W:=X[h]
X[h]:=X[j]
X[j]:=w
J,=h
k,=h+1,n X[k]>X[J]
J:=k
H,=1,n-1:,:,
例 13.5,3 PAD图图 3.48 PAD图应用举例
BEGIN
FIRST:=K[1];
SECOND:=0;
FIRST=K[I]
SECOND=0
I,=2 to N K[I] >SECOND
K[I]>FIRST
SECOND
=FIRST
FIRST=K[I]
SECOND
=K[I]
ELSE SECOND:=K[I]
END
END
END.
PASCAL源程序段对应 PAD图
FOR I:=2 TO N DO
BEGIN IF K[I]>SECOND THEN
BEGIN IF K[I]>FIRST
THEN BEGIN SECOND:=FIRST;
FIRST:=K[I]END
PAD图应用例 2
例 23.6.3 PAD图图 3.49 PAD图应用举例
A,DEF图式,一个加工在一页中画不下时,用 DEF图式定义后,可在另一页上画出。
B,N+1/2循环
NAME A
S1
UNTIL Q S2
S3
S1
P S1
S2
或 S1
S2
PAD图的扩充图式
3.6.3 PAD图
S
NAME A
条件
H1
S1
S2
P
图 3.50 PADL图扩充图式
PDL( Program Design Language) 程序设计语言这是一种结构化的语言 。 是非形式化比较灵活的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流 。
PDL的语法是开放式的,其外层语法是确定的,而内层语法则不确定 。 外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:
如,IF-THEN-ELSE WHILE- DO REPEAT- UNTIL
DO CASE DO WHILE 等表示 。
有时还用关键字反排,表示控制结构结束:
DO - OD IF - FI
3.5,4 PDL语言例如:
if X is not negative
then
return(square root of X as a real number);
else
return(square root of -X as an imaginary
number);
外层语法 IF-ELSE-THEN是确定的,内层操作,square
root of X,是不确定的。
4,PDL 语言
1、可使用性
① 使用简单
② 用户界面中所用术语的标准化和一致性
③ 具有 HELP功能
④ 快速的系统响应和低的系统成本
⑤ 具有容错能力
2、灵活性
① 考虑用户的特点、能力、知识水平。
② 提供不同的系统响应信息。
③ 提供根据用户需求制定和修改 界面。
3、界面的复杂性与可靠性复杂性 —界面规模及组织的复杂程度。应该愈简单愈好。
可靠性 —指无故障使用的时间间隔。用户界面应该能够保证用户正确,可靠地使用系统,及程序,数据的安全 。
3.6.1 用户界面应具有的特性
1、用户特性分析 — 用户模型了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:
用户类型 —通常分为:外行型、初学型、熟练型、专家型。
用户特性度量 —与用户使用模式和用户群体能力有关。
包括:用户使用频度、用户用机能力、用户的知识、思维能力等。
3.6.2 用户界面设计的任务这部分工作应该与软件需求分析同步进行。包括以下内容:
2、用户界面的任务分析 —任务模型( DFD图)
是对系统内部活动的分解,不仅要进行功能分解(用 DFD图描述),还要包括与人相关的活动。每个加工即一个功能或任务。
3、确定用户界面类型
1、菜单( menu)
按照显示方式正文菜单、图标菜单、正文和图标混合菜单,如:
开始菜单。
3.6.3 用户界面的基本类型从用户角度出发,用户界面设计的类型主要有问题描述语言,数据表格、图形与图标、菜单、对话框及窗口等。每一种类型都有不同的特点和性能。讨论以下类型,菜单、图象、对话框和窗口。
按屏幕位置和操作风格固定位置、浮动位置(弹出)、下拉式、嵌入式图 3.54 混合菜单图 3.55 固定及下拉菜单固定菜单下拉菜单
2、图 象在用户界面中,加入丰富多彩的画面,将能够更加行象地为用户提供有用的信息,以达到可视化的目的。主要的处理操作有:图象的隐蔽和再现、
屏幕滚动和图案显示、动画等。
3、对话框对话框是在需要时,显示在屏幕上一个矩形区域内的图形和正文信息。
通过对话,实现系统和用户之间的通信。
对话框显示的方式与弹出式菜单类似,即瞬时弹出。同时,系统还应将对话框所覆盖的原图象进行保存,以便在对话结束后能立即恢复。
有三种对话形式:
必须回答式 如图 3.58所示无需回答式 如图 3.59所示警告式 如图 4.58所示图 3.58 必须回答 式对话框图 3.59 无需 回答 式对话框图 3.60 警告式对话框
4,窗口 ( window)
图形学中称为视图区 ( Viewport),视为虚拟屏幕 。 一个实用窗口,
可包含部件:
菜单区 ( menu bar) 图标区 ( icon bar)
标题区 ( title bar) 移动区 ( move bar)
大小区 ( size bar) 退出区 ( quit bar)
用户工作区 ( user’ s work bar)
横向滚动区 ( horizontal scroll bar)
纵向滚动区 ( vertical scroll bar)
图 3.61 窗口数据 I/O界面,是系统的重要组成部分 。 主要从 输入速度 和减少出错率 考虑 。
1、尽量减少输入工作量对相同内容输入设置默认值自动填入列表选择或点击选择
2、输入屏幕与输入格式匹配即屏幕显示按照数据使用频率、重要性、次序等组织。
3、数据输入的一般规则确定输入 交互动作确定删除 提供反馈
3.6.4 数据 I/O界面设计
3.6.5 软件设计规格说明与复审二、设计复审必要性统计表明:软件开发过程中 50%~60%的错误是在设计阶段引入的。
一、软件规格说明书软件设计阶段完成,应提交设计文档:
1,改进后的模块结构图(包含模块说明)
2、各模块的详细说明 (流程图,N-S图,PAD图等)
从前一步未被发现的错误扩大的错误新产生的错误检测效率到后一步
0
0
10
70%
2
X=1.5
1*1.5
25
50%
3个 15个( B)
有复审例,00
10
0%
6
X=1.5
4*1.5
25
0%
10个 37个( A)
无复审初步设计 详细设计二、复审方式
1、正式复审:会议详细审议。
2、临时性复审:对局部问题进行讨论。
3 第三 章软件设计阶段的任务与目标软件设计是对实现软件的结构,系统的数据,系统组件之间的接口以及所用算法的描述 。
软件设计是软件开发的关键步骤,直接影响软件的质量 。
在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件,做什么,的问题,
并已在软件需求说明书和数据要求说明书中详尽和充分地阐明了这些需求以后,下一步就要着手实现软件的需求,即软件设计阶段要解决,怎么做,的问题 。
3.1 软件设计阶段的任务与目标设计过程的一般模型需求描述体系结构设计 抽象描述 接口设计 组件设计 数据结构 设计系统体系结构 软件描述 接口描述 组件描述 数据结构 描述 算法描述算法设计设计活动设计产品
3.1.1 软件设计在开发阶段中的重要性软件设计功能与性能需求编码 软件测试程序模块 已测试软件过程设计数据结构设计信息域需求开发阶段信息流
3.1.1 软件设计在开发阶段中的重要性软件设计阶段要解决,如何做,的问题 。 这显然是整个软件开发过程的核心问题,所有的开发工作都将根据设计的方案进行 。 系统的总体结构在该阶段决定,因此软件的总体设计决定了系统的质量 。
系统结构设计定义软件系统的整体结构,是软件开发的核心步骤 。 在设计步骤中,建立软件主要成份之间的关系 。
过程设计则是把结构成份转换成软件的过程性描述 。
在 编码 步骤中,根据这种过程性描述,生成源程序代码,
然后通过 测试,最终得到完整有效的软件 。
3.1.2 软件设计阶段的任务总体设计需求说明书复审软件结构修 改详细设计可接受 模块描述 复审修 改设计说明书软件设计工作流程
3.1.2 软件设计阶段的任务一,软件设计的任务从工程管理的角度来看,软件设计分两步完成;分为总体设计 ( 概要设计 ) 和详细设计两个阶段 。 其工作流程如图所示 。
首先做概要设计,将软件需求转化为数据结构和软件的系统结构 。 然后是详细设计,即过程设计 。 通过对结构表示进行细化,得到软件详细的数据结构和算法 。
三类设计任务
1,划分模块,确定软件结构开发方法不同,确定软件结构的方法也不同 。 例如 SD法,
是从分层的 DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图 。
一般包括确定系统的软件结构,分解模块,确定系统的模块层次关系 。
2,确定系统的数据结构数据结构的建立对于信息系统而言尤为重要 。 要确定数据的类型,组织,存取方式,相关程度及处理方式等 。
3,设计用户界面作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命 。
因此,软件设计阶段的任务可分为三部分:
软件设计的目标3.1.2 软件设计阶段的任务软件设计高可靠性 高可维护性高可理解性高效率软件设计的目标
3.1.2 软件设计阶段的任务二,软件设计的目标在设计阶段应达到的目标是,
提高可靠性;提高可维护性;提高可理解性;提高效率 。
衡量该目标的准则,
1,软件实体有明显的层次结构,利于软件元素间控制 。
2,软件实体应该是模块化的,模块具有独立功能 。
3,软件实体与环境的界面清晰 。
4,设计规格说明清晰,简洁,完整和无二义性 。
软件设计的目标常用的设计方法有,SD法,Jackson法,HIPO法,Parnas法、
Warnier法等。
3.2 软件结构与软件结构图
3.2 软件结构与软件结构图软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量 。 模块之间的关系可有多种,但都可以归结为一种层次关系 。
软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素 ——模块及模块之间的调用关系,模块之间的数据传递关系。
本节讨论如何进行软件结构的设计,设计的准则以及为了提高软件系统的质量,如何对软件结构进行改进的技术。
3.2.1 软件结构的基本概念二,模块化模块化就是将系统划分为若干个模块,每个模块完成一个子功能 。 模块化的目的是将系统,分而治之,,模块化能够降低问题的复杂性,使软件结构清晰,易阅读,易理解,
易于测试和调试,因而也有助于提高软件的可靠性 。
3.2.1软件结构的基本概念软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图 。 下面先介绍几个相关的的概念 。
A
B C D
E F G H I
J K L M
一,模块 ( Module)
模块是程序对象有名字的集合 。 例如,过程,函数,子程序,宏等,是构成软件系统结构的基本元素 。
软件结构图模块化降低软件复杂度的 简单证明3.2.1软件结构的基本概念模块化降低软件复杂度的 简单证明令,C( X) 表示问题 X 的复杂度函数;
E( X) 解决问题 X 所需工作量的复杂度函数;
若:有问题 P1,P2 ;
C( P1) > C( P2) ;
显然,E( P1) > E( P2)
由经验,C( P1+P2) > C( P1) + C( P2)
于是,E( P1+P2) > E( P1) + E( P2)
将问题 ( P1+P2) 划分为两个问题 P1和 P2
后,其工作量和复杂度都降低 。
并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加 。
显然,每个软件系统都有一个最佳模块数 M。 注意选择分解的最佳模块数 。
右上图描述了模块化与软件成本的关系 。
软件总成本模块化与软件成本的关系成本模块数目模块成本接口成本最小成本区
M
软件的层次结构
3.2.1软件结构的基本概念顶层
1层
2层
A
B C D
E F G H
I J K L M
N
深度扇入为 2
扇出为 3
扇入为 3
3层
4层宽度宽度宽度软件结构示意图有关指标,
⑴ 深度,表示软件结构中从顶层模块到最底层模块的层数 。
⑵ 宽度,表示控制的总分布 。
⑶ 扇出数,指一个模块直接控制下属的模块个数 。
⑷ 扇入数,指一个模块的直接上属模块个数 。
一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数 。
软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构 。 如图所示 。
3.2.2 软件的树状结构和网状结构
3.2.2 软件的树状结构和网状结构由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构 。
在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块 。 与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构 。
树状结构的特点是:
整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系 。
顶层
1层
2层
3层软件的 树状结构
A
B C D
E F G H I
K L M
网状结构在网状结构中,任何两个模块间都可以有双向的关系,不分层次 。 任何两个模块都是平等的,没有从属关系 。
网状结构
( a) ( b)
3.2.2 软件的树状结构和网状结构
A B
C DE
F G H
A
B C
D
比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。
模块 5模块 4
3.2.3 软件结构图( SC图)
模块 1
模块 3模块 2
values
values data data
模块
3.2.3 软件结构图 ( SC图 )
结构图 ( Structure Chart,简称 SC图 ) 是精确表达软件结构的图形表示方法,它以特定的符号表示模块,模块间的调用关系和模块间信息的传递 。 结构图的主要构成有:
⑴ 模块 ( Module),
⑶ 数据:
模块调用图
⑵ 调用,data
数字信息控制信息例,画出打印报告的软件结构图调用次序为上层调用下层; 同层按照数据传递关系确定;一般从左到右执行 。
执行过程即按照数据流向进行 。
报 告计 算获得编辑 确认数据读入 编辑打印报告头 打印报告尾打印输入
EOF 输入已编辑已编辑已编辑已确认已确认数据已确认数据 计算结果结果日期 总结果行行 行
3.2.3 软件结构图( SC图)
打印报告予以确认
3.3 模块的独立性
3.3 模块的独立性上一节讨论了关于软件结构与软件结构图的概念,本节进一步讨论影响软件系统质量的另一个关键问题,模块的独立性问题。
模块化方法已经为所有工程领域所接受。模块化的主要优点是,模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,
从而提高了软件的生产率。
提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。
3.3.1 模块独立性 (moduleindependence)
3.3.1 模块独立性
,模块,,又称,构件,,一般指用一个名字可调用的一段程序 。 它一般具有如下 三个基本属性,
⑴ 功能 即指该模块实现什么功能,做什么事情 。 必须注意:
模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能 。
⑵ 逻辑 即描述模块内部怎么做 。
⑶ 状态 即该模块使用时的环境和条件 。
所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的 。 即功能专一,模块之间无过多的相互作用的模块 。
这种类型的模块可以并行开发,模块独立性越强,开发越容易 。 独立性强的模块,还能减少错误的影响,使模块容易组合,修改及测试 。
3.3.1 模块独立性 (moduleindependence)
3.3.1 模块独立性模块独立性的度量标准是两个定性准则,
耦合性 用于描述模块之间联系的紧密程度 。
内聚性 用于描述模块内部联系的紧密程度 。
模块独立性比较强的模块应该是具有高内聚性和的低耦合度。
3.3.2 耦合性 (Coupling)
3.3.2 耦合性耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量 。 模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:
数据方式作用少多数量控制混合直接调用过程调用
① 方式 — 块间联系方式有,直接引用,或
,用过程语句调用,。
② 作用 — 块间传送的共用信息 ( 参数 ) 类型,可为,数据型,,,控制型,或,混合型,
( 数据 /控制型 ) 。
③ 数量 — 块间传送的共用信息的数量 。
耦合性的几种类型内容耦合 公共耦合 控制耦合复合耦合 数据耦合高耦合性低
1,内容耦合 (contentcoupling)
一个模块直接访问另一模块的内部数据 。
一个模块不通过正常入口转到另一模块的内部 。
一个模块有多个入口 。
两个模块有部分代码重迭 。
A B
进入另一模块内
A B
部分代码重迭
Entry1….
Entry2….
多重入口
3.3.2 耦合性
3.3.3 内聚性
3.3.3 内聚性 (cohesion)
3.3.3 内聚性块内联系的类型分为六类,
偶然型 逻辑型瞬时型 通信型顺序型弱内聚性强功能型内聚性表示一个模块内部各种数据和各种处理之间联系的紧密程度,它是从功能的角度来度量模块间的联系 。
显然,块内联系愈紧,即内聚性愈强,模块独立性愈好 。
3.3.4 信息隐蔽
3.3.4 信息隐蔽每个模块的实现细节对于其他模块来说是隐蔽的 。 也就是说,模块中所包含的信息 ( 数据和过程 ) 不允许其他不需要这些信息的模块使用 。
该原则有利于提高模块的内聚性 。 由于一个软件系统在整个软件生存期内要经过多次修改,在划分模块时要采取措施,
使得大多数过程和数据对软件的其他部分是隐蔽的 。 这样,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分 。
由 parnas方法提倡的 信息隐蔽 如下:
3.4 结构化设计( SD)方法
3.4 结构化设计( SD)法结构化设计方法 ( Structured Design,SD ) 是结构化开发方法的核心,与 SA法,SD法密切联系,主要完成软件系统的总体结构设计 。
SD法的设计步骤三,SD法的设计步骤
1、总体设计解决系统的模块结构,即分解模块,确定系统模块的层次结构。
任务:
① 划分模块
② 确定模块功能
③ 确定模块间调用关系
④ 确定模块间界面文档:模块结构图及其模块功能说明。
2、详细设计对模块图中每个模块的过程进行描述,常用的描述的方式有:
伪代码,
流程图,N-S图,PAD图等 。
SD法也分为总体设计和详细设计两个阶段:
3.4.1 结构化设计方法概述软件 〈 层次性,反映软件整体的性质 (结构图 )
过程性,反映局部的性质 (框图 )
由于软件具有两类特征:
SD法的设计总则 3.4.1 结构化设计方法概述
SA法总体设计的步骤是:
⑴ 从 DFD图导出初始的模块结构图 。
⑵ 按照 SD法设计总则,改进模块结构图 。
四,SD法的设计总则根据软件结构的准则,模块化准则,软件独立性准则得到结构化设计的总则是:
“降低块间联系,提高块内联系,
3.4.2 数据流图的分类与典型的系统结构
3.4.2 数据流图的分类与典型的系统结构一,DFD图的分类分类报名付款注销查询复审检查顺序(
物理输入
)
检查合理性扩充代码核对检查和修改 压缩代码配检查和
(
逻辑输入
)
(
逻辑输出
)
输 入 主加工 输 出卡 片旧文件
(物理输出)
新文件事务处理型 (transaction)— 事务分析这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理 。
中心变换型 (transform center) — 变换分析其特点是,DFD图可以明显分为,输入 -处理 -输出,三部分 。
典型的系统结构二,典型的系统结构
⑴ 变换型系统结构图通过变换分析技术,将中心变换型的 DFD图转换而得的 SC
图,称为变换型系统结构图 。
⑵ 事务型系统结构图通过事务分析技术,将事务处理型的 DFD图转换为的 SC图,
称为事务型的系统结构图 。
3.4.2 数据流图的分类与典型的系统结构
① 确定主加工及逻辑输入 /输出主加工 — 描述了系统的主要功能,特征 。 其特点是:输入 /输出数据流较多,往往主加工不止一个 。
逻辑输入 /输出 — 是指输入 /输出主加工的数据流 。
输入流 — 是把物理输入转换为逻辑输入的数据流 。
输出流 — 是将逻辑输出转换为物理输出的数据流 。
F
DC 中心加工
2号加工
3号加工
1号加工
4号加工
A
B E
输入流 转换流输出流输入流输出流
② 进行一级分解,设计上层模块为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为每个主加工设计一个处理模块 。
M
CI CT CO
C C DD
3.4.3 变换分析技术
3.4.3 变换分析技术变换分析技术
DDCC
变换分析步骤
③ 进行二级分解,设计中下层模块这一步的工作是自顶向下,逐步细化,为第一层的每一个输入模块,
输出模块,处理模块设计它们的从属模块,设计下层模块的顺序一般从设计输入模块的下层开始 。
M
CI CT CO
处理 C取 B 转换 B 转换 D 送 E
DC C DB B EE
DC 中心加工
2号加工
3号加工
1号加工
4号加工
A
B E
输入流转换流 输出流
④ 进一步细化取 A 转换 A 转换 E 送 F
A A B F
F
E
3.4.3 变换分析技术变换分析技术
F
3.4.4 事务分析技术
3.4.4,事务分析”技术
① 确定流界 ; 首先从数据流图中找出事务流,事务处理中心和事务路径 。
对应模块图原 始 的 数 据 流 图
I
P1
P2
P3
事物流 事务中心 事务处理事务控制接受事务 发送事务
P1 P2 P3
② 进行一级分析,设计上层模块 ; 对事务中心应设计,事物控制,
模块;对事物流应设计,接受事物,模块;对事务路径,应设计
,发送控制,模块 。
③ 进行二级分解,设计中下层模块; 接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层 。 对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层 。
事务分析技术
3.4.5 实例:银行贷款文件管理 ( MFUP)
3.4.5 应用举例每个贷款用户在贷款文件中占有一个记录,记录结构如表 3-1。
序号 内 容 长度(字节) 数据类型 可否修改
1 账号 5 数字 否
2 户名 30 数字字母 可
3 地址 30 数字字母 可
4 省 10 字母 可
5 市 15 字母 可
6 邮政编码 6 数字 可
7 电话 8 数字 可
8 类型 1 字母 否
9 信贷员号 5 数字 可
10 最近一次业务日期 6 数字 否
11 最近一次付息日期 6 数字 否
12 余额 8 数字 否
13 业务总量 8 数字 否
14 限额 6 数字 否表 3-1
分析,
要求对贷款文件进行修改,修改信息由卡片输入,卡片上的修改信息格式如下:
1-5位 6-9位 10位起账号 空 ×× 修改值 1* ×× 修改值 2* …,.**
(序号 )
其中 * 为分界符,* * 为结束符
1,贷款文件的记录格式 ( 如表 3-1 )
2,修改记录 ( 卡片 ) 格式
3,需求分析结果贷款文件的 DFD 图,是一种混合的 DFD 图 。
输入为:卡片和旧记录 。
输出为:新记录和报告 。
4,将 DFD图转换为模块结构图 。
3.4.5 应用举例图 3.28修改贷款文件 DFD
修改记录写记录卡片编辑卡片检查顺序检查次序账号相等错误 顺序卡片修改信息旧记录 顺序记录要修改的记录不修改的记录已修改的记录新记录抽出修改抽出编辑顺序卡片修改信息
2
3
4
5
6
7
9
编辑卡片加工分解主加工是??
报告报告修改信息顺序记录新记录
3.4.5 应用举例修改贷款文件的 DFD图需求分析结果 — DFD 图答案主加工图 3.29模块结构图贷款文件管理系统取顺序记录修改记录打印报告打印记录比较账号取修改信息读旧记录检查顺序取卡片读卡片 检查顺序卡片 卡片 顺序卡片旧记录 旧记录顺序记录顺序记录顺序卡片 顺序卡片已修改编辑卡片
“编辑卡片”应继续向下分解,是典型的“事务处理”
型的 DFD图。
写记录写记录旧记录不修改的记录已修改的记录新记录修改记录卡片 编辑卡片检查顺序检查次序账号相等错误顺序卡片修改信息顺序记录 要修改的记录 报告
3.4.5 应用举例转换后的模块图如图所示。
将 DFD图转换为 模块结构图已编辑卡片按照,降低块间联系,提高块内联系,的设计总则进行修改,完善系统的模块图,写出模块的功能说明 。
具体应从以下方面改进:
1) 尽可能建立功能模块功能模块具有最强的内聚性,应满足信息屏蔽原则:
一个模块内所包含的信息 ( 过程和数据 ) 对不需要这些信息的模块是不能访问的 ( 黑盒 ) 。
功能模块的组成:
执行某项任务的部分出错处理部分返回结束标志
3.4.6 模块结构图的改进
3.4.6 模块结构图的改进
3.4.6 模块结构图的改进
2) 消除重复功能若两模块含有重复的部分,应设法将重复的功能消去 。
重复部分有完全相同和部分相同的情况,在确定重复部分及实施方案时,一定要谨慎小心 。
3.4.6 模块结构图的改进
(a)
X Y
Q’1 Q’2
Y
Q’2
Q
X
Q
(b) (c) (d)
Q重复部分
YX
Q1
Y
Q2
X
图 3.31、图 3.32
控制范围 — 结构方面的特点,包括模块及其所有下属模块 。
作用范围 — 判断所涉及到的模块,是从功能特点考虑的 。
SD方法认为,当作用范围为控制范围的子集时,才能获得较低的块间联系 。 如下图中的设计,判定的作用范围恰好在判定所在模块的下一层 。
3) 模块的作用范围与控制范围
TOP
X T
B
A B1 B2
模块 TOP 的控制范围是:
TOP,X,T,B,A,B1,B2;
模块 B 的控制范围与作用范围相同,
模块 A的控制范围:
A,B,C,D,G,E,F
则 F的的作用范围,B,E,F
A
B C D
G E F
3.4.6 模块结构图的改进图 3.33控制范围与作用范围
TOP
A B
C D
E F?
(a) TOP?
A B
C D
E F
(b) TOP
A B?
C D
E F
(c)
TOP
A B
C?
D E F
(d)
显然,图( a)不满足作用范围应与控制范围的原则,模块 F的作用范围不在控制范围之内。
图( b)中模块 TOP和图( c)中模块 B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。
图( d)的模块设计最合理。
3.4.6 模块结构图的改进应用范围与作用范围 举例模块图的改进
4) 模块的大小适当模块大小指其篇幅,一般模块大小约 50-100行为宜 。
5) 模块的扇入扇出数不宜太多一个模块调用其他模块的个数,称为该模块的扇出 。 模块的扇出不宜过大,一般认为不要超出7个 。
一个模块被其他模块调用的个数,称为该模块的扇入 。 扇入越大,除服务性模块外,模块的扇入扇出数不宜太多 。 否则块间联系增加 。
3.4.6 模块结构图的改进举例:
银行贷款文件管理中,编辑卡片加工编辑卡片卡片抽出修改项 编辑修改项卡片项 项已编辑项编辑项 2编辑项 1 编辑项 14…
项 1 项 2
已编辑项 1
已编辑项 2 项 14
已编辑项 14
图 3.30 编辑卡片的分解已编辑卡片模块图的改进编辑修改项编辑修改项编辑项 2 编辑项 3 编辑项 4 编辑项 5 编辑项 6 编辑项 7 编辑项 9
编辑修改项类型 1
编辑项 2,3
类型 5
编辑项 6,9
类型 2
编辑项 4
类型 3
编辑项 5
类型 4
编辑项 7
项已编辑项项已编辑项项项项已编辑项 已编辑项 已编辑项编辑修改项设计模块图的改进编辑修改项编辑项
2
编辑项
3
编辑项
4
编辑项
5
编辑项
6
编辑项
7
编辑项
9
拒绝超长拒绝非字母数字项 拒绝非 字母 拒绝非 数字调整长度 拒绝太短操作层设计模块图的改进编辑修改项编辑项
2
编辑项
3
编辑项
4
编辑项
5
编辑项
6
编辑项
7
编辑项
9
拒绝超长拒绝非字母数字项 拒绝非字母项 拒绝非数字项调整长度 拒绝太短图 3.38 细节层设计查字符类型 查字符长度报告出错
3.5 详细设计一,任务详细设计阶段的任务是开发一个可以直接转换为程序的软件表示,即对系统中每个模块的内部过程进行设计和描述 。
二,常用的描述方法工具
1,流程图
2,结构化流程图 ( N-S图 )
3,PAD图 —问题分析图
a
b
X1
X2
X7
X6
X4
X3
X5
h
ig
f
e
d
c
j
F
T
F
F
F
TT
T
多分支选择结构先判定型循环结构选择结构后判定型循环结构
3.5,1 程序流程图图 3.44 流程图
N-S图由而且仅由顺序,选择,循环三种基本结构组成 。
基本图例如下:
顺序结构块 1
块 2
块 3
块 4
条件T F
块 1 块 2
选择结构
Case I=1,2,3T
块 1 块 2
多分支选择结构
F
块 3
块当条件成立时当型循环块直到条件成立时直到型循环
3.5,2 N—S图
3.6.2 N—S图图 3.45 N- S图
a
b
条 件 1T F
Case Xi,i=2,3,4
X2 X3 X4
当条件 3成立条 件 2
直到条件 4成立直 到 条 件 成立
c d e
f
g
h
i
j
顺序结构选择结构多分支选择结构先判定型循环结构后判定型循环结构
FT
T F
N-S图举例
3.5,2 N—S图
N- S图举例
3,PAD图 —问题分析图 ( problem Analysis Diagram)
其基本控制结构如下:
任务 1
任务 2
任务 3
顺序结构
WHILE型条件 循环体先判定型循环结构条件
then部分
else部分选择结构
T
F
UNTIL型条件 循环体后判定型循环结构控制变量任务 1
任务 2
任务 n
多分支选择结构值 1
值 2
值 n
3.5,3 PAD图
3.5,3 PAD图
PADL图基本结构例 1:对数组 X进行排序。,自顶而下,逐步求精,
1、循环一次,排好一个 X[h]
排好第 H个 X [h]
找 X[J]= MAX( X[h]。。 X[n])
交换 X[J] 和 X[h]
2、细化
(a)
(b)
(b)
(a)
3,连接各图,构成完整的 PAD图
H,=1,n-1 排好第 h个 X [h]:,:,
W:=X[h]
X[h]:=X[j]
X[j]:=w
J,=h
k,=h+1,n X[k]>X[J]
J:=k
H,=1,n-1:,:,
例 13.5,3 PAD图图 3.48 PAD图应用举例
BEGIN
FIRST:=K[1];
SECOND:=0;
FIRST=K[I]
SECOND=0
I,=2 to N K[I] >SECOND
K[I]>FIRST
SECOND
=FIRST
FIRST=K[I]
SECOND
=K[I]
ELSE SECOND:=K[I]
END
END
END.
PASCAL源程序段对应 PAD图
FOR I:=2 TO N DO
BEGIN IF K[I]>SECOND THEN
BEGIN IF K[I]>FIRST
THEN BEGIN SECOND:=FIRST;
FIRST:=K[I]END
PAD图应用例 2
例 23.6.3 PAD图图 3.49 PAD图应用举例
A,DEF图式,一个加工在一页中画不下时,用 DEF图式定义后,可在另一页上画出。
B,N+1/2循环
NAME A
S1
UNTIL Q S2
S3
S1
P S1
S2
或 S1
S2
PAD图的扩充图式
3.6.3 PAD图
S
NAME A
条件
H1
S1
S2
P
图 3.50 PADL图扩充图式
PDL( Program Design Language) 程序设计语言这是一种结构化的语言 。 是非形式化比较灵活的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流 。
PDL的语法是开放式的,其外层语法是确定的,而内层语法则不确定 。 外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:
如,IF-THEN-ELSE WHILE- DO REPEAT- UNTIL
DO CASE DO WHILE 等表示 。
有时还用关键字反排,表示控制结构结束:
DO - OD IF - FI
3.5,4 PDL语言例如:
if X is not negative
then
return(square root of X as a real number);
else
return(square root of -X as an imaginary
number);
外层语法 IF-ELSE-THEN是确定的,内层操作,square
root of X,是不确定的。
4,PDL 语言
1、可使用性
① 使用简单
② 用户界面中所用术语的标准化和一致性
③ 具有 HELP功能
④ 快速的系统响应和低的系统成本
⑤ 具有容错能力
2、灵活性
① 考虑用户的特点、能力、知识水平。
② 提供不同的系统响应信息。
③ 提供根据用户需求制定和修改 界面。
3、界面的复杂性与可靠性复杂性 —界面规模及组织的复杂程度。应该愈简单愈好。
可靠性 —指无故障使用的时间间隔。用户界面应该能够保证用户正确,可靠地使用系统,及程序,数据的安全 。
3.6.1 用户界面应具有的特性
1、用户特性分析 — 用户模型了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:
用户类型 —通常分为:外行型、初学型、熟练型、专家型。
用户特性度量 —与用户使用模式和用户群体能力有关。
包括:用户使用频度、用户用机能力、用户的知识、思维能力等。
3.6.2 用户界面设计的任务这部分工作应该与软件需求分析同步进行。包括以下内容:
2、用户界面的任务分析 —任务模型( DFD图)
是对系统内部活动的分解,不仅要进行功能分解(用 DFD图描述),还要包括与人相关的活动。每个加工即一个功能或任务。
3、确定用户界面类型
1、菜单( menu)
按照显示方式正文菜单、图标菜单、正文和图标混合菜单,如:
开始菜单。
3.6.3 用户界面的基本类型从用户角度出发,用户界面设计的类型主要有问题描述语言,数据表格、图形与图标、菜单、对话框及窗口等。每一种类型都有不同的特点和性能。讨论以下类型,菜单、图象、对话框和窗口。
按屏幕位置和操作风格固定位置、浮动位置(弹出)、下拉式、嵌入式图 3.54 混合菜单图 3.55 固定及下拉菜单固定菜单下拉菜单
2、图 象在用户界面中,加入丰富多彩的画面,将能够更加行象地为用户提供有用的信息,以达到可视化的目的。主要的处理操作有:图象的隐蔽和再现、
屏幕滚动和图案显示、动画等。
3、对话框对话框是在需要时,显示在屏幕上一个矩形区域内的图形和正文信息。
通过对话,实现系统和用户之间的通信。
对话框显示的方式与弹出式菜单类似,即瞬时弹出。同时,系统还应将对话框所覆盖的原图象进行保存,以便在对话结束后能立即恢复。
有三种对话形式:
必须回答式 如图 3.58所示无需回答式 如图 3.59所示警告式 如图 4.58所示图 3.58 必须回答 式对话框图 3.59 无需 回答 式对话框图 3.60 警告式对话框
4,窗口 ( window)
图形学中称为视图区 ( Viewport),视为虚拟屏幕 。 一个实用窗口,
可包含部件:
菜单区 ( menu bar) 图标区 ( icon bar)
标题区 ( title bar) 移动区 ( move bar)
大小区 ( size bar) 退出区 ( quit bar)
用户工作区 ( user’ s work bar)
横向滚动区 ( horizontal scroll bar)
纵向滚动区 ( vertical scroll bar)
图 3.61 窗口数据 I/O界面,是系统的重要组成部分 。 主要从 输入速度 和减少出错率 考虑 。
1、尽量减少输入工作量对相同内容输入设置默认值自动填入列表选择或点击选择
2、输入屏幕与输入格式匹配即屏幕显示按照数据使用频率、重要性、次序等组织。
3、数据输入的一般规则确定输入 交互动作确定删除 提供反馈
3.6.4 数据 I/O界面设计
3.6.5 软件设计规格说明与复审二、设计复审必要性统计表明:软件开发过程中 50%~60%的错误是在设计阶段引入的。
一、软件规格说明书软件设计阶段完成,应提交设计文档:
1,改进后的模块结构图(包含模块说明)
2、各模块的详细说明 (流程图,N-S图,PAD图等)
从前一步未被发现的错误扩大的错误新产生的错误检测效率到后一步
0
0
10
70%
2
X=1.5
1*1.5
25
50%
3个 15个( B)
有复审例,00
10
0%
6
X=1.5
4*1.5
25
0%
10个 37个( A)
无复审初步设计 详细设计二、复审方式
1、正式复审:会议详细审议。
2、临时性复审:对局部问题进行讨论。