软件工程:实践者的研究方法第14章设计方法

软件工程:实践者的研究方法第14章设计方法,第1张

软件工程:实践者的研究方法第14章设计方法,第2张

第14章 设计方法

  设计通常被描述为一个多步的过程,其主要任务是从信息需求中综合出数据结构的表示、程序结构、接口特征和过程细节。Freeman在[FRE80]中对设计有较为详细的描述:

  设计是一项主要考虑进行重要决策的活动,这些决策通常都与结构有关。设计与编程都要考虑抽象信息表示,但其详细程度与编程有很大的不同。设计的结果是一个一致的、合理计划的程序表示,主要描述高层各部分的相互关系和低层所需的逻辑操作…

  在前一章我们已经指出,设计是由信息驱动的。各种软件设计方法主要考虑分析模型中的三个域,因此数据、功能和行为三个域是整个设计创建活动的指南。

  本章将讨论多种用于创建设计模型(见图13-1)的各个层次的方法,本章的目标是提供一个系统地完成设计的方法,设计的结果就是构造软件的蓝图。

14.1 数据设计

  数据设计是实施软件工程中的四个设计活动的第一个(有人也认为是最重要的一个)。由于数据结构对程序结构和过程复杂性都有影响,数据结构对软件质量的影响是很深远的。信息隐蔽和抽象数据的概念为数据设计提供了基础。

  Wasserman在参考文献[WAS80]中总结了数据设计的过程:

  数据设计的主要活动是选择对需求定义和规约过程中找出来的数据对象(数据结构)的逻辑表示。选择过程可以包括对候选结构进行算法分析,以决定出效率的结构;选择过程也可以只使用一组模块(一个包),在对象的某种表示上提供需要的操作。

  设计中的另一个相关的活动是标识要直接作用于逻辑数据结构的程序模块,这样,各个数据设计决策的影响域就受到了约束。

  无论采用哪种设计技术,好的数据设计将改善程序结构和模块划分,降低过程复杂性。

  Wasserman[WAS80]提出了一组用于数据规约和设计的原则。在实际应用中,数据设计在创建分析模型(见第12章)就已经开始了,考虑到需求分析和设计经常要重叠,我们主要考虑以下一组数据规约原则[WAS80]:

  1.用于功能和行为的系统分析原则也应用于数据。我们通常要在导出、复审和刻画功能需求和初步设计上花很多时间和工作量;数据对象及其关系、数据流和内容的表示也应该按步骤进行开发和复审,其他可选的数据组织结构也应加以考虑,数据模型对于软件设计的影响也应得到正确的评估,例如,一个多环链表可能可以很好地满足数据需求,但它也可能导致过于复杂的软件设计,而其他替代的数据组织结构可能会得到更好的结果。

  2.应该标识所有的数据结构以及其上的操作。设计一个高效的数据结构必须考虑其上的操作(见参考文献[AHO83]),例如,考虑一个由不同数据元素组成的数据结构,在许多重要的软件功能中都要操作这个数据结构。通过评估该数据结构上的操作,可定义一个抽象数据类型,以便在以后的软件设计中使用。抽象数据类型的规约将大大简化软件设计。

  3.应当建立数据字典,并用于数据设计和程序设计。数据字典的概念在第12章中已经介绍,数据字典明确表示了数据对象间的关系以及对数据结构中的元素的约束。如果有一个类似字典的数据规约存在,那些必须利用某些特定关系的优秀算法的定义将得到简化。

  4.低层的设计决策应该推迟到设计过程的后期。数据设计可以采用逐步求精的过程,也就是说,总体的数据组织可以在需求分析阶段定义,在概要设计中进行精化,并在以后的设计迭代中进行详细描述。在数据设计中应用自顶向下方法的优点与在软件设计中应用自顶向下方法的优点类似:主要的结构属性要首先进行设计和评估,以便建立数据的体系结构。

  5.只有那些需要直接使用数据结构内部数据的模块才能看到该数据结构的表示。信息隐蔽的概念以及相关的耦合概念为软件设计质量的评估提供了依据。本原则不但强调了这两个概念的重要性,还强调了“将数据对象的逻辑视图和物理视图分开的重要性”[WAS80]。

  6.应该开发一个由有用的数据结构和应用于其上的操作组成的库。数据结构和操作都应被看作可用于软件设计的资源,数据结构的设计可以考虑到复用。数据结构模板(抽象数据类型)库可以减少数据规约和设计的工作量。

  7.软件设计和程序设计语言应该支持抽象数据类型的规约和实现。如果没有办法对已有的数据结构直接进行规约,复杂数据结构的实现(以及对应的设计)将变得非常困难。例如,如果目标语言是Fortran的话,实现(或设计)一个链表或多层异构数组将是非常困难的,因为Fortran不支持直接对这些数据结构进行规约。

  以上这些原则为数据设计提供了基础,它们既可以应用在软件工程的定义阶段,也可以应用在开发阶段。在本书的其他部分我们已经指出,清晰的信息定义是软件开发成功的关键。

14.2 体系结构设计

  体系结构设计的主要目标是开发一个模块化的程序结构,并表示出模块间的控制关系。此外,体系结构设计将程序结构和数据结构相结合,为数据在程序中的流动定义了接口。

  为了理解体系结构设计的重要性,这里给出一个日常生活的小例子:

  你存了一笔钱,买了一块土地,准备盖一幢自己梦想中的房子。由于没有这方面的经验,你拜访了一位建筑师,向建筑师解释了自己的要求:房间的大小和数目、流行的式样、温泉、教堂式的屋顶、大量的玻璃窗等等。建筑师仔细的听了,问了几个问题,然后表示需要花几个星期进行设计。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 软件工程:实践者的研究方法第14章设计方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情