Download presentation
Presentation is loading. Please wait.
1
第 7 讲 软件设计方法
2
体系结构设计 软件体系结构是软件系统中最本质的东西。 良好的体系结构必须是普适、高效和稳定的。
[BAS98]:软件的体系结构是系统的一个或多个结构,包含软件构件、构件对外可见的性质以及它们之间的关系。 体系结构是一种表示。 体系结构设计关注构件结构、构件的性质和交互的关系。
3
体系结构风格 style 体系结构风格包含: 一组构件(components)(如,数据库、计算模块)完成系统所需的某种功能;
一组连接子(connectors),能使构件间通信协调和合作; 约束(constraints),定义构件如何被集成,形成系统; 语义模型(semantic model),使得设计者通过分析构件的已知性质而理解系统的整体性质。
4
体系结构风格分类 数据为中心的体系结构 目标:实现数据的可集成性 共享数据可以是数据仓库或是黑板。 客户端 共享数据
5
Business-specific Components
体系结构风格分类 调用-返回体系结构 目标:系统的可更改性和可扩展性 主程序-子程序体系结构 将一个程序分层子部分 每个子节点都只由父节点控制 如远程过程调用系统 面向对象或抽象数据类型系统 强调对数据的绑定和对数据操纵及访问方式的掌握 实现可更改性 层次式 可更改 可移植 System Software Middleware Business-specific Components Application Systems
6
Web sites of Interest CMU Composable Systems Group
CMU Architecture Based Languages and Environments Research Group The Acme ADL Worldwide Institute of Software Architects
7
Web Sites of Interest The WRIGHT Language
Meta-H For Real-Time Software Analysis dssa_tools/dssa_tools_mh.html Rapide ADL pavg.stanford.edu/rapide/ C2 Project at UC Irvine
8
面向数据流的设计 结构化开发方法(Structured Developing Method) 是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速、自然和方便。 结构化开发方法由结构化分析方法(SA法)、结构化设计方法(SD法)及结构化程序设计方法(SP法)构成的。 结构化设计方法(SD 法 Structured Design)是结构化开发方法的核心,与SA法,SD法密切联系,主要完成软件系统的总体结构设计。 面向数据流的设计方法又称结构化设计。
9
面向数据流的设计 基本思想:将系统设计成由相对独立、单一功能的模块组成的结构。 采用方法: DFD System Hierarchy
步骤: 确定数据流类型; 指明数据流的边界; 将DFD映射为程序结构; 根据元素的分解,定义控制的层次; 使用设计测量和启发信息,对结构进行细化和求精; 精化体系结构的描述。
10
结构图 (Structure chart) A A A A B B C D B C B a. 基本形式 b. 顺序 c. 选择 d. 重复
11
面向数据流的设计 1、Data Flow 的分类 ⑴ 变换流(Transform Flow): 事实上所有信息流都可归结为变换流
Internal representation Information Transform flow Outgoing flow Incoming External representation Time 事实上所有信息流都可归结为变换流
12
变换流 输入 变换 输出
13
面向数据流的设计 ⑵ 事务流(Transaction Flow) 当信息流具有明显的“发射中心”时,可归结为事务流。
T = Call one of the several subroutines depending on the type of the incoming transaction request. 当信息流具有明显的“发射中心”时,可归结为事务流。 … T Transaction request Action paths 事务中心
14
变换流设计 变换流设计是从变换流的DFD到程序结构图的转化。 设计步骤: 找出变换中心及逻辑输入/出; 设计软件结构的顶层;
变换中心-描述了系统的主要功能、特征,其特点是:输入/出数据流较多,变换中心可以不至一个。 逻辑输入/出 - 是指输入/出变换中心的数据流。 输入流 -是将物理输入转换为逻辑输入的数据流。 输出流 - 是将逻辑输出转换为物理输出的数据流。 设计软件结构的顶层; 为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为变换中心设计一个处理模块。 自顶向下,逐步细化,设计中下层模块。 即上层各个模块的从属模块,顺序一般是从设计输入模块的下层开始。
15
变换流设计 D 4 C 3 F B 2 E 5 1 G A H 输入 变换中心 输出 6 System 3 Get C 须检查;
每个传递的数据是否必须? 完成模块功能所必须的数据是否都传递了? 传输的数据是否只与单一的功能有关?是否目的明确? Make C into D and E Put E Put D E D F G C B B F G Make D into F Make B into C Make E into G Put G Put F Get B G H B H A A Make G into H Put H Make A into B Get A
16
变换流设计 2.2 Z 2.1 X 1 3 2.3 Y M B C N P D A System 2 Make B into C Get B
Put C B C N P M M N P X Y Z
17
面向数据流的设计 变换流分析 例:汽车数字仪表板的设计 功能:① 通过模 - 数转换实现传感器和微处理机接口;
② 在发光二极管面板上显示数据; ③ 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等; ④ 指示加速或减速; ⑤ 如果车速超过55mph ,则发出警告铃声。
18
面向数据流的设计 第一步:DFD的分界,先分出I、P、O三块 燃料流 传感器信号 SPS 旋转信号 读 收集和求平均 确定加/减速 转换成
转/分 计算里程 计算mph,超速值 产生 加/减速显示 计算燃料消耗 计算gph 读和校核 产生mpg显示 产生mph显示 发出铃声 产生里程显示 SPS 箭头指示 燃烧流 上箭头 水平线 下箭头 rpm gph mph mpg 超速值 英里 显示 铃声 mph显示 mpg显示 第一步:DFD的分界,先分出I、P、O三块
19
面向数据流的设计 数字仪表板 控制 数据转换 驱动仪表板 接收传感器 信号 M P I O 一般问题的一级分解方法:
20
面向数据流的设计 第二步:映射 :由边界向回溯,将每个遇到的处理器映成相应的层模块。 :每个处理直接对应一个下层模块。
M I C B D A :由边界向回溯,将每个遇到的处理器映成相应的层模块。 I A D C B :每个处理直接对应一个下层模块。 P :由边界向外推,方法与 类似 O I
21
面向数据流的设计 例: 数字仪表板 控制 数据转换 接收传感器 信号 计算gph 转换成rpm 收集sps 读旋转信号 确定加/减速
驱动仪表板 接收传感器 信号 计算gph 读燃料流 转换成rpm 收集sps 读旋转信号 确定加/减速 计算mph 计算mpg 计算里程 加/减速 显示 显示mpg 显示mph 显示里程 发出铃声 发光二极管显示
22
面向数据流的设计 第三步:修改 —— 本着高内聚、低耦合的原则。 例:精化后的数字仪表板系统的软件结构。 注:每个模块应附一简要说明描述
① 进出该模块的信息(接口描述); ② 模块内部的信息; ③ 过程陈述,包括主要判定点及任务等; ④ 对约束和特殊特点的简短讨论。
23
事务流设计 事务流设计是从事务流的DFD到程序结构的转换。 设计步骤: 确定流界: 进行一级分析,设计上层模块:
细化该事务结构和每条动作路径的结构。 对于接收分支,采用变换流设计方法设计中下层;对于发送分支,在发送模块下设计每条事务路径的结构。
24
事务流设计 I II S B A C … 事务流 M II I S A B C … 事务中心 事务处理
25
混合流设计 一般采用以变换流为主,事务流为辅的方法。 基本步骤: 利用变换设计,将DFD划分为输入、变换和输出三大部分;
设计软件结构的上层模块,即主模块,及其下层输入模块、变换模块和输出模块; 根据输入、变换和输出DFD的不同特征设计它们的下层模块。
26
混合流设计 GG H E D JJ EE C1 DD G K T1 C2 F J FF C3 T2 KK B1 B2 T3 B3 BB L
System Make D into K Get D Put K D K LL AA A M
27
… … System Make D into K Get D Put K Get C DD EE FF GG JJ KK Put L
Get B Edit BB LL Put M Get A AA T1 T2 T3 Operate 1 … Operate n Detail 1 … Detail m
28
面向数据流的设计过程 优化的前题是:“Get it to work, then make it fast.” “变换” “事物”
精化数据流图 流类型 区分事务中心和数据接收通路 区分输入和 输出分支 映射成事务结构 映射成变换结构 用启发式设计规则精化软件结构 导出接口描述和 全程数据结构 复 查 详细设计 变换分析 事务分析 优化的前题是:“Get it to work, then make it fast.”
29
精化体系结构设计 为每个模块开发处理说明; 为每个模块提供接口描述; 定义局部和全局数据结构; 给出所有的设计限制或约束; 进行设计评审;
如需要,进行结构设计优化。
30
SD方法的优点 SD方法是从以下5个方面来获得质量较好的软件结构: 根据描述用户需求的数据流图导出了实现用户需求的结构图。
为了控制大型软件系统复杂性,运用了下面两个手段: 将系统分解成许多个黑盒。 将黑盒组织成适合于用计算机实现的一个层次结构。 用内聚和耦合作为评价软件结构质量的标准。 给出一组设计技巧,如扇入和扇出、模块大小的掌握,作用范围和控制范围等。 用结构图直观地描述软件结构,因此易于理解,并直接可以用于评价、分析和复查等。
31
SD方法的缺点 SD方法的不足: 软件系统的概要设计应该包括两个方面:数据结构的设计和程序结构的设计,两者是密切相关的,但遗憾的是SD方法只考虑后者而不考虑前者,因此在使用 SD方法时,一般还需参考一些有关数据库、文件结构的设计方法。 “高内聚、低耦合”的原则虽已被广为接受,但这两个概念尚无严格的定义,更无健全的理论基础,只能用些例子来解释其含义,因而对实际系统的软件结构还难以作客观的质量评价,这是SD方法的一个缺陷。
32
面向数据结构的设计 结构化开发方法是一种面向数据流、数据封闭性的开发方法,来源于程序的模块化和功能分解。面向数据结构的设计是将问题的数据结构转换为程序结构,着重于问题的数据结构,不强调模块定义。 Jackson系统开发方法是JSP的扩展,是一种面向数据结构的设计方法,其基本思想是先建立输入输出的数据结构,再将其转换为软件结构。这种方法适用于数据处理类问题,特别是企业管理类的软件系统。
33
面向数据结构的设计 程序逻辑构造(logical construction of programs, LCP)由Warnier开发,是建立在数据结构和过程结构之间关系上的方法,将I/O数据结构映射为软件详细过程表达。 Wariner-Orr方法是LCP的扩展,除了设计能力之外,还增加了分析能力。
34
Jackson System Development (JSD)
与SD的由DFD导出结构设计不同,JSD是以数据结构(data structure)为基础设计每个模块的处理过程。 分析的重点是构造于系统相关的现实世界,并建立现实世界的信息域模型,目标是生成软件的过程性描述。 JSD的特点:获得简单清晰的设计方案,因为这样的方案易于理解、易于修改。 JSD的设计原则:使程序结构同数据结构相对应。
35
Jackson System Development(JSD)
1、Jackson Diagram: 注意: 层次方框图H中的方框表示模块,而JD中的方框代表几个语句构成的简单操作; H表现调用关系,而JD表现组成关系。 A B C A = Bo Co S A = B B* I
36
Jackson System Development(JSD)
例:一个正文文件由若干个记录组成, 每个记录是一个字符串。要求统计每个 记录中空格字符的个数,以及文件中空 格字符的总个数。要求的输出数据格式 是:每扫描一行输入字符串之后,换行 打印出这个字符串中的空格数,最后打 印出文件中空格的总个数。
37
Jackson System Development(JSD)
第1步:用Jackson图描述 I\O 的数据结构,包括顺序、选择和重复 正文文件 I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 第2步:在两个图中指出有直接因果关系(causality)、可以同时处理的单元(重复的次序,次数均相同)
38
? ? 输入 输出 正文文件 字符串* 字符* 空格O 非空格O 输出表格 表格体 串信息* 字符串 空格数 空格总数 JSD
I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 JSD ? ? 经过程序处理由正文文件得到输出表格。 每处理输入中一个字符串后就得到输出中一个串信息,二者重复次序和次数均相同。 字符不与多字符组成的字符串对应。 单个空格不能决定空格数。
39
第3步:Data structure Program structure
用下述三条规则从描述数据结构的Jackson图导出描述程序结构的Jackson图: 第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框(注意,若这对数据单元在输入数据结构和输出数据结构中所处的层次不同,则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应); 第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框; 第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框。
40
第3步:Data structure Program structure
把有对应关系的单元合为一个处理框,画在相应的层次中(不同层以低层为准) 正文文件 I 字符串* 字符* 空格O 非空格O S 输入 输出表格 表格体 串信息* 字符串 空格数 输出 空格总数 统计空格 程序体 印总数 处理字符串* I 印字符串 印空格数 分析字符* I 分析字符串 分析字符* 处理空格o 处理非空格o S 注:顺序执行的处理中不允许混有重复执行或选择执行的处理。
41
第4步:列出所有操作条件,并分配到上幅程序结构图中
Similar presentations