前言
经过了软件设计的前期了解,知道了软件设计阶段的任务和目标,清楚认识到如何进行软件的体系结构设计和集中模型的使
用。那么我们后续的模块分解,用户界面设计也是非常重要的,下面让小编继续带领大家走进软件设计的世界吧。
主要内容
1.模块分解
1.1 模块分解的目的
模块分解的目的是将系统“分而治之”,以降低问题的复杂性,使软件结构清晰,易阅读、易理解、易于测试和调试,因而也有
助于提高软件的可靠性。
1.2 模块间的关系
模块之间可以有各种关系,一般可以表示为层次结构和网状结构两种。
层次结构
如图所示,
衡量模块层次结构的有关指标是:
①深度:表示软件结构中从顶层模块到最底层模块的层数
②宽度:表示控制的总分布
③扇出数:指一个模块直接控制下属的模块个数
④扇入数:指一个模块的直接上属模块个数
网状结构
模块之间也存在着一种网状结构。在网状结构中,任何两个模块间都可以有双向的关系。由于不存在上级模块和下属模块的关
系,也就分不出层次来。任何两个模块都是平等的,没有从属关系。
如图所示,是网状结构的例子。分析比较两种结构的特点后可以看出,对于不加限制的网状结构,由于模块间相互关系的
任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在实际的软件
开发中,人们通常采用树状结构,而不采用网状结构。
1.3模块的独立性
模块的基本属性:
①功能:即指该模块实现什么功能,做什么事情。
②逻辑:即描述模块内部怎么做。
③状态:即该模块使用时的环境和条件。
模块的独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。
这种类型的模块可以并行开发,模块的独立性越强,并行开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组
合、修改及测试。
模块独立性的度量标准:
---耦合性---
指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块分解的一个目标是使模块之间的联系尽可能小,
如图所示,块间联系的大小可以从三个方面衡量:方式、作用和数量。
按照耦合性的高低,分为7种类型,如图所示:
一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为(由弱到强)
(1)非直接耦合(Nondirect coupling)
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模
块独立性最强。
(2)数据耦合(Data Coupling)
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息
的,则称这种耦合为数据耦合。由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。因此,数据耦
合是松散的耦合,模块之间的独立性比较强。在软件程序结构中至少必须有这类耦合。
(3)标记耦合(Stamp Coupling)
如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不
是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。在设计中应尽量避免这种耦合,它使
在数据结构上的操作复杂化了。如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中在一个模块中,就可以消除这种耦
合。
(4)控制耦合(control(20upling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。如图4.13所示。这种
耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对所控制模块的任何修改,都会影响控制模块。另外,控制耦
合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。
(5)外部耦合(External(;oupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
例如C语言程序中各个模块都访问被说明为extern类型的外部变量。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合
中不存在依赖于一个数据结构内部各项的物理安排。
(6)公共耦合((;ommon Coupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信
区、内存的公共覆盖区等。
(7)
内容耦合
((70ntent Coupling)
如果发生下列情形,两个模块之间就发生了内容耦合。
1)
一个模块直接访问另一个模块的内部数据;
2)
一个模块不通过正常入口转到另一模块内部;
3)
两个模块有一部分程序代码重叠
(
只可能出现在汇编语言中
)
;
4)
一个模块有多个入口。
在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,
都会造成程序出错。好在大多数高级程序设计语言已经设计成不允许出现内容
耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。
1)一个模块直接访问另一个模块的内部数据;
2)一个模块不通过正常入口转到另一模块内部;
3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
4)一个模块有多个入口。
在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。
好在大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦
合。
---内聚性---
又称块内联系,指模块之间的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。模块中组成元素结合的越紧密,模块的内聚性就越
高,模块的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。模块的内聚性和耦合性是
两个相互对立且又密切相关的概念。
内聚有如下的种类,它们之间的内聚度由弱到强排列如下:
(1) 偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。
(2) 逻辑内聚。这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能
(3) 时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(4) 过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间
没有数据进行传递。
(5) 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数
据或者产生相同的输出数据。
(6) 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输
入。即一个模块完成多个功能,这些模块又必须顺序执行。
(7) 功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,联系紧密,缺一不可。
软件总体设计的总则是:降低块间联系,提高块内联系。
1.4信息隐蔽
Parnas提出了信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。
这样,在将来由于这些因素变化而需修改软件时,只需修改这些个别的模块,其它模块不受影响。
信息隐蔽技术不仅提高了软件的可维护性,而且也避免了错误的蔓延,改善了软件的可靠性。现在信息隐蔽原则已成为软件工
程学中的一条重要原则。
2.详细设计的描述工具
在总体设计阶段完成了对系统的体系结构描述后,还必须对系统结构作进一步的细化。详细设计阶段的任务是开发一个可以直
接转换为程序的软件的表示,即对系统中的每个模块的内部过程进行设计和描述。常用的描述工具有一下几种:
2.1 程序流程图
如图所示,描述了一个具有多种结构的流程图。
2.2 N-S图
又称盒图,是一种结构化的流程图,有而且仅由顺序、选择、循环三种基本结构组成。如图所示:
2.3 PAD图
PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1974年由日本的二村良彦等人提出的又一种主要用于描述
软件详细设计的图形表示工具。与方框图一样,PAD图也只能描述结构化程序允许使用的几种基本结果。
它用二维树形结构的图表示程序的控制流,以PAD图为基础,遵循机械的走树(Tree Walk)规则就能方便地编写出
程序,用这种图转换为程序代码比较容易。
也是由三种基本结构结构组成,其中选择结构分为双分支和多分支,循环结构分为WHILE型循环和UNTIL型循环两类。如图所
示:
3.用户界面设计
3.1 用户界面设计的特性与设计任务
一个良好的用户界面应具有的特性:
可使用性
灵活性
界面的复杂性和可靠性。
设计任务:
(1)用户特性分析——建立用户模型
(2)用户界面的任务分析——建立任务模型(DFD图)
(3)确定用户界面类型:字符界面、用户图形界面和无交互界面
3.2 基本原则
- 一致性:菜单选择、数据显示以及其它功能都应使用一致的格式。
- 提供有意义的反馈。
- 执行有较大破坏性的动作前要求确认。
- 在数据录入上允许取消大多数操作。
- 减少在动作间必须记忆的信息数量。
- 允许用户非恶意错误,系统应保护自己不受致命操作的破坏。
- 按功能对动作分类,并按此排列屏幕布局,设计者应提高命令和动作组织的内聚性。
- 提供语境相关的帮助机制。
结语
在人和机器的互动过程(Human Machine Interaction)中,有一个层面,即我们所说的界面(interface)。
从心理学意义来分,界面可分为感觉(视觉、触觉、听觉等)和情感两个层次。
用户界面设计是屏幕产品的重要组成部分。
界面设计是一个复杂的有不同学科参与的工程,认知心理学、设计学、语言学等在此都扮演着重要的角色。
时刻应该记住——用户界面设计的三大原则是:置界面于用户的控制之下;减少用户的记忆负担;保持界面的一致性。