《软件工程第五讲--总体设计课件》由会员分享,可在线阅读,更多相关《软件工程第五讲--总体设计课件(94页珍藏版)》请在金锄头文库上搜索。
1、第5章 总体设计,5.1 设计过程 5.2 设计原理 5.3 软件体系结构 5.4 启发规则 5.5 描绘软件结构的图形工具 5.6 面向数据流的设计,目标,掌握设计原理 利用结构化设计原理设计系统结构,任务,总体设计的基本目的就是回答“概括地说,系统应该如何实现?” 总体设计又称为概要设计或初步设计。划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等 每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。,5.1 设计过程(I),5.1 设计过程(II),典型的总体设计过程包括下述9个步骤: 1. 设想供选择的方案 2. 选取合理的方案 3. 推荐最佳方案 4.
2、功能分解 5. 设计软件结构 6. 设计数据库 7. 制定测试计划 8. 书写文档 9. 审查和复审,5.2 设计原理,1、模块化 2、抽象 3、逐步求精 4、信息隐蔽和局部化 5、模块独立,软件结构,软件的各个组成部分之间的关系,同一个问题P的三种不同的软件结构,良软件结构,具有层次性,无回路块调用的软件结构。,非良结构的调整,合并循环节点,良结构,AB,模块内部 复杂性增加了,5.2.1 模块化(modularity),模块(module):又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合。 模块化 把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成
3、起来构成一个整体,可以完成指定的功能满足用户的需求。 “模块化”有助于复杂问题的求解,模块化的依据,c(x):问题 x 的复杂程度 E(x):解决问题 x 需要的工作量(时间) 对于两个问题P1和P2 if C(P1) C(P2) then E(P1) E(P2) 根据人们求解问题的经验,有规律:C(P1+P2) C(P1)+C(P2) 则有 E(P1+P2) E(P1)+E(P2) 即“分而治之”有助于复杂问题的求解。,如果把软件无限细分, 会出现什么样的情况?,块的划分与总工作量之间的关系,模块划分的合理性。模块两个定性的标准:内聚和耦合。,模块的重要特征,抽象(abstraction)
4、我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。 在对软件系统进行模块设计时,可以有不同的抽象层次。 忽略细节,分层理解问题,自顶向下层层细化 信息隐藏(information hiding) 细节隐藏 可理解性 修改副作用小 错误副作用小,5.2.2 抽象(I),例:开发一个CAD软件,实现一个二维绘图系统的全部功能,供低级计算机辅助设计使用。,抽象层次I 用问题环境的术语来描述这个软件 该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、
5、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现,5.2.2 抽象(II),抽象层次II 任务需求的描述,列出“What”而不是“How” CAD SOFTWARE TASKS: user interaction task; 2-D drawing creation task; graphics display task; drawing file management task; END,5.2.2 抽象(III),抽象层次III 程序过程表示 (以2-D绘图生成任务为例) PROCEDURE 2-D drawing creation REPEAT UN
6、TILE (drawing creation task terminates) DO WHILE (digitizer interaction occurs) Digitizer interface task; DETERMINE drawing request CASE Line: line drawing task; Rectangle: rectangle drawing task; Circle: circle drawing task; END; DO WHILE (keyboard interaction occurs) keyboard interaction task; PRO
7、CESS analysis/computation CASE View: auxiliary view task; Section: cross sectioning task; END; END REPETITION; END PROCEDURE.,5.2.3 逐步求精,可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。” Miller法则:一个人在任何时候都只能把注意力集中在(72)个知识块上。 求精是细化过程。,5.2.4 信息隐藏和局部化,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。 局部化是
8、指把一些关系密切的软件元素物理地放得彼此靠近。 这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。,5.2.5 模块独立(Module independence),好设计的关键: 每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单。 独立性的度量(Yourdon Begin read(a,b,c); P; write(x1,x2) End. Procedure P; begin end;,全局变量,紧耦合!,可读性差!,局部变量,可读性好!,5.4 启发规则(VI),6、单出单入,避免内容耦合 7、模块功能可预测 相同输入必产生相同输出 模块中使用全局变量可能导致不可
9、预测,5.4 启发规则(VII),有重要的参考价值 不是设计的目标 不是设计时应该普遍遵循的原理,5.5 层次图和HIPO图(I),层次图用来描绘软件的层次结构。 层次图中的一个矩形框代表一个模块, 方框间的连线表示调用关系而不像层次方框图那样表示组成关系。,1. 层次图和HIPO图,层次图(Hierarchy Diagram),层次图,描述软件结构,而非数据结构 矩形框:模块 连线:调用关系,而非组成关系 编号,HIPO图,H图 + IPO图(Input-process-output Diagram) 对每个模块附一张IPO图 每个IPO图中应明确标出对应模块的编号,IPO图,主文件更新的I
10、PO图,改进的IPO图(IPO表),2. 结构图(Structured Diagram),循环,B,A,M,M1,M2,M3,C,D,【例】结构图,利用层次图和IPO图或DD中的信息可以得到模块调用时传递的信息,即结构图,仅用于检查设计的正确性和模块独立性。 结构图一般不入文档。,软件系统设计技术,面向数据流的设计方法 结构化设计 面向数据结构的设计方法 面向对象的设计方法,结构化设计(Structured Design, SD),基于模块化、自顶向下求精、结构化程序设计技术基础上发展起来 是一种面向数据流的设计方法 软件结构设计的过程: 数据流图映射到软件结构 用启发式规则对结构进行细化,5
11、.6 面向数据流的设计方法,映射/变换,(1)DF的类型,信息流的类型决定了映射的方法 变换流 事务流 混合型,变换流(Transform Flow),所有信息流都可归结为变换流,变换型的软件结构图,事务流(Transaction Flow),当信息流具有明显的“事务中心”时,可归结为事务流,事务型的软件结构图,混合型,两种DFD的混合体,(2)面向数据流方法的设计过程,“变换”,“事务”,精化数据流图,区分事务中心和数据接收通路,区分输入和 输出分支,映射成事务结构,映射成变换结构,用启发式设计规则精化软件结构,导出接口描述和 全程数据结构,详细设计,“Get it to work, the
12、n make it fast.”,例:订货系统,DFD System Hierarchy,(3)从DFD导出软件结构图,变换设计 事务设计 综合设计法,变换设计,第一步:确定输入流和输出流的边界,第二步:进行一级分解,Output,输入流,输出流,变换流,第三步:进行二级分解 方法一: 输入模块要向调用它的上级模块提供数据,因而它必须有两个下属模块: 一个是接收数据; 另一个是把这些数据变换成它的上级模块所需的数据。 输出模块是从调用它的上级模块接收数据,用以输出,因而也应当有两个下属模块: 一个是将上级模块提供的数据变换成输出的形式; 另一个是将它们输出。 变换中心模块的下层模块没有通用的设
13、计方法,一般应参照数据流图的中心变换部分和功能分解、模块独立性的原则来考虑如何对中心变换模块进行分解。,方法二: 从变换中心的边界开始沿输入通路向外推移,把输入通路中的每个处理映射为受输入模块控制的一个下层模块;然后沿输出通路向外推移,把输出通路中的每个处理映射为直接或间接接受输出模块控制的一个下层模块。最后把变换中心内的每个处理映射成变换模块控制的一个模块。,【例】 汽车数字仪表板的设计,功能: 通过模 - 数转换实现传感器和微处理机接口; 在发光二极管面板上显示数据; 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等; (箭头)指示加速或减速; 如果车速超过55m
14、ph ,则发出警告铃声。,1、确定输入流和输出流的边界,2、第一级分解,3、第二级分解,系统软件结构,数字仪表板 控制,计算gph,转换成rpm,读燃料流,收集sps,读旋转信号,确定加/减速,计算mph,计算mpg,计算里程,加/减速 显示,显示mph,显示mpg,显示里程,发出铃声,发光二极管 显示,转换成rpm,求精:高内聚、低耦合!,为初步设计的结果中的模块写一份初步的简要说明, 包括:内部信息、接口、内容、约束,求精系统软件结构,事务设计,综合设计法,对于大型的软件系统,通常是变换型和事务型结构的混合结构。,分层DFD的映射,对于一个复杂问题的DFD,往往是分层的。分层的DFD映射成
15、SC图也应该是分层的,这样便于设计,也便于修改。,在确定系统的软件结构以后,还必须做好下述工作: 为每个模块开发一份功能说明; 为每个模块提供一份接口说明; 定义局部的和全程的数据结构; 给出所有的设计限制或约束; 进行总体设计评审; 如果需要和可能的话,进行设计“优化”。,SA/SD方法的特点,优点 自顶向下,逐步求精 各模块可单独设计、编码、测试、修改 缺点 纸上设计,长时间偏离软件实体 开发周期长 剥离了数据/功能的关系 顶在何方?下到何处?,练习1:,某培训中心要研制一个计算机管理系统,其业务描述如下: 将学员发来的信件收集分类后,按几种不同的情况处理。 如果是报名的,则将报名的数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文件、课程文件上登记,并开出报告单交财务部门,财务人员开出发票给学生。 如果是想注销原来已选修课程,则由注销人员在课程文件、学生文件和账目文件上做相应的修改,并给学生注销单。 如果是付款的,则由财务人员在账目文件上登记,也给学生一张收费收据。 要求:1. 对以上问题画出