2.结构化开发方法 - wolai 笔记

1.数据模型E-R图:描述数据对象间关系

软件必须理解的复合信息表示,复合信息是具有一系列不同性质或属性的事物。
  • 实体用矩形框
  • 属性用圆角矩形
  • 关系用菱形

2.功能模型:数据流图:描绘数据在软件中移动、变换及相应功能

数据流图,简称DFD(Data Flow Diagram)图,是以特定的图形符号描述系统逻辑模型的工具;他从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的过程;是开发人员与用户之间交流信息的通信工具,也是系统分析与系统设计的工具。
数据流图的三个层次:总体图、零级图、细节图
数据流图的画法总结:
  1. 先找出数据源点和汇点。他们是外部实体,由他们确定系统与外界的接口
  2. 找出外部实体的输出数据流与输入数据流。画出顶层数据流图。
  3. 从顶层加工出发,逐步细化,画出所需子图
  4. 分析系统的主要处理功能,把每一个处理功能作为一个加工,并且确定他们之间的数据流入、输出关系,画出第一层数据流图。
  5. 对流图中的每个加工进行细化,画出所需的子图,直到加工不需要再分解为止
  6. 按照前面给出的原则检查和修改每一层数据流图和子图。

3.行为模型:状态转换图:描绘系统状态和在不同状态间转换方式。

状态:被观察到的系统行为模式。
事件:引起状态转换的外界事件抽象。
行为:进入某状态所作动作。
在一张状态图中只能有一个初态,而中泰可以有0至多个
  • 初态:实心圆
  • 终态:同心圆+空心圆
  • 状态:圆角矩形

4.数据字典:描述软件使用和产生的所有数据对象。

数据字典是描述数据流图中数据的信息的集合。在软件分析和设计的过程中给人提供关于数据的描述信息
描述内容包括:数据流图、状态转换图、数据字典E-R图中信息(数据流、数据存储、外部实体)、控制信息(事件)等,不包括处理。
数据元素的组合方式
  • 顺序:即以确定的次序连接两个或多个分量。例:A+B
  • 选择:即从两个或多个可能的元素中选取一个。例:[A|B]
  • 重复:即把指定的分量重复零次或多次。例:1{A}5
  • 可选:即一个分量是可有可无的(重复零次或一次)
电话号码 = [ 校内电话 | 校外电话 ]
校内电话 = 非零数字 + 三位数字
非零数字 = [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]
三位数字 = 3{数字}3
数字 = [ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]
校外电话 = [ 本市电话 | 外地电话 ]
本市电话 = 0 + 八位非零开头数字
八位非零开头数字 = 非零数字 + 七位数字
七位数字 = 7{数字}7
外地电话 = 0 + 三位区码 + 八位非零开头数字
三位区码 = 三位数字

5.成本效益分析

从经济角度分析新系统的开发是否能盈利, 帮助使用部门正确做出是否投资的决定。
成本估计:
  • 代码行技术:软件成本 = 每行代码的平均成本 * 源代码行数
  • 任务分解技术:按开发阶段将系统划分成任务
成本/效益分析方法:货币的时间价值 F = P(1 + i) ;投资回收期;纯收入;投资回收率

6.软件设计的原则

模块化,抽象化与逐步求精,信息隐藏与局部化,模块独立(耦合内聚)

7.耦合与内聚

耦合衡量不同模块彼此间互相依赖(连接)的紧密程度
内聚衡量一个模块内部各个元素彼此结合的紧密程度

耦合的种类(松散→紧密)

  • 数据耦合:如果两个模块间的通讯信息是若干参数,其中每一个参数都是一个数据元素,称数据耦合这种耦合为数据耦合。这是模块之间影响最小的耦合关系。
  • 标记耦合:当把整个数据结构作为参数传递而被调用模块只需要使用其中一部分数据元素标记合时这种情况标记耦合。
  • 控制耦合:那么AB之间控制如果模块向模块传递的信息控制了模块的内部辑的合称制耦合。
  • 公共耦合:如果两个或多个模块都和同一个公共数据域有关,则称为公共耦合。公共合公共合是一种不良的合关系,它给模块的维护和修改带来难。如果两个模块共享的数据很多,都通过参数传递很不方便时,可以利用公共耦合。
  • 内容耦合:如果一个模块和另一个模块的内部属性(即运行程序和内部数据)有关,则称为内容耦合。

内聚的种类(好→差)

  • 功能内聚:如果一个模块内部的各组成部分的处理动作都为执行同一个功能而存在,并且只执行功能,则称为功能内聚。判断一个模块是不是功能内聚。只要看这个模块是“做什么”是完成一个具体的任务,还完成多任务。
  • 顺序内聚:如果一个模块内部的各个组成部分执行的几个处理动作有这样的特征,前一个处理动作所产生的输是后一个处理动作的输入数据,称为顺序内聚。顺序内聚维护起来不如功能内聚方便。要修改模块中的一个功能影响到同一个模块中的其他功能。
  • 通讯内聚:如果一个模块内各组成部的处理动作使用相的输入数据或产生相同的输通讯内聚数据,称通讯内聚。
  • 过程内聚:如果一个模块内部的各个组成部分的处理动作各不相同,彼此也没有联系,但他们都受同一个控制流支配决定他们的执行次序,称为过程内聚。
  • 暂时内聚(时间内聚):如果一个模块内的各组成部分的处理动作和时间有关,则称为暂时内聚。暂时内聚模块的处理动作必须在特定的时间内完成。指在一个特定的时间范围内完,但完成次序不重要。例加。积应设让出模块的初始化。
  • 逻辑内聚:如果一个模块内部的各组成部分的处理动作在逻辑上相似,但功能都彼此不同或内聚:无关,为逻辑内聚。一个逻辑内模块往往包括若干个逻辑相似的动作,使用时可以选用一个或几个功能。例如:把编辑各种输入数据的功能放在一个模块中。
  • 机械内聚(偶然内聚):如果一个模块的内部各组成部分的处理动作此没有任何联系。

8.软件工程启发式规则

  1. 改进软件结构提高模块独立性
  2. 模块规模应该适中。一般按功能分解到成为一个小的功能单一的模块为止。一般个模块内包含的语句在30-50条左右较好(指高级语言)。分解后不应该降低模块的独立性。
  3. 深度、宽度、扇出和扇入都应适当。好的设计结构通常是顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块中去(底层模块有高扇入)。模块的独立性是穿始终的标准,不能为了追求其它目标而违背独立性标准
  4. 模块作用域应在控制域内。若模块作用域不在控制域内,会增大模块间控制耦合。
  5. 降低模块接口的复杂程度。模块接口复杂是软件发生错误一主要原因。应使信息传递简单且和模块功能一致。
  6. 设计单入口单出口的模块,避免内容耦合。
  7. 模块功能应该可以预测,输入数据相同,产生同样输出。模块功能防止过分受限。

模块的作用域与控制域

模块的控制域本身及其所有下级模块(包括直接和间接下级模块)
模块的作用域受该模块内一个判定影响的所有模块的集合

模块的扇、深度、宽度

深度:表示软件结构中控制的层数----粗略的标志一个系统的大小和复杂程度
宽度:是软件结构同一层次上的模块总数的最大值----宽度越大系统越复杂。 模块的扇出:指一个模块拥有的直属下级模块的个数,一般扇出数控制在7以内,平均为34.
模块的扇入:是指一个模块的直接上级模块的个数。

10.面向数据流设计方法

结构图

  1. 简单调用
  2. 循环调用
  3. 选择调用
数据流图分类
  • 交换流:由输入、 变换中心和输出三部分组成
  • 事务流:由处理根据输入信息类型在若干动作序列中选一个执行。

8.详细设计阶段的图形工具

描述程序处理过程的工具
  • 盒图(N-S图) :出于要有一种不允许违背结构程序设计精神的图形工具的考虑
  • 程序流程图(PFD) :又称为程序框图,它是历史最悠久使用最广泛的描述软件设计的方法,然而它也是用得最混乱的一种方法
  • 问题分析图(PAD):它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易
  • 判定表/判定树,其他非图形工具有程设计语言(PDL)

9.结构程序设计

控制结构

  • 经典定义:通过顺序、选择、循环三种控制结构连接,单入口单出口。暗指不要使用goto语句。
  • 扩展定义:限制使用GOTO语句、DO_UNTILDO_CASE
  • 修正定义:LEAVE(跳过本层循环)和BREAK(跳出循环),可从循环中转移出来。

人机界面设计

遇到的问题:系统响应时间;用户帮助设施;出错信息处理;命令交互
人机界面设计指南:一般交互指南;信息显示指南;数据输入指



Comment