new_第5章_总体设计_第1页
new_第5章_总体设计_第2页
new_第5章_总体设计_第3页
new_第5章_总体设计_第4页
new_第5章_总体设计_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 总体设计江西师范大学软件学院内容 设计过程 设计原理 启发规则 描绘软件结果的图形工具 面向数据流的设计方法软件设计的目标与任务根据用信息域表示的软件需求,以及功能和性能需求,进行 数据设计 系统结构设计 过程设计数据设计侧重于数据结构的定义。系统结构设计定义软件系统各主要成份之间的关系。过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。开发阶段的信息流正确的软件设计软件设计的任务软件设计过程软件设计过程软件设计过程软件设计过程软件设计过程软件设计过程总体设计从回答“做什么”到回答“怎样做”划分出组成系统的

2、物理元素程序、文件、数据库、过程和文档等等每个元素还是黑盒子-“全局高度,抽象层次”设计过程总体设计过程通常由两个主要阶段组成: 系统设计,确定系统的具体实现方案。 结构设计,确定软件结构。9个步骤:设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审 1 1 设想供选择的方案设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。需求分析阶段得出的数据流图是总体设计的极好的出发点。数据流图中的某些处理可以逻辑地归并在一个自动化边界内作为一组,另一些处理可以放在另一个自动化边界内作为另一组。这些自动化边界通常意

3、味着某种实现策略。 设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法(例如,组内不同处理的执行时间不相容),余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。在总体设计的该步骤中分析员仅仅一个边界一个边界地设想并且列出供选择的方案,并不评价这些方案。2 2 选取若干个合理的方案选取若干个合理的方案至少选取低成本、中等成本和高成本三种方案。每种方案准备四份资料: 系统流程图; 组成系统的物理元素清单; 成本/效益分析; 实现这个系统的进度计划。3 3 推荐最佳方案推荐最佳方案分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详

4、细的实现计划。在使用部门的负责人接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。4 4 功能分解功能分解程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成: 结构设计:结构设计是总体设计阶段的任务。 过程设计:过程设计是详细设计阶段的任务。过程设计确定每个模块的处理过程。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法 5 5 设计软件结构设计软件结构通常程序中的一个模块完成一个适当的子

5、功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。6 6 数据库设计数据库设计如需使用数据库,分析员应该在需求分析阶段对系统数据要求所做的分析的基础上进一步设计数据库。包括下述四个步骤: 模式设计: 模式设计的目的是确定物理数据库结构。 子模式设计:子模式是用户使用的数据视图。 完整性和安全性设计。 优化:主要目的是改进模式和子模式以优化数据的存取。数据库设计理解客户需求需要什么样的数据打算如何处理这些数据数据之

6、间如何相互关联学习如何使用查询数据库规范化将唯一信息存储在一个地方记录是免费的,而新字段非常昂贵随时需要复制数据主键字段使用引用完整性理解客户需求理解客户需求看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考虑) 。不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是“只有我看见了我才知道我想要的是什么”,必然会导致大量的返工,因为数据库没有达到客户从来没有写下来的需求标准。而更糟的是你对他们需求的解释只属于你自己,而且可能是完全错误的。需要什么样的数据需要什么

7、样的数据您您设计应用程序时,关键要了解设计的最终结果,以便确保您准备好所有必需的数据并知道其来源。例如,报表的外观、每个数据的来源以及所需的所有数据是否都存在。对项目损失最大的莫过于在项目后期发现重要报表缺少数据。知道需要什么样的数据后,就必须确定数据的来源。数据是否从其他数据源中导入? 数据是否需要清理或验证? 用户是否需要输入数据?明确所需数据的类型和来源是数据库设计的第一步。打算如何处理这些数据打算如何处理这些数据用户是否需要编辑这些数据? 如果需要,应如何显示数据以便于用户理解和编辑? 有没有验证规则和相关的查找表? 要求对编辑和删除保留备份的数据输入有没有相关联的审核问题? 需要为用

8、户显示哪些摘要信息? 是否需要生成导出文件? 了解这些信息后,就可以想象字段之间是如何相互关联的了。数据之间如何相互关联数据之间如何相互关联将数据分组放入相关字段(例如与客户相关的信息、与发票相关的信息等) ,每个字段组都代表要建立的表。然后考虑如何将这些表相互关联。例如,哪些表具有一对多关系? (例如,一个客户可能持有多张发票)哪些表具有一对一关系? (这种情况下,通常会考虑将其组合到一个表中)学习如何使用查询学习如何使用查询了解如何分析和管理数据同样很重要。您应该深刻理解查询的工作原理,理解如何使用查询在多个表之间链接数据,如何使用查询对数据进行分组和汇总,以及如何在不需要以规范化格式显示

9、数据时使用交叉表查询。好的数据设计的最终目标就是要平衡两个需要,既要随着时间的推移有效地存储数据,又要轻松地检索和分析数据。理解查询的功能对正确设计表很有帮助。数据库规范化数据库规范化这部分介绍数据库规范化所涉及的基本概念,而不是对数据库规范化进行理论性的探讨。如何在您的实际情况中应用这些概念可能会随着应用程序需要的不同而有所变化。这部分的目的是理解这些基本概念,根据实际需要应用它们,并理解偏离这些概念将会出现哪些问题。将唯一信息存储在一个地方将唯一信息存储在一个地方u 大部分数据库开发人员都理解数据库规范化的基本概念。理想情况下,您希望将相同的数据存储在同一个地方,并在需要引用时使用ID来进

10、行引用。因此,如果某些信息发生了变化,则可以在一个地方进行更改,而整个程序中的相应信息也会随之更改。例如,客户表会存储每个客户的记录,包括姓名、地址、电话号码、电子邮件地址以及其他特征信息。客户表中可能包含唯一的CustomerID 字段(通常是Autonumber字段) ,这个字段即该表的主键字段,其他表使用它来引用该客户。因此,发票表可以只引用客户的ID值,而不是在每张发票中存储客户的所有信息(因为同一个客户可能会持有多张发票) ,这样利用客户的ID值即可从客户表中查找客户的详细信息。如果需要修改客户信息(例如新增电话号码) ,只需在客户表中修改,应用程序中引用该信息的任何其他部分都会随之

11、自动更新。u 使用正确规范化的数据库,通过简单的编辑即可轻松处理数据随时间推移而发生的更改。使用未正确规范化的数据库,通常需要利用编程或查询来更改多条记录或多个表。这不仅会增加工作量,还会增加由于未正确执行代码或查询而导致数据不一致的可能性。记录是免费的记录是免费的,而新字段非常昂贵而新字段非常昂贵理想的数据库应该只需要随着时间的推移添加新的记录,数据库表应该能够保存大量记录。但是,如果您发现需要增加更多字段,则可能会碰到设计问题。电子表格专家经常会遇到上述问题,因为他们习惯按照设计电子表格的方式设计数据库。设计经常随时间变化的字段(例如,年、季度、产品和销售人员)需要在将来添加新字段。而正确

12、的设计应该是转换信息并将随时间变化的数据放在一个字段内,这样就可以添加更多记录。例如,只需创建“年”字段,然后在该字段中输入各记录相应的年份值即可,无须为每年创建一个单独的字段。增加额外的字段可能会产生问题,因为表结构的变化会对应用程序的其他部分产生影响。在表中添加更多字段时,依赖该表的对象和代码也需要更新。例如,查询需要获取额外的字段,窗体需要显示这些字段,而报表则需要包含这些字段,等等。但是,如果数据已经规范化,则现有对象会自动检索新数据,并正确计算或显示这些数据。查询功能尤其强大,因为它允许您按“年”字段进行分组,以逐年显示摘要。但是,数据规范化并不意味着不能显示或使用随时间而变化或依赖

13、时间的字段。需要浏览或显示这类信息的开发人员通常可以使用交叉表查询来达到这一目的。随时需要复制数据随时需要复制数据需要反规范化,以便保存可能会随时间变化的信息。在通过客户ID 号将发票链接到客户表的简单示例中,我们可能需要保留开出发票时的客户地址(而不是制作发票时的地址,因为客户信息在这两个事件之间可能会有所变化) 。如果开出发票时未保留客户地址,而将来又必须更新客户信息,则可能无法确定发送某些发票的确切地址。这可能会导致非常严重的商业问题。当然,有些信息(如客户的电话号码)可以不保存。因此,应该有选择地决定需要复制哪些数据。需要复制数据的另一个例子是填写发票的明细项。报价单通常用于挑选客户订

14、购的商品。我们可以只存储报价单ID,而ID 指向包含产品说明、价格和其他详细信息的报价单。但是,产品说明和价格会随着时间而改变。如果不将数据从报价单复制到明细表中,将来则无法准确地重新打印原始发票。如果您尚未收到付款,问题将非常严重。主键字段主键字段效率,每个表都应该有一个主键字段。主键字段定义了在表中的唯一性,并由索引在其他字段中使用,以提高搜索性能。例如,客户表可以包含为每个客户定义唯一编号的CustomerID字段。一般来说,主键字段应具有如下特征:应该只包含一个字段: 可以将多个字段定义为表的主键字段,但最好是使用一个字段。首先,如果需要使用多个字段来定义唯一性,则需要占用更多的空间来

15、存储主键。其次,表中的其他索引还必须使用主键字段的组合,这样所占用的空间比使用一个字段所占用的空间要多。最后,在表中标识记录需要获取字段组合。使用一个CustomerID 字段定义客户比使用其他字段组合要好得多应该为数字类型:应该为数字类型: Access提供的AutoNumber字段类型是一个Long Integer(长整数) ,非常适用于主键字段。这些值可以自动保证每个记录的唯一性,同时也支持多用户数据输入。不会随时间而改变:不会随时间而改变: 主键字段不应该随时间而改变。一旦标识了主键字段,就应该永远不变(像社会保障号一样) 。更改过的主键字段将很难再使用历史数据,因为其中的链接被破坏了

16、。应该没有确切含义:应该没有确切含义: 要确保主键字段不会随时间而更改,它应该没有确切含义。没有确切含义的主键值在其他数据不完整时也非常有用。例如,您可以指定一个客户编号,而无须该客户的完整地址。应用程序的其余部分可以很好地工作,您也可以在检索记录时添加信息。主键字段主键字段使用引用完整性使用引用完整性对表进行定义并理解各表是如何关联的之后,请确保添加引用完整性来巩固各表之间的关系。这样可以避免错误地修改链接字段而留下孤立的记录。Microsoft Jet数据库引擎支持复杂的引用完整性,允许用户进行级联更新和删除。一般情况下,不应修改ID字段。因此,级联更新用得较少,但级联删除却非常有用。例如

17、,如果发票表与订单表相关联,其中的一张发票可能有无限多个订单(明细项) ,并且每个订单记录包含它所链接的发票编号,则可以使用级联删除操作来删除发票记录,并自动删除所有相应的订单记录。这样可以避免出现没有相应发票记录的订单记录。逻辑结构设计中逻辑结构设计中ER转换原则转换原则 一个实体型转换为一个关系模式。关系的属性:实体型的属性关系的码:实体型的码 例 学生实体可以转换为如下关系模式:学生(学号,姓名,出生日期,所在系,年级,平均成绩)宿舍、班级、档案材料、教师、课程、教室、教科书都分别转换为一个关系模式。逻辑结构设计中逻辑结构设计中ER转换原则转换原则 一个m:n联系转换为一个关系模式。关系

18、的属性:与该联系相连的各实体的码以及联系本身的属性关系的码:各实体码的组合 例 “选修”联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合码:选修(学号,课程号,成绩)逻辑结构设计中逻辑结构设计中ER转换原则转换原则 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。1) 转换为一个独立的关系模式关系的属性:与该联系相连的各实体的码以及联系本身的属性关系的码:n端实体的码 2) 与n端对应的关系模式合并合并后关系的属性:在n端关系中加入1端关系的码和联系本身的属性合并后关系的码:不变。可以减少系统中的关系个数,一般情况下更倾向于采用这种方法

19、。例 :学生和班级的联系为“组成”。 “组成”联系为1:n联系。将其转换为关系模式的两种方法:1)使其成为一个独立的关系模式:组成(学号,班级号) 2)将其学生关系模式合并:学生(学号,姓名,出生日期,所在系,年级,班级号,平均成绩)逻辑结构设计中逻辑结构设计中ER转换原则转换原则 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。1) 转换为一个独立的关系模式关系的属性:与该联系相连的各实体的码以及联系本身的属性关系的候选码:每个实体的码均是该关系的候选码 2) 与某一端对应的关系模式合并合并后关系的属性:加入对应关系的码和联系本身的属性合并后关系的码:不变 例

20、:班主任与班级之间的“管理”联系。 “管理”联系为1:1联系,可以有三种转换方法:(1)转换为一个独立的关系模式:管理(职工号,班级号)或 管理(职工号,班级号)(2)“管理”联系与班级关系模式合并,则只需在班级关系中加入教师关系的码,即职工号:班级:(班级号,学生人数,职工号)(3)“管理”联系与教师关系模式合并,则只需在教师关系中加入班级关系的码,即班级号:教师:(职工号,姓名,性别,职称,班级号,是否为优秀班主任)逻辑结构设计中逻辑结构设计中ER转换原则转换原则 三个或三个以上实体间的一个多元联系转换为一个关系模式。关系的属性:与该多元联系相连的各实体的码以及联系本身的属性关系的码:各实

21、体码的组合例:教师、课本与课程之间的联系实“讲授”。“讲授”联系是一个三元联系,可以将它转换为如下关系模式,其中课程号、职工号和书号为关系的组合码:讲授(课程号,职工号,书号) 同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。 例:如果教师实体集内部存在领导与被领导的1:n自联系,我们可以将该联系与教师实体合并,这时主码职工号将多次出现,但作用不同,可用不同的属性名加以区分:教师:职工号,姓名,性别,职称,系主任逻辑结构设计中逻辑结构设计中ER转换原则转换原则 具有相同码的关系模式可合并。 目的:减少系统中的关系个数。合并方法:将其中一个关系模式的全部属性

22、加入到另一个关系模式中,然后去掉其中的同义属性(可能同名也可能不同名),并适当调整属性的次序。例:学生与性别之间的关系是“拥有”,那么“拥有”的关系模式:拥有(学号,性别)与学生关系模式:学生(学号,姓名,出生日,所在系,年级,班级号,平均成绩)都以学号为码,可以将它们合并为一个关系模式:学生(学号,姓名,性别,出生日期,所在系,年级,班级号,平均成绩)7 7 制定测试计划制定测试计划在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。8 8 书写文档书写文档系统说明 用系统流程图描绘的系统构成方案;组成系统的物理元素清单;成本效益分析;对最佳方案的概括描述;精

23、化的数据流图;用层次图或结构图描绘的软件结构;用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法;模块间的接口关系;需求、功能和模块三者之间的交叉参照关系等等。用户手册 修改更正在需求分析阶段产生的初步的用户手册。测试计划 包括测试策略,测试方案,预期的测试结果,测试进度计划等等。详细的实现计划数据库设计结果9 9 审查和复审审查和复审最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。模块化模块化模块是数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问,例如,过程、函数、子程序、宏等等都可作为模块。模块化就

24、是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,可以完成指定的功能,满足问题的要求。 模块化的根据不等式 C(P1P2) C(P1) C(P2) E(P1P2) E(P1) E(P2)“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了 模块化原理1、原理:经验1:工作量E(P1+P2)E(P1)+E(P2)经验2:成本成本成本成本 / / 模块模块最小成本区最小成本区接口成本接口成本软件总成本软件总成本模块数目模块数目模块化的优点可以使软件结构清晰,不仅容易设计也容易阅读和理解;可以使软件容易测试和调试,因而有助于提高软件的可靠

25、性;能够提高软件的可修改性;有助于软件开发工程的组织管理。2、抽象(Abstraction): 忽略细节,分层理解问题,自顶向下层层加细。例:开发一个CAD软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计使用。抽象层次I:用问题所处环境的术语来描述这个软件。 该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。模块化原理 抽象层次II:任务需求的描述。列出“What”而不是“How”。 CAD SOFTWARE TASKS: user in

26、teraction task; 2-D drawing creation task; graphics display task; drawing file management task; END模块化原理 抽象层次III:程序过程表示。以2-D绘图生成任务为例:PROCEDURE 2-D drawing creation REPEAT UNTILE (drawing creation task terminates) DO WHILE (digitizer interaction occurs) Digitizer interface task; DETERMINE drawing req

27、uest CASE Line: line drawing task; Rectangle: rectangle drawing task; Circle: circle drawing task; END; DO WHILE (keyboard interaction occurs) keyboard interaction task; PROCESS analysis/computation CASE View: auxiliary view task; Section: cross sectioning task; END; END REPETITION;END PROCEDURE. .

28、模块化原理给出了初步的过程表示所用的术语都已面向软件模块化工作已经开始显露3、信息隐蔽(Information hiding) The The clientsclients of a module know about its services only of a module know about its services only through its through its interfaceinterface; the ; the implementation is hiddenimplementation is hidden from them from them (hence m

29、ay change without affecting the clients). (hence may change without affecting the clients). 4 4、模块独立性(Module independence) 好设计的关键:每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单。模块化原理模块化原理独立性的度量:耦合(Coupling)&内聚(Cohesion) (Yourdon & Constantine,1978) 耦合(Coupling)模块化原理模块化原理u 非直接耦合如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块

30、的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。u 数据耦合(Data coupling): Only data are passed. It is (Data coupling): Only data are passed. It is easy to trace data and make changes.easy to trace data and make changes. The most desirable. The most desirable.模块化原理u 控制耦合(Control coupling):One module passes parameters

31、to control the activity of another module.ABFlagF2F1FnFlag接口单一,但仍然影响被控模块的内部逻辑。模块化原理模块化原理u 标记耦合(特征耦合)标记耦合(特征耦合)如果一组模块通过参数表传递记录信息,就是事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中在一个模块中,就可以消除这种耦合。模块化原理例如:“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由

32、于引用了此数据机构产生依赖关系,它们之间也是标记耦合。模块化原理转换成数据耦合 公共耦合 (Common coupling):Data are accessible from a common data store.(当多个模块应用同一个全局数据区时)问题: 公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。模块化原理u内容耦合内容耦合(Content Coupling): One module modifies another.(Content Coupling): One module modifies another. The le

33、ast desirable The least desirable模块化原理一个模块有多个入口(功能)A访问C的内部数据或不通过正常入口而转入C的内部。模块化原理原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。 低内聚低内聚u 巧合内聚巧合内聚(Coincidental cohesionCoincidental cohesion):):Unrelated functions, Unrelated functions, processes, or data are found in the same module (for processes, or data are

34、 found in the same module (for convenience).convenience). 内聚内聚 (Cohesion): (Cohesion): The elements of a module are directed The elements of a module are directed to perform the same task.to perform the same task.Goal:Goal: as cohesive as possible. as cohesive as possible.模块化原理例如:例如:Read disk filesR

35、ead disk files;Calculate current valuesCalculate current values;Produce user outputProduce user output;模块中的三个语句没有任何联系模块中的三个语句没有任何联系缺点:缺点:可理解性差可理解性差, 可修改性差可修改性差A:Read inputsfrom diskfrom tapefrom u逻辑内聚逻辑内聚(Logical cohesionLogical cohesion):):Logically related Logically related functions or data are p

36、laced in the same module.functions or data are placed in the same module.例如:输入、输出、编辑、计算或出错等类型的模块。例如:输入、输出、编辑、计算或出错等类型的模块。模块化原理Input all Input all 模块:模块:读一张控制卡片;读一张控制卡片;读一张异常处理卡片;读一张异常处理卡片;从磁带上读一个正常交易记录;从磁带上读一个正常交易记录;从磁盘上读一个主文件记录;从磁盘上读一个主文件记录;逻辑内聚模块例模块化原理u时间内聚(Temporal cohesion):The functions are rel

37、ated only by the timing involved.(一个模块内各个处理元素必须在一个有限的时间间隔内执行完成)例如:系统的初始化Initialization模块:读控制卡片;重绕各个磁带;打开磁盘文件;置计数器为零;置累加器为零;系统结束模块、紧急故障处理模块等均是时间性内聚模块问题:不同功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。模块化原理中内聚中内聚u过程内聚过程内聚(Procedural cohesionProcedural cohesion):):Functions are grouped Functions are grouped together

38、 in a module to ensure a certain order of performance.together in a module to ensure a certain order of performance.(模块内的各个处理模块之间存在一定的关系,并且必须按照某一特定(模块内的各个处理模块之间存在一定的关系,并且必须按照某一特定的次序执行)的次序执行)例如:例如:enter datacheck datamanipulate data模块化原理模块化原理 例如:u通信内聚通信内聚(Communicational cohesionCommunicational cohes

39、ion):):All the functions in All the functions in a module operate on or produce the same data set.a module operate on or produce the same data set.(模块内(模块内所有处理元素都引用同一个数据,对同一输入数据进行操作或产生所有处理元素都引用同一个数据,对同一输入数据进行操作或产生同一个输出数据。)同一个输出数据。)模块化原理模块化原理 例如:高内聚:高内聚:u顺序内聚顺序内聚(Sequential cohesionSequential cohesio

40、n):):The output from one part of a The output from one part of a module is the input to the next part.module is the input to the next part. (在这种模块内,一个处理元(在这种模块内,一个处理元素的输出就是另一个处理元素的输入)素的输出就是另一个处理元素的输入)u功能内聚功能内聚(Functional cohesionFunctional cohesion):):Every processing element is Every processing ele

41、ment is essential to the performance of essential to the performance of a single functiona single function. .(模块内的所有(模块内的所有元素只执行一个单一的功能)。元素只执行一个单一的功能)。如:如:计算实发工资,打印发票等。计算实发工资,打印发票等。模块化原理1. 争取低耦合、高内聚(增加内聚 减少耦合)2. 模块规模适中:过大不易理解;太小则接口开销过大。注意分解后不应降低模块的独立性。3. 适当控制 深度 = 分层的层数。过大表示分工过细。 宽度 = 同一层上模块数的最大值。过大

42、表示系统复杂度大。启发性规则启发性规则 系统结构 扇出 = 一个模块直接调用控制的模块数。 3 fan-out 9AA的扇出的扇出AA的扇入的扇入 扇入扇入 = = 直接调用该模块的模块数直接调用该模块的模块数在不破坏独立性的前提下,在不破坏独立性的前提下,fan-in fan-in 大大的比较好。的比较好。启发性规则启发性规则。如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块4、作用域在控制域内 控制域 作用域:M中的一个判定所影响的模块。例如:例中A的作用超出了控制域。改进方法之一,可以把A中的 if 移到M中;方法之二,可以把

43、C移到A下面。启发性规则5、降低接口的复杂程度:接口复杂可能表明模块的独立性差。6、单出单入,避免内容耦合。7、模块功能可预测 相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能导致不可预测。启发性规则1、Hierarchy和HIPO注意: 这里的hierarchy表现软件的结构,而非数据结构; 每个矩形框代表一个模块,连线表示“调用”而非“组成”; 所谓HIPO,即对每个模块附一张IPO图。每个IPO图中应明确标出对应模块的编号。图形工具1、Hierarchy和HIPO例:图形工具图形工具图形工具 例如:图形工具2、结构图(Structured Diagram)符号:数据传递

44、;数据传递;控制信息;控制信息;或;或;循环循环. .图形工具例:例:注:此图一般不入文档,仅用于检查设计的正确性和模块独立性。须检查; 每个传递的数据是否必须? 完成模块功能所必须的数据是否都传递了? 传输的数据是否只与单一的功能有关?是否目的明确?图形工具图形工具图形工具层次图和结构图并不严格表示模块的调用次序。此外,层次图和结构图并不指明什么时候调用下层模块。事实上,层次图和结构图只表明一个模块调用那些模块,至于模块内还有没有其它成分则完全没有表示。一些附加的符号,可以表示模块的选择调用或循环调用。 面向数据流的设计方法面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的

45、方法。信息流有下述两种类型: 变换流 事务流基本思想: DFD System Hierarchy1、Data Flow 的分类 变换流(Transform Flow):信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理后再沿输出通路变换成外部形式离开软件系统。事实上所有信息流都可归结为变换流面向数据流的设计方法面向数据流的设计方法 例如: 事务流(Transaction Flow)T = T = Call one of the Call one of the several subroutines several subroutines dependi

46、ng on the type depending on the type o f t h e i n c o m i n g o f t h e i n c o m i n g transaction request.transaction request.当信息流具有明显的当信息流具有明显的“发发射中心射中心”时,可归结为事时,可归结为事务流。务流。面向数据流的设计方法面向数据流的设计方法大型系统DFD中,变换型和事务型结构往往共存:SDSD的总体过程:的总体过程:优化的前题是:优化的前题是:“Get it Get it to work, then make it to work, then

47、 make it fast.”fast.”面向数据流的设计方法2、分析设计 变换分析是一系列设计步骤的总称,经过这些步骤把具有特点的数据流图按预先确定的模式映射成软件结构面向数据流的设计方法步骤:1 找出主加工、逻辑输入和逻辑输出2 设计模块结构的顶层和第一层3 设计中、下层模块例:汽车数字仪表板的设计功能: 通过模 - 数转换实现传感器和微处理机接口; 在发光二极管面板上显示数据; 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等; 指示加速或减速; 如果车速超过55mph ,则发出警告铃声。面向数据流的设计方法设计步骤1.复查基本系统模型。确保系统的输入数据和输出

48、数据符合实际。2.复查并精化数据流图。确保数据流图给出了目标系统正确的逻辑模型,而且应该使数据流图中每个处理都代表一个规模适中相对独立的子功能。3.确定数据流图具有变换特性还是事务特性。从图中可以看出,数据沿两条输入通路进入系统,然后沿五条通路离开。没有明显的事务中心,可以认为这个信息流具有变换流的特征。4.确定输入流和输出流边界,从而孤立出变换中心。面向数据流的设计方法第一步:第一步:DFDDFD的分界,先分出的分界,先分出I I、P P、O O三块三块面向数据流的设计方法一般问题的一级分解方法:面向数据流的设计方法I:I:由边界向回溯,将每个遇到由边界向回溯,将每个遇到的处理器映成相应的层

49、模的处理器映成相应的层模块。块。P:P:每个处理直接对应一个下层每个处理直接对应一个下层模块。模块。O O:由边界向外推,方法与:由边界向外推,方法与 类似类似ADCBMICBDA面向数据流的设计方法例:例: 面向数据流的设计方法例:精化后的数字仪表板系统的软件结构。注:每个模块应附一简要说明描述 进出该模块的信息(接口描述); 模块内部的信息; 过程陈述,包括主要判定点及任务等; 对约束和特殊特点的简短讨论。面向数据流的设计方法使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。输入结构中的模块“转换成rpm”和“收集sps”可以合并;模块“确定加速减速”可以放在模块“计算mph”

50、下面,以减少耦合;模块“加速减速显示”可以相应地放在模块“显示mph”的下面。面向数据流的设计方法面向数据流的设计方法经过上述修改后的软件结构 事务分析面向数据流的设计方法面向数据流的设计方法例 “教材购销系统” 数据流图二层DFD销售子系统面向数据流的设计方法2.初始结构图顶层和一层1.简化数据流图面向数据流的设计方法销售子系统销售子系统获得获得补售书单补售书单开购书发票开购书发票和和暂缺书单暂缺书单输出输出暂缺书单暂缺书单输出输出购书发票购书发票获得有效获得有效购书单购书单审查审查有效性有效性读入读入购书单购书单退回无退回无效书单效书单输出输出领书单领书单开领开领书单书单售书售书登记登记读

51、进书读进书通知单通知单开补售开补售书单书单2,52,53 31 11 12 22,32,35 54 44 45 56,76,77 76 66 68 88 88 81 1 购书单购书单5 5 补售书单补售书单2 2 有效购书单有效购书单4 4 进书通知单进书通知单6 6 购书发票购书发票7 7 暂缺暂缺书单书单8 8 领书单领书单3 3 无效购书单无效购书单生成缺书生成缺书登记记录登记记录缺书缺书登记登记9 97 79 99 9 缺书登记记录缺书登记记录3.对一层模块分解得到初始结构图 (1)(1)第二层的输出模块第二层的输出模块“缺书登记缺书登记”和和“售书登记售书登记”都属于写文件,且都属于

52、写文件,且在模块在模块“开购书发票和暂缺书单开购书发票和暂缺书单”的作用域中,把它们作为的作用域中,把它们作为 子图放子图放到该模块的控制域中,同时将该模到该模块的控制域中,同时将该模块简化为块简化为“开购书发开购书发 票票”,直接,直接调用模块调用模块“售书登记售书登记”与与“缺书登缺书登记记”。面向数据流的设计方法销售子系统销售子系统获得获得补售书单补售书单开购书发票开购书发票和和暂缺书单暂缺书单输出输出暂缺书单暂缺书单输出输出购书发票购书发票获得有效获得有效购书单购书单审查审查有效性有效性读入读入购书单购书单退回无退回无效书单效书单输出输出领书单领书单开领开领书单书单售书售书登记登记读进

53、书读进书通知单通知单开补售开补售书单书单2,52,53 31 11 12 22,32,35 54 44 45 56,76,77 76 66 68 88 88 81 1 购书单购书单5 5 补售书单补售书单2 2 有效购书单有效购书单4 4 进书通知单进书通知单6 6 购书发票购书发票7 7 暂缺暂缺书单书单8 8 领书单领书单3 3 无效购书单无效购书单生成缺书生成缺书登记记录登记记录缺书缺书登记登记9 97 79 99 9 缺书登记记录缺书登记记录3.对一层模块分解得到初始结构图(2)(2)模块模块“生成缺书登记记录生成缺书登记记录”与与“输出暂缺书单输出暂缺书单”省略。省略。例例 “ “教材销售子系统教材销售子系统” ” 软件结构图软件结构图销售子系统销售子系统获得获得补售书单补售书单开购书发票开购书发票和和暂缺书单暂缺书单输出输出暂缺书单暂缺书单输出输出购书发票购书发票获得有效获得有效购书单购书单审查审查有效性有效性读入读入购书单购书单退回无退回无效书单效书单输出输出领书单领书单开领开领书单书单售书售书登记登记读进书读进书通知单通知单开补售开补售书单书单2,52,53 31 11 12 22,32,35 54 44 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论