版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件工程导论,吉林大学计算机学院 2007年9月,分析示例教材购销管理系统(1,问题描述:学校教材科根据业务的需要,建立一个学校教材购销管理系统,提高教材采购、销售和信息管理的效率,学生,张秘书,购书申请,王会计,李出纳,赵保管,学生,购书证明,购书申请,购书申请,书,学生,审 查有效性,购书单,开发票,开领书单,发书,学生,有 效购书单,发票,领书单,书,学生,审查并开发票,购书单,开领书单,发书,学生,发票,领书单,书,2)去掉具体模型中的非本质因素,抽象出当前系统的逻辑模型,1)通过对现实环境的调查研究,获得当前系统的具体模型,3)分析当前系统与目标系统的差别,建立目标系统的逻辑模型,分
2、析示例教材购销管理系统(2,学生,审查并开发票,购书单,开领书单,学生,发票,领书单,无效书单,4)对目标系统进行补充和完善,并写出完整的需求说明,学生,1 审查并开发票,购书单,2 开领书单,学生,发票,领书单,无效书单,各班学生用书表,教材存量表,5)对需求说明进行复审,直到确认文档齐全,并且符合用户的全部需求为止,分析示例教材购销管理系统(3,学生,教材购销管理系统,书 库保管员,1. 教材购销管理系统的顶层DFD,学生,书 库 保管员,2. 第二层DFD图教材购销系统,购书单,领书单,缺书单,进书通知,购书单,领书单,1 销 售,2 采购,进书通知,F2: 缺书登记表,F1: 教材存量
3、表,缺书单,进书通知,分析示例教材购销管理系统(4,1.1 审 查有效性,1.2 开发票,有效 购书单,1.3 领书并 开领书单,发票,1.4 登记缺书,1.5 补售教材,F2: 缺书登记表,学生,学生,无效书单,领书单,领书单,F3: 各班学生用书表,F4: 售书登记表,补售书单,暂缺书单,采购,3. 第三层DFD图销售子系统,F1: 教材存量表,分析示例教材购销管理系统(5,2.3 修改教材库存和待购量,2.1 按 书 号 汇总缺书,F2: 缺书登记表,销售 子系统,书库 保管员,F1: 教材存量表,进书通知,3. 第三层DFD图采购子系统,2.2 按出版社 统计缺书,F5: 待购教材表,
4、F6: 教材一览表,进书通知,分析示例教材购销管理系统(6,数据字典(Data Directory-DD) 领书单 = 学院+专业+班级+学号+姓名+书号+(书名)+数量+日期 有效购书单 = 领书单 发票= 学号+姓名+书号+(书名)+单价+数量+总价+书费合计 教材存量表 = 书号+单价+数量 暂缺书单 = 学号+姓名+ 书号+数量 补售书单 = 学号+姓名+ 书号+数量,第三章 需求分析,一. 需求分析的任务,需求分析是软件定义的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”这个问题。对目标系统提出完整、准确、清晰、具体的要求。 1.确定对系统的综合要求,充分理解和表达用户的
5、需求 对系统的要求包括:功能性需求和非功能性需求 功能性需求主要说明系统的各功能。通常包括系统的输入、处理和输出等。 非功能性需求即为软件的“约束,过程需求,产品需求,外部需求,非功能性需求,交付需求 实现方法需求 标准需求,性能需求 可移植性需求 可靠性和可用性需求 可重用性需求 安全保密性需求 出错处理需求,法规需求 费用需求 互操作性需求,二. 分析过程,2.分析系统的数据要求(数据元素、数据结构) 3.导出系统的逻辑模型(数据流图+数据字典+主要的处理算法) 4.修正系统开发计划 5. 开发原型系统(系统主要功能,需求分析过程:需求的获取需求分析修改开发计划编写软件规格说明书 验证。
6、1.需求的获取:访谈 2.需求分析:结构化分析方法(SA方法)-面向数据流自顶向下逐步求精进行需求分析的方法。要建立三种模型:数据模型(实体-联系图)、功能模型(数据流图)和行为模型(状态转换图,3.修改开发计划 4.规格说明书:使用形式化方法描述用户对软件系统的需求,5.验证软件需求,从哪几个方面验证软件需求的正确性(四个方面,一致性: 任何一条需求不能和其他需求互相矛盾。 完整性: 规格说明书应该包括用户需要的每一个功能和性能。 现实性: 指定的需求是用现有的硬件、软件技术可以实现的。 有效性: 需求是正确有效的,确实能解决用户面对的问题,验证软件需求的方法,一致性:人工审查-形式化描述软
7、件需求,软件工具自动验证。 现实性: 参考以往的开发经验,分析,仿真或模拟 完整性和一致性:原型系统,三. 实体-联系图,用户的数据要求-需要哪些数据,数据之间有哪些联系,数据本身有哪些性质,数据的结构 等。 用户的处理要求-对数据进行哪些处理,每个处理的逻辑功能。 概念性模型(信息模型)-一种面向问题的数据模型,是按照用户的观点来对数据和信息建模。表示概念性数据模型的最常用方法是实体-联系方法,采用用 ER图的方式,这种表示又称为ER模型,ER模型,实体: 客观世界中存在的且可区分的事物。 联系: 客观事物之间的联系(三类-1:1,1:N,M:N) 属性: 实体或联系所具有的性质,四. 数据
8、规范化,第一范式:每个属性值都必须是原子值,即仅仅是一个简单值而不含有内部结构,为减少数据冗余,避免出现插入或删除异常,简化修改数据的过程,通常需要把数据结构规范化。 所谓“范式”是指规范化的关系模式。一个好的关系模式包括四个条件:尽量少的冗余,没有插入、删除、更新异常,例:某人设计了一个关系模式如下: S(学号#,姓名,年龄,性别,系别,系主任,课程号#,成绩,第二范式:在满足第一范式的基础上,每个非关键字属性都由整个关键字决定,就上例而言,我们可把关系模式S分成如下两个关系: SR(学号#,姓名,年龄,性别,系别,系主任) SC(学号#,课程号#,成绩,在关系SR中: 学号#-(姓名,年龄
9、,性别,系别) 系别-系主任 在关系SC中: (学号#,课程号#)-成绩,第三范式:在满足第二范式的基础上,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述,就SR而言,我们可把它分成如下两个关系: SS(学号#,姓名,年龄,性别,系别,系主任) RD(系别 ,系主任,五. 状态转换图(行为模型,状态转换图通过描绘系统的状态及引起系统状态转换的事件来表示系统的行为。 1.状态:是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态规定了系统对事件的响应方式。 系统状态图中的状态有:初态,终态和中间态。 初态用实心圆表示,终态用一对
10、同心圆表示。中间状态用圆角矩形表求,可分成三个部分,上层为状态名称(必有),中间层为状态变量的名字和值,下层是活动表。 活动表格式:事件名(参数名)/动作表达式 2.事件:是在某个特定时刻发生的事情,它是对引起系统做动作或从一个状态转换到另一个状态的外界事件的抽象。 标准事件:entry,exit,do。entry事件指定进入该状态的动作,exit指定退出该状态的动作,而do事件则指定该状态下的动作。 3.守卫条件:是一个布尔表达式,如同时使用事件说明和守卫条件,则当事件发生且布尔表达式为真时进行状态转换,六. 图形工具,层次方框图: 用树形结构的一系列多层次的矩形框描绘数据的层次结构,产 品
11、,硬 件,软 件,服 务,处理机,存储器,外部设备,系统软件,应用软件,软件服务,硬件维修,培训,操作系统,编译程序,软件工具,层次方框图的一个例子,注意:层次方框图即可以表示数据的层次结构,也可以表示程序的层次结构,4. 图形工具(续,Warnier 图: 用树形结构描绘数据的层次结构,软件 产品,系统软件,操作系统(P1,编译程序 (P2,软件工具,编辑程序(P3,测试驱动程序(P4,设计辅助程序(P5,应用软件,4. 图形工具(续,IPO 图: 输入/处理/输出图的简称-IBM,旧的主文件,事务文件,1、校验主记录,2、校验事务记录,3、更新主记录,1、校验主记录,2、有效的事务记录,3
12、、更新后的主文件,改进的IPO图的形式(P59,第四章 形式化说明技术,4.1 概述 1.形式化方法:是描述系统性质的基于数学的技术,如果一种方法有坚实的数学基础,那么它就是形式化的。 2.非形式化方法的缺点: 可能存在矛盾、二义性、含糊、不完整及抽象层次混乱等问题。 3.形式化方法的优点: 能简洁准确地描述物理现象、对象或动作的结果。 可在不同软件工程活动中平滑过渡。 提供高层确认的手段。 4.2 有穷状态机 1.概念:一般一个有穷状态机包括5个部分:状态集J、输入集K、转换函数T(可由当前状态和当前输入确定下一个状态)、初始态S和终态F。其中J是一个有穷非空状态集;K是一个有穷非空输入集;
13、T是一个从(J-F) K到J的转换函数;S J,是一个初始状态;F J ,是终态集,例子:一个保险箱装了一个复合锁,锁有三个位置,分别标记1、2、3,转盘可向左(L)或右(R)转动。保险箱的组合密码是1L、3R、2L,转盘的任何其他运动都将引起报警,状态集J:保险箱锁定,A,B,保险箱解锁,报警 输入集K:1L,1R,2L,2R,3L,3R 初始态:保险箱锁定 终态集:保险箱开锁,报警,对系统进行规格说明,通常都要对有穷状态机进行扩展,在5元组中加入第6个组件谓词集P,每个谓词都是系统全局状态的函数。此时转换函数是一个从(J-F) K P到J的函数,2.例子:在m层大厦中需要控制n部电梯,要求
14、这n部电梯按约束条件C1,C2,C3在楼层间移动。 C1:每部电梯内有m个按钮,每个按钮代表一个楼层。当按下一个按钮时该按钮指示灯亮,同时电梯驶向相应的楼层,到达按钮指定楼层时指示灯熄灭。 C2:除了大厦的最低和最高层之外,每层楼都有两个按钮分别请求电梯上行和下行。这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求方向移动。 C3:当对电梯没有请求时,它关门并停在当前楼层。 3.评价:有穷状态机方法采用“状态+事件+谓词=下个状态”来描述规格说明。易读、易写、易验证,比数据流图更精确。 缺点:对于大系统复杂,不可处理定时问题,4.3 Petri网 1.概念:Petri包
15、含4种元素:一组位置P、一组转换T、输入函数I以及输出函数O,位置P:P1,P2,P3,P4 转换T:t1,t2 输入函数:I(t1)=P2,P4 I(t2)=P2 输出函数:O(t1)=P1 O(t2)=P3,P3 定义:Petri网结构是一个四元组C=(P,T,I,O)。其中, P=P1,Pn是一个有穷位置集,n0。 T=t1,tm是一个有穷转换集,m0,且T和P不相交。 I:T-P为输入函数,是由转换到位置无序单位组的映射。 O:T-P为输出函数,是由转换到位置无序单位组的映射。 一个无序单位组又称多重组,是允许一个元素有多个实例的广义集,标记:Petri网的标记是在Petri网中权标(
16、token)的分配。输入的一组位置中有权标,才能激发转换。 Petri网具有非确定性,即如果数个转换都达到了激发条件,则可激发任意一个,标记为(1,2,0,1)。 Petri网C=(P,T,I,O)中的标记M,是由一组位置P到一组非负整数的 映射。M:P-0,1,2,这样带标记的Petri网成为五元组(P,T,I,O,M)。 禁止线:是用一个小圆圈而不是用箭头标记的输入线。当禁止线上没有权标是,相应的转换才能激发,2.例子:用Petri网讨论电梯问题。 每个楼层用一个位置Ff代表(1fm),电梯用一个权标代表。若位置Ff上有权标,则表示楼层f上有电梯。 (1)电梯按钮 C1:每部电梯内有m个按
17、钮,每个按钮代表一个楼层。当按下一个按钮时该按钮指示灯亮,同时电梯驶向相应的楼层,到达按钮指定楼层时指示灯熄灭。 电梯中指定楼层f的按钮,用位置EBf表示(1fm)。在Ebf上有一个权标,就表示电梯内楼层f的按钮被按下了,2)楼层按钮: C2:除了大厦的最低和最高层之外,每层楼都有两个按钮分别请求电梯上行和下行。这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求方向移动。 用位置FBuf和FBdf分别表示f楼层请求电梯上行和下行的按钮(1fm,底层的按钮为FBu1,最高层的按钮为FBdm,C3:当对电梯没有请求时,它关门并停在当前楼层,第五章 总体设计,回答的问题:问题
18、定义、可行性研究、需求分析 总体设计就是要回答: “概括地说,系统应该如何做?”。 两项任务: (1)划分出组成系统的物理元素-程序、文件、数据库、人工过程和文档。 (系统设计阶段) (2)设计软件的结构-确定每个程序的模块组成及模块之间的相互关系 其中结构设计是总体设计的重点,在这个阶段主要完成四个任务: a.将软件系统划分成模块; b.决定每个模块的功能; c.决定每个模块的调用关系; d.决定模块间的接口。 总体设计的必要性: 可站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低的成本开发出较高质量的软件系
19、统,5.1 设计过程(两个阶段): 系统设计:确定系统的具体实现方案。 结构设计:确定软件结构,5.2 设计原理: 1、模块化: 模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识代表它,模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来组成一个整体,可以完成指定的功能,满足用户的需求,规律二:如果一个问题Q分别由P1和P2组成而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。即:C(P1+P2)C(P1)+C(P2) 由此可以得出,解决问题Q需要的工作量大于分别解决问题P1和P2需要的工作量之和,即E(P1+P2)E(P1)+E(
20、P2)。因此对软件进行适当分解,不但可以降低复杂性,而且可以减少开发工作量,降低软件成本,模块数目,成本/模块,接口成本,模块化和软件成本,模块化的依据: 规律一:如果问题P1的复杂性大于问题P2,则解决问题P1需要的工作量大于解决问题P2需要的工作量。即:如果C(P1)C(P2),则E(P1)E(P2,2、抽象: 抽象是对事物共同的本质特性进行抽取和概括,忽略次要因素。 对同一事物的抽象可以从不同层次或不同方面进行。抽象的层次取决于客观问题的需要。上层的抽象要由下层的抽象来实现,3、逐步求精: 逐步求精是为了能集中精力解决主要问题,而尽量推迟对问题细节的考虑。 逐步求精是一种自顶向下的设计策
21、略,按该策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的,通过逐步分解对功能的宏观陈述面开发出层次结构,直至最终得出用程序设计语言的表达的程序。 4、信息隐藏和局部化: 信息隐藏是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据)对于不需要这些信息的模块来说是不能访问的。 信息局部化是指在设计和确定模块时,把一些关系密切的软件元素,最好是放在同一个模块内。 所谓“关系密切”是指这些软件元素(数据和所有有关过程)是共同解决某问题或实现某功能所需的,5、模块独立: 模块独立:每个模块完成一个相对独立的子功能,并且和其他模块之间的关系很简单。 重要性:(1)具有独立模块的软件容
22、易开发。 (2)独立的模块容易测试和维护。 模块的独立性度量标准: 模块独立性可由两个定性的标准度量,即内聚和耦合。耦合衡量不同模块彼此间互相依赖的紧密程序;内聚衡量一个模块内部各个元素彼此结合的紧密程序。 1.耦合:对一个软件结构内不同模块之间互连程序的度量它表现了模块的外部特征。模块间耦合越低,模块的独立性越好,例如:菜单设计:数据记录维护 数据记录检索 数据追加 关键字查询 数据修改 组合查询 数据删除 模糊查询 数据浏览,模块的耦合有以下几种,1)非直接耦合: 是指两个模块能彼此独立地工作,没有直接的关系。它们的关系是非直接的,仅通过主程序的控制和调用来实现,所以两者之间不传递任何信息
23、。这样的模块间关系,称为非直接耦合或独立耦合,模块1,模块3,模块4,非直接耦合 模块之间没有信息传递,2)数据耦合: 是指两个模块之间通过调用,相互传递的是数据。联系简单,耦合程序低,对系统的执行没有大的影响,是一种较理想的耦合,数据耦合 通过简单变量交换数据,3)控制耦合: 是指一个模块调用另一个模块时,传送的不是数据参数,而是控制变量。控制耦合是中等耦合,它增加了系统的复杂程序。 在控制耦合情况下,被调用模块内部的处理逻辑大多如图所示。模块内具有多个功能,根据控制参数的值而选用相应的功能部分执行,例1:模块B是打印会计报表,可以打印日报表、月报表、年报表。模块A是调用模块B的,调用时必须
24、传递一个信息: 日报表:指明日期 月报表:指明月份 年报表:指明年份 在调用数据库时,三种报表调用的内容是不同的,输出格式相同,工作过程不同,模块A和模块B是控制耦合,例2:模块A把参数“名次”传送给“发奖牌”模块,该模块包含有“发金牌”、“发银牌”和“发铜牌”三个功能,根据“名次”的值,选定相应的功能执行,控制耦合的问题在于增加了理解和编程的复杂性。也就是可理解性降低了,因为在编制模块A的程序时首先要理解“发奖牌”模块的开关量的作用,同时模块A中必须设置开关量的值,在调用“发奖牌”B模块。模块A可能还要根据返回值的不同而进行不同的处理,在大多数情况下,模块间的控制耦合并不是必须的,只要: 将
25、被调用模块的判定移到调用模块中进行。 将被调用模块按其功能分解为若干个单一功能模块。 就可以将两个模块间的控制耦合改变为数据耦合,4)特征耦合: 是指一个模块调用另一个模块时,传送的是整个数据结构,但被调用模块只需要使用其中一部分数据元素,为特征耦合。 (5)外部耦合: 是指与计算机外部设备有关的模块,如输入、输出及数据交换的模块。只有当需要的设备正常联机时,这些模块才能正常使用,6)公共耦合: 当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合为公共耦合或公共环境耦合。 公共环境可以是全程变量、共享的通信区、内存的公共覆盖区等。 当只有两个模块共享公共数据区,那么这种耦合有两种可
26、能: a.一个模块往公共数据区送数据,另一个模块从公共数据区取数据,这是数据耦合的一种情形。 b.两个模块都是既往公共数据区送数据,又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。 模块间公共耦合是一个非常不好的耦合情况,模块的独立性极差。这种耦合存在以下问题: 这种耦合使软件的可理解性降低,模块间存在错综复杂的联系。往往搞不清某个模块究竟用了那些数据,而某个数据又有哪几个模块在使用,公共耦合使软件可维护性也很差。例如要修改一个变量的名称或属性时,由于每个模块都可能隐式地使用这个变量,所以只有彻底检查系统每个模块后,才能确定要对哪些模块做相应修改。反过来,如果修改了一个模块,则很
27、难确定还有哪些数据也必须予以修改。 公共耦合使软件的可靠性大大降低。其原因在于,公共数据区没有任何保护措施,哪个模块都可以随意地读写其中的数据,所以某个模块的错误可以扩散,导致某些变量错误,而这些错误又能通过使用这些数据的模块出错,最终使系统无法运行,7)内容耦合: 是指一个模块不经调用直接访问另一模块的内部信息。这是最不好的耦合,它对模块独立性破坏最大。 情况: 某个模块直接访问另一个模块的内部信息。 两个模块有相同的程序段 一个模块可以直接从非正常入口进入另一个模块。 一个模块有多个入口,A模块中有两个入口,一个是正常入口,另一个是非正常入口ENT(这意味着该模块具有两个功能)。另一个模块
28、B中的“GOTO ENT”语句使得B模块不是通过模块名“A”,用过程语句调用从正常入口调用A执行,而是从非正常入口ENT进入A模块内部执行A模块的部分程序代码。这种情况造成了: 模块的可理解性差。由于模块B与A的界面不清楚,要理解B模块,还必须要去了解另一模块(A)的内部情况才能理解。 降低了模块的可维护性。一旦发生错误,如果要想找出错误,不但要仔细检查B模块本身,还要仔细检查A模块是否有错误。修改错误时,也可能两个模块均须修改。 可靠性降低。以本例来说,不仅B模块本身可能出错,而且A模块中出现错误将影响B模块的执行,2.内聚:一个模块内各个元素彼此结合的紧密程度。内聚性越高,模块的性能越好。
29、 低内聚: (1)偶然内聚:一个模块完成一组任务,任务之间的关系很松散。(如:公共语句。,偶然内聚的缺点是: 可理解性差。任何人都难以理解这个模块究竟干什么,为什么存在,甚至难以命名。 可修改性差。假定A模块要求把语句“MOVE O TO R”改为“MOVE N TO R”,而其它模块不想改。诸如此类,可见模块E的修改相当困难,2)逻辑内聚:若一个模块完成的任务在逻辑上属于相同或相似的一类,即若干个逻辑功能类似的任务组成一个模块,则为逻辑内聚。 例1:对数据库中的数据可以按各种条件查询,如姓名、年龄、职称等这些查询条件在逻辑功能上相同。设计时,可以将它们放在同一个查询模块内,例2:图中a表示A
30、、B、C分别调用逻辑功能类似的E、F和G模块。图中b表示将逻辑功能类似的E、F和G模块组合成一个新的模块“EFG”。图中c表示EFG模块内部的逻辑。它表示A、B和C先公用一部分代码段,然后根据开关量的值分别执行A1、B1和C1,公用代码段表示原来相似的功能模块E、F和G中相同的部分,而A1、B1和C1表示不同的成分,逻辑内聚也属于低内聚,它的缺点是: 不易修改。因为很可能当某个调用模块要求修改公用代码时,而其它的调用模块则不想修改。 增强了模块的耦合强度。图a中A、B、C模块与它们的被调用模块E、F和G之间的耦合关系也许使数据耦合。当将模块E、F和G合并成“EFG”模块之后,A、B、C这三个模
31、块要调用“EFG”模块时,需传送一个开关变量,这样A、B、C模块与“EFG”模块之间就成为控制耦合了。 效率不高,浪费主存,因为“EFG”模块每次调用,只有一部分代码被执行,3)时间内聚:若同一模块的若干个任务必须在同一段时间内执行,则称时间内聚。 如初始化工作。例:为各种变量置初值的动作和打开文件的动作经常在系统初始化时进行。因此,把这些在时间上同时进行的动作组合起来形成一个模块,该模块的内聚称为时间内聚。 另如:财务管理中,“年终结算”需要作一系列的任务:第四季度结算;年结算;经费来源;下年支出,这些需要同时计算出来。如果放在同一模块内,就成为时间内聚。 其特点是: 模块各成分是在同一时间
32、段内执行的,时间内聚模块内各部分的处理动作只执行一次,但往往影响到其他许多模块的运行,例如初始化模块将对许多模块的运行有影响。因此和其它模块的耦合程度比较高,可维护性比较低。 时间内聚模块内各成分的时间关系在一定程度上反映了各成分的某些实质,所以它的理解性以及内聚紧密程度比逻辑内聚要好,中内聚,4)过程内聚:若模块内的处理元素是相关的,且必须以特定次序执行,则称过程内聚。过程内聚的内部结构通常是用程序流程图作为工具,通过研究程序流程图来确定模块划分,得到的往往是过程内聚。 例:由某商店统计各种配件的销售和订货量的程序框图划分模块,并产生该程序的结构图。 在“初始化”中先为各变量置初置,然后读入
33、: 一是“发货单”,用以计算累积销售量; 另一种是“订货单”,用以计算累积订货量。 这种过程内聚是属于中等程度的内聚,模块内各成分的联系紧密程度优于前面讲述的几种,也比它们好理解和维护,5)通信内聚:通信内聚是指模块内各成分有公用的数据区,或者说模块中所有成分都使用相同的输入或产生相同的输出。 例如:“查询模块”中有两个功能成分:“查询教师学生表”与“查询学生选课表”都要用到库文件“学生课程教师”,显然,这种内聚使模块中各功能成分关系密切多了,因为它们使用或产生关于同一数据区中的相应数据,说明功能是密切相关的,所以理解性和维护性都较好。 例如:财务中的流水帐文件可以产生四种报表,放在同一模块内
34、,6)顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必须顺序执行。根据数据流图划分模块时,通常得到顺序内聚。 顺序内聚模块中各功能成分显然具有更强的紧密性,可维护性和可理解性很强,高内聚,7)功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。 例如:“求平方根”模块,“打印学生成绩单”模块等都是为了完成一个具体功能。 通常功能内聚模块的界面清楚,与其他模块的联系比较低。整个模块只为完成一个功能,易于理解和维护。说明功能是密切相关的,所以理解性和维护性都较好。 在软件设计开发过程中,我们追求模块间的耦合度应尽可能小,而模块中的内聚度应尽可能大,其中:
35、 图a表示A和B两模块的直接相关模块M1和M2中都有相同的功能部分M。 图b为第一种消除重复功能的方案,将M1和M2两个模块合并形成新的模块M1.2。这个方案虽然消除了重复功能,但由于模块M1和M2两模块中既有相同的功能部分,又有不同的部分,因而模块M12是逻辑内聚的模块即模块M12含有相同的部分M和其它不同的部分。从而导致模块M12同模块A和模块B之间的关系变成为控制耦合关系,因为M12必须从A和B接受一个开关量以说明本次调用是来自模块A还是模块B。所以该方案是不可取的,5.3 启发规则: 1、改进软件结构提高模块独立性。 设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,
36、力求降低耦合,提高内聚。 例如:某汽车配件公司的业务管理系统中有销售管理功能和订货管理功能,它们要计算销售积累和订货累积。因此,可以把这相似而又重复的计算累积功能的模块重新划分以消除重复功能。但是“计算销售累积”模块与“计算订货模块”,它们既相似而又有不同,那么应该如何将其中的重复功能消除呢,图c方案是把M1和M2两个模块中的相同功能M分离出来,构成一个公共的下层模块M。这个方案是合理的。 图d和e分别表示在分离出来公共部分M之后,如果剩下部分比较简单则可以与它们的直接上层模块A和B合并成一个模块。这几个方案消除了重复功能,而且模块内联系强度高,块间联系强度较低,2、模块规模应该适中。 如果模
37、块规模过大,模块复杂性增加,可理解性下降。这种情况往往是由于系统分解不够充分造成的,应进一步分解。 如果模块过小,使程序运行效率下降,模块间的转接工作增加,而且使模块接口的复杂性增加。因此在初始结构优化时,应该将它合并,通常是与它的调用模块合并。 如果这个模块尽管小,但有多个模块调用它时,此时不应将它与其他模块合并。 3、深度、宽度、扇出和扇入应适当。 深度表示软件结构中控制的层数。它往往大致地说明一个系统的大小和复杂程度。 宽度表示控制分布。是指软件结构中同一层次上的(最大的)模块总数,宽度越大则系统越复杂。 扇出是指一个模块直接控制下的模块数目。扇出过大或过小都不太好。扇出过大意味着该模块
38、过于复杂,需要控制和协调过多的直接下层模块,此时应对该模块的上层调用模块进行分析,是否需要把该模块分为两个模块。或者对本模块进行重新分解,增加一个中间层次。一般来说扇出以34个为宜,最多不要超过59,扇入是某个模块有多少个直接调用它的上层模块数目。扇入大,一般表明该模块设置得好,有很多模块要用该模块的功能,模块再用程度高。高扇入提高了主存利用率和节省人力。 但是过高的扇入也要分析该功能是否是单一功能的功能模块,如果不是单一功能的功能模块,则反映了该模块的功能过于复杂。这时应重新进行模块分解,以消除模块间的控制耦合情况,避免过高的扇入,实践表明,良好的软件结构应该是顶层扇出比较高,中层扇出较少,
39、而底层高扇入,4、模块的作用域应该在控制域之内。 一个模块的控制范围是指该模块本身及其所属的(直接或间接调用的)所有模块的集合。如图,C模块的控制范围为C、E、F、G和H五个模块。 一个模块的作用范围是指该模块内一个判定以各种方式影响的模块的集合。 所谓受判定影响的模块是指: 如果该模块中含有一些依赖于这个判定的操作,那么该模块就在判定的作用范围之内。 如果整个模块是否执行取决于判定,那么该模块及其直接的上级调用模块均在该判定的作用范围之内。因为该上级调用模块中一定含有一个调用模块的过程语句,而这个过程语句的执行取决于这个判定。 那么为什么要求模块判定的作用范围应该在模块的控制范围之内呢,最理
40、想的情况是图d,它完全消除了额外参数传送,因此判定作用范围与模块控制范围之间的关系准则应包括以下两方面: A:判定的作用范围应在受判定的模块的控制范围之内。 B:判定所在的模块应与受判定影响的模块,在层次上尽量靠近。 如果在设计过程中,发现作用范围不在控制范围内,可采用如下办法把作用范围移到控制范围之内。 1)将判定所在模块合并到它的调用模块(直接上级模块),使判定处于较高层次; 2)将判定影响的模块下移到控制范围内; 3)将判定上移到层次中较高的位置。 例:某大学决定对各科学习成绩均在“良好”以上的学生给予奖励。奖励方案如下:如果该学生的课程“优秀”率在85%以上(含85 % )发给一等奖学
41、金并发给“优秀学生”奖状;其余学生发给二等奖学金并发给“三好学生”奖状。为此可设计该发奖系统程序初步结构图如下图所示,确定发奖系统,计算,一等奖,计算,二等奖,奖金总计,发一,等奖状,发二,等奖状,奖状总计,计算奖金,分发奖状,确,定,发,奖,系,统,其中:“计算奖金”模块中的判定逻辑如下: 如果“各科成绩”“良好” 且 “课程成绩优秀率”85% 那么 置“等级标记”一等 调用“计算一等奖学金”模块 否则 如果“各科成绩”“良好” 置“等级标记”二等 调用“计算二等奖学金”模块 “分发奖状”模块的判定逻辑如下: 如果 “等级标记”一等 那么 调用“分发一等奖状”模块 否则 调用“分发二等奖状”
42、模块。 不符合判定作用范围应在该判定所在模块的控制范围之内的设计准则。进行改进,把判定上移,使进行判定的模块与它的直接调用模块合并,并重新划分模块,如图所示,确定发奖系统,计,算,一等奖金,计算二等奖,计算一等奖,分,发,一等奖状,总,计,计,算,二等奖金,分,发,二等奖状,改进的,确定发奖系统,5、力争降低模块接口的复杂程度。 模块接口复杂是软件发生错误的一个原因。而且接口复杂或是模块间传递的数据之间没有联系时,是高耦合低内聚的征兆,应该重新分析这个模块的独立性。因此,应仔细设计模块接口,使得信息传递简单并且和模块功能一致。 6、设计单入口单出口的模块。 模块设计过程中应使所有模块均设计成单
43、入口单出口的模块,不应允许任何模块的设计违反此原则。 因为多入口的模块设计为“直接引用”的接口方式创造了条件,必然会产生“内容耦合”的模块间的关系。所以从模块顶部进入,底部退出的单入口单出口设计,使得模块易于理解、容易维护。 7、模块的功能应该可以预测。 当一个模块的功能可以预测时,该模块可以看作是一个黑箱。只要输入相同的数据就可以产生同样的输出,5.4 图形工具 1、层次图和HIPO图 层次图用来描述软件结构,层次图+IPO图= HIPO图。这里一个矩形框代表一个模块,方框间的连线表示调用关系而不是组成关系,2、结构图 方框之间的箭头表示模块的调用关系,带注释的箭头表示模块间来回传递的信息:
44、空心圆数据,实心圆控制信息。结构图还可以表示模块的选择调用或循环调用。参见书:P94,产生最佳解,得到好输入,计算最佳解,输出结果,读输入,编辑输入,结果格式化,显示结果,原始输入,好输入,好输入,解,解,解,络式化的解,格式化的解,原始输入,5.5 面向数据流的设计方法 面向数据流设计方法是结构化设计的方法的重要组成部分。它是在数据流图的基础上进行设计工作的。 该方法的实施要点是: 1、首先研究、分析和审查数据流图。 2、然后根据数据流图决定问题的类型。 3、由数据流图推导出系统的初始结构图。 4、运用一些优化原则来改进系统的初始结构图,直到得到符合要求的结构图为止。 5、然后进入详细设计阶
45、段并制定测试计划。 一.概念 根据结构化分析的观点,数据流可以分为两种基本类型:变换型数据流即变换流和事务型数据流即事务流,1、变换流。 变换型数据流图:具有比较明显的输入、变换(或称主加工)和输入界面的数据流图,2、事务流 事务型数据流图:数据沿着输入通路到达一个加工T,该加工将它的输入分离成一串发散的数据流,形成多个活动路径,并根据输入数据的类型,在若干活动路径中选择一个来执行,具有这样数据特征的数据流,叫事务型数据流图,包裹单,格式检查,计算邮费,打印票据,合格的包裹单,票据,票据,事务中心 T 完成下述任务: 接受输入事务(数据); 分析每个事务以确定它的类型; 根据事务类型选取一条活
46、动通路,3、设计过程,二.变换分析 变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。 汽车数字仪表板功能: 1) 通过A/D 转换实现传感器和微处理器接口, 2) 在发光二极管面板上显示数据, 3) 指示每小时英里数(mph),行驶的里程,每加伦油行驶的英里数(mpg)等等。 4) 指示加速或减速; 5) 超速警告:如果车速超过55英里/小时,则发出超速警告铃声,读旋转信号,收集和求平均,转换成转/分( rpm,计算里程,确定加速 / 减速,产生加速/减速显示,产生里程显示,计算mph和超速值,计算燃料消耗,发出铃声,产生mph显示,产生
47、mpg显示,读和校核,计算gph,旋转信号,信号/秒 SPS,SPS,SPS,rpm,rpm,箭头指示,上箭头,水平线,下箭头,英里,超速值,铃声,mph,mph,mpg,gph,燃料流,燃料流传感器信号,Mpg 显示,数字仪表板 控制,接受传感器信号,数据转换控制,驱动仪表板,输入控制,变换控制,输出控制,确定输入流和输出流的边界,划分变换或事务中心,Cm,Ca,Ct,Ce,第一级分解的方法,输入处理控制模块Ca,协调对所有输入数据的接收。 变换中心控制模块Ct,管理对内部形式数据的所有操作。 输出处理控制模块Ce,协调输出信息的产生过程,A,D,B,C,Cm,Ca,C,B,D,A,接受传感
48、器信号,转换成rpm,收集SPS,读旋转信号,计算gph,读燃料流,数字仪表板控制,确 定加/减速,计算mph,计算gpg,计算里程,驱动仪表板,加速/减速显示,显示mph,显示mpg,显示里程,发出铃声,发光二极管显示,第二级分解:从变换中心的边界开始沿着输入通路向外移动,把输入通路的每个处理映射成软件结构Ca的下一层模块;同样分解输出和变换中心,数字仪表板 控 制,接受传感器 信 号,转换成rpm,读旋转信号,计算gph,读燃料流,数字仪表板 控 制,确 定加/减速,计算mph,计算gpg,计算里程,驱动仪表板,加速/减速显示,显示mph,显示mpg,显示里程,发出铃声,发光二极管显示,数
49、字仪表板软件系统经过调整后的结构图,注意:红色模块的位置有所调整,使用设计度量和启发式规则对每一次分割得到的模块进行再分解和合并,主模块,取得有效数据,计算,给出结果,1,给出结果,2,取得数据,检验,读入数据,编辑,A,A,B,B,B,C,C,C,DE,转换,1,转换,2,输出结果,输出结果,D,E,D,G,G,E,F,F,方法,A,变换型数据微流图导出结构图,首先设计一个主模块,作为顶层,并用系统的名字为它命名。第一层可以有两种方法来设计。 方法A:逻辑输入-输入模块,功能是为主模块提供数据;逻辑输出-输出模块,功能是将主模块提供的数据输出;变换中心-变换模块,功能是将逻辑输入转换成逻辑输
50、出,方法B:设计三个模块称为:CI、CT、CO。 CI是“输入控制模块”,功能是协调所有输入数据的接收和预加工,并向主模块发送所需的数据,由主模块转发给变换中心。 Ct是“变换控制模块”,功能是负责系统内部数据的变换和加工,把输入数据(逻辑输入)变成可供输出数据(逻辑输出)。 CO是“输出控制模块”,功能是负责输出数据的加工和实现物理输出,主模块,C,I,计算,检验,编辑,C,C,DE,方法,B,变换型数据微流图导出结构图,C,T,C,O,转换,1,转换,2,A,B,C,C,DE,DE,D,E,F,G,方法A:为每个输入模块设计两个下层模块。“物理输入模块”,它的功能是接收数据;“逻辑输入模块
51、”,是把接收的数据变成它的上级模块所需的数据。过程重复进行,直到输入物理数据流为止。 同样,为每个输出模块设计两个下层模块。逻辑输出:将上级模块提供的数据变换成输出的形式;另一个物理输出。 设计变换中心模块的下层模块没有通用的方法,一般应按照数据流图的变换中心部分和功能分解的原则来考虑如何对变换中心模块进行分解。 方法B:在CI、CT、CO的基础上,沿输入通路向下映射CI控制下的一个低层模块,直到物理输入为止;然后再将Co沿输出通路映射一个低层模块,直到物理输出为止。最后把变换中心内的每个加工映射成。下的一个低层模块,XX,系统,输入,c,变换控制,输出,g,输入,b,输入,t,b,变换,c,
52、输入,a,a,变换,t,调度,c,变换,d,e,F,变换,g,d,变换,h,输出,g,f,f,g,g,g,c,f,h,e,变换,f,c,d,h,f,c,b,c,a,a,t,t,t,b,b,T,1,T,2,T,3,t,1,b,1,操作,1,操作,2,操作,n,细节,1,细节,2,A,T,T,1,T,2,T,3,B,D,E,F,C,a,t,t,1,t,2,t,3,b,1,b,2,b,3,c,d,e,f,g,h,变换中心,输入,输出,三、事务分析,4,3,2,总 控,接收通路,C通路,B通路,A通路,调 度,A_CTL,1,4,2+1,3,2,1,B_CTL,C_CTL,设计优化 先使系统工作起来,
53、然后使它快起来,数据流图,软件结构,第六章 详细设计,详细设计阶段的目标: 确定应该怎样具体地实现所要求的系统。 精确地描述整个目标系统,从而在编码阶段可以把这个描述翻译成用某种程序设计语言书写的程序。 对于程序的设计,通常分为两个阶段完成:结构设计(总体设计)和过程设计(详细设计)。 详细设计阶段应完成两个方面的工作,一是确保模块功能实现的程序逻辑结构的设计,二是采用什么方法来表达和描述程序的逻辑结构。 6.1 结构程序设计 1965年E. W. Dijstra提出从高级语言中取消Goto语句,1966年Bohm 和 Jacobini 证明了只要顺序、选择、循环这三种基本结构就能实现任何单入
54、口单出口的程序,B,exp,A,A,B,exp,A,A,exp,T,F,T,T,F,F,顺序结构,选择结构,循环结构,结构程序设计: 一种程序设计技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。 结构化程序设计的主要原则: (1)采用自顶向下逐步求精的设计方法。 (2)使用语言中的顺序、选择、重复等有限的基本结构表示程序逻辑。 (3)选用的控制结构只允许一个入口和一个出口。 (4)复杂结构应该用基本控制结构进行组合嵌套实现。 (5)严格控制GOTO语句。 分类: 经典的结构程序设计:顺序,选择,当型循环 扩展的结构程序设计:顺序,选择+多分支,当型循环+直到型循环 修正的结构程
55、序设计:顺序,选择+多分支,当型循环+直到型循环,break结构 6.2 人机界面设计 人机界面设计是接口设计的重要组成部分。 1.设计问题:系统响应时间、用户帮助设施、出错信息处理和命令交互。 (1)系统响应时间:指从用户完成某个控制动作,到软件给出预期的响应之间的这段时间。 重要属性:长度和易变性。易变性指系统响应地间相对于平均响应时间的偏差,2)用户帮助设施:用户帮助设施可使用户无须离开用户界面就能解决自己的问题。 可分为集成和附加两类。集成的帮助设施从一开始就设计在软件里面,用户可从与刚刚完成的操作有关的主题里面选择一个请求帮助。可缩短用户获得帮助的时间,增加界面友好性。附加的帮助设施
56、是在系统建成后再添加到软件中,是一种查询能力有限的联机用户有册。 (3)出错信息处理:出错信息和警告信息,是当出现问题时交互系统给用户的告知信息。 应具有属性: 信息应该用用户可以理解的术语描述问题。 信息应该提供有助于从错误中恢复的建设性意见。 信息应该指出错误可能导致的后果,以便用户检查是否出现了这些问题,并在确实出现问题时及时解决。 信息应该伴随听觉或视觉上的提示。 信息不能带有指责色彩。 (4)命令交互:用户可从菜单中选择软件功能,也可通过键盘命令序列调用软件功能。 另外软件还可提供“命令宏机制”。 理想情况下,所有应用软件都有一致的命令使用方法,2.设计过程:用户界面设计是一个迭代的
57、过程,通常先创建设计模型,再用原型实现这个设计模型,并由用户进行试用和评估,然后根据用户意见进行修改。 6.3 过程设计的工具 描述程序处理过程的工具称为过程设计的工具。它们可以分为图形描述方法、语言描述方法和表格描述方法。其中 图形工具:程序流程图、盒图(N-S图)、PAD图。 表格工具:判定表、判定树。 语言工具:过程设计语言PDL语言。 1.程序流程图,开始或停止,选择,多分支选择,注释,预先定义的处理,子程序,循环下界,循环上界,处理,控制流,输入输出,程序流程图的五种基本控制结构。 (1)顺序型:几个连续的加工步骤依次排列构成。 (2)选择型:由某个逻辑判断式的取值决定选择两个加工中
58、的一个。 (3)先判定(while)型循环:在循环条件成立时,重复执行特定的加工。 (4)后判定(until)型循环:重复执行某些特定的加工,直至控制条件成立。 (5)多情况(case)型选择:列举多种加工情况,根据控制变量的取值,选择执行其一,P,2,P,1,P,n,A1,A2,An,T,T,T,F,F,F,CASE,型,P,S,F,T,While,型,程序流程图的优点是:独立于任何一种程序设计语言,比较直观、清晰,易于掌握。因此,至今仍是软件开发者最普遍采用的一种工具。 程序流程图也存在一些严重的缺点: 由于不受约束的控制流线,使用不当会造成非结构化的程序设计。 程序流程图不易表示层次结构
59、。 程序流程图不易表示数据结构和模块间的调用关系。 程序流程图本质上不支持逐步求精,它诱使程序设计人员过早地考虑程序的整体结构。 2.盒图(N-S图): Nassi和Shneiderman按照结构化程序设计的要求,提出了盒图,也叫N-S图,以替代传统程序流程图,N-S图有以下特点: (1)功能域明确。 (2)很容易确定局部和全程数据的作用域。 (3)不可能任意转移控制。 (4)很容易表示嵌套关系和调用关系,层次结构清晰。 3.问题分析图PAD: 是日本日立公司提出来的,用结构化程序设计思想表现程序逻辑结构的图形工具,P1,P2,P1,P2,条件C,Pn,P2,P1,WHILE C,P,UNTIL C,P,顺序,选择,Case 型多分支选择,当型循环,直到型循环,PAD图有以下特点: 它的特点: 使用结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。 PAD描绘的程序结构十分清晰。 用PAD图表现的程序逻辑,易懂、易读。 容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。 即可用于表示程序逻辑,也可用于描绘数据结构。 图的符号支持自顶向下、逐步求精方法的使用,def,k=j,While,i,n-1,While,j,n,i=1,aj,ak,k=i,j=i+1,j=j+1,ai,ak,互换,i=i+1,选择排序的,PAD,图描述,4.判定表:判定表可以清晰的表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 投资管理责任保障承诺函(6篇)
- 2026幼儿园传统美食认知课件
- 《植物细胞的结构与功能》生物教学课件
- 公务员文化试题及答案
- 许昌市事业单位2026招聘公共基础知识高频考点题库含易错解析
- 城市绿化养护管理标准作业流程手册
- 屋面工程(泡沫混凝土)施工方案
- 2025 高中说明文阅读理解之科技发明影响课件
- 多媒体教学设计中职专业课-网页设计与制作-计算机类-电子与信息大类
- 节约在校园(教学设计)2025-2026学年初三下学期教育主题班会
- 茶馆与棋牌室消防安全审核与应急预案
- 前列腺癌治疗现状
- 24年10月自考13003数据结构与算法试题及答案
- 班组长晋升述职报告
- 3.1细胞膜的结构和功能+课件高一上学期生物人教版必修1
- 《人工智能技术基础》课件 第5章 注意力机制
- 保安公司组织架构岗位制度及保安管理制度
- YDT 5206-2023宽带光纤接入工程技术规范
- 家庭教育微课主题(3篇模板)
- 展示车协议合同
- 2024年四川省成都市高新区中考数学二诊试卷
评论
0/150
提交评论