首页 理论教育 软件设计的基本概念

软件设计的基本概念

时间:2022-02-28 理论教育 版权反馈
【摘要】:软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。耦合性取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的独立性。

3.3.1 软件设计的基本概念

1.软件设计的基础

软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。

软件设计的重要性和地位概括为以下几点:

①软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节;

②软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;

③软件设计做出的决策,最终影响软件实现的成败;

④设计是软件工程和软件维护的基础。

从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。

从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。

软件设计是一个迭代的过程,软件设计的一般过程是:先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。

2.软件设计的基本原理

软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。

(1)抽象

抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。在软件概要设计中的模块分层也是由抽象到具体逐步分析和构造出来的。

(2)模块化

模块是指把一个待开发的软件分解成若干小的简单部分。如高级语言中的过程、函数、子程序等。每个模块可以完成一个特定的子功能,各个模块可以按一定的方法组装起来成为一个整体,从而实现整个系统的功能。

模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。

为了解决复杂的问题,在软件设计中必须把整个问题进行分解来降低复杂性,这样就可以减少开发工作量并降低开发成本和提高软件生产率。但是划分模块并不是越多越好,因为这会增加模块之间接口的工作量,所以划分模块的层次和数量应该避免过多或过少。

(3)信息隐蔽

信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。

(4)模块独立

模块独立性是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。

模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。

①内聚性:内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。内聚是从功能角度来度量模块内的联系。

内聚有如下的种类,它们之间的内聚性由弱到强排列为:

偶然内聚:指一个模块内的各处理元素之间没有任何联系。

逻辑内聚:指模块内执行几个逻辑上相关的功能,通过参数确定该模块完成哪一个功能。

时间内聚:把需要同时或顺序执行的动作组合在一起形成的模块为时间内聚模块。比如初始化模块,它顺序地为变量置初值。

过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。

通信内聚:指模块内所有处理功能都通过使用公用数据而发生关系。这种内聚也具有过程内聚的特点。

顺序内聚:指一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出就是下一个处理元素的输入。

功能内聚:指模块内所有元素共同完成一个功能,缺一不可,模块已不可再分。这是最强的内聚。

内聚性是信息隐蔽和局部化概念的自然扩展。一个模块的内聚性越强则该模块的独立性越强,作为软件结构设计的设计原则,要求每一个模块的内部都具有很强的内聚性,它的各个组成部分彼此都密切相关。

②耦合性:耦合性是模块间互相连接的紧密程度的度量。

耦合性取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。耦合可以分为下列几种,它们之间的耦合度由高到低排列为:

内容耦合:如一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。

公共耦合:若一组模块都访问同一全局数据结构,则它们之间的耦合称之为公共耦合。

外部耦合:一组模块都访问同一全局简单变量(而不是同一全局数据结构),且不通过参数表传递该全局变量的信息,则称为外部耦合。

控制耦合:若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则为控制耦合。

标记耦合:若两个以上的模块都需要其余某一数据结构子结构时,不使用其余全局变量的方式而是用记录传递的方式,即两模块间通过数据结构交换信息,这样的耦合称为标记耦合。

数据耦合:若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,即两模块间通过数据参数交换信息,则这两个模块为数据耦合。

非直接耦合:若两个模块没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,则称这两个模块为非直接耦合。非直接耦合独立性最强。

上面仅是对耦合机制进行的一个分类。可见,一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。原则上讲,模块化设计总是希望模块之间的耦合表现为非直接耦合方式。但是,由于问题所固有的复杂性和结构化设计的原则,非直接耦合往往是不存在的。

耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的独立性。

3.结构化设计方法

与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体有清楚定义的问题。

结构化设计方法的基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。下面重点以面向数据流的结构化方法为例讨论结构化设计方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈