软件工程第08章软件设计基础_第1页
软件工程第08章软件设计基础_第2页
软件工程第08章软件设计基础_第3页
软件工程第08章软件设计基础_第4页
软件工程第08章软件设计基础_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程名称:软件工程课程名称:软件工程 第第13讲讲班班 级:级:日日 期:期:教教 室:室:教学题目:第教学题目:第8章章 软件设计基础。软件设计基础。8.1.18.1.3教学目的:理解软件设计过程、抽象与逐步求精、教学目的:理解软件设计过程、抽象与逐步求精、模块化与信息隐藏等概念。模块化与信息隐藏等概念。 教学重点:几个软件设计的基本概念。教学重点:几个软件设计的基本概念。教学难点:教学难点: 模块划分与软件损耗的关系。模块划分与软件损耗的关系。教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:业:软件设计阶段的工作是以需求分析阶段的成果软件设计阶段的工作是以需求分析阶段的成果

2、为前提和基础的,即经过系统分析小组签字认为前提和基础的,即经过系统分析小组签字认可的需求规格说明书及有关技术文档。经过软可的需求规格说明书及有关技术文档。经过软件工程师们多年的努力,一些软件设计技术、件工程师们多年的努力,一些软件设计技术、质量评估标准和设计表示法逐步形成并用于软质量评估标准和设计表示法逐步形成并用于软件工程实践。件工程实践。软件设计是软件工程的重要阶段。软件设计过软件设计是软件工程的重要阶段。软件设计过程是对程序结构、数据结构和过程细节逐步求程是对程序结构、数据结构和过程细节逐步求精、复审并编制文档的过程,本章讨论与软件精、复审并编制文档的过程,本章讨论与软件设计有关的主要概

3、念。设计有关的主要概念。一般认为,软件开发阶段由设计、编码和测试一般认为,软件开发阶段由设计、编码和测试三个基本活动组成,其中三个基本活动组成,其中“设计设计”活动是获取活动是获取高质量、低耗费、易维护软件的一个最重要环高质量、低耗费、易维护软件的一个最重要环节。节。需求分析阶段获得的需求规格说明书包括对将需求分析阶段获得的需求规格说明书包括对将要实现的系统在信息、功能和行为等各个方面要实现的系统在信息、功能和行为等各个方面的描述,这是软件设计的基础。对此不论采用的描述,这是软件设计的基础。对此不论采用何种软件设计方法都将产生何种软件设计方法都将产生: 系统的总体结构设计(系统的总体结构设计(

4、architectural design);); 系统的数据设计(系统的数据设计(data design);); 系统的过程设计(系统的过程设计(procedural design)。)。图图8-1-1 开发阶段的信息流开发阶段的信息流程序程序模块模块总体结构设计总体结构设计设计设计编码编码信息描述信息描述功能描述功能描述行为描述行为描述其他需求其他需求过程设计过程设计数据设计数据设计集成并确认集成并确认的软件的软件测试测试软件设计也可看作将需求规格说明逐步转换为软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。软件源代码的过程。从工程管理的角度软件设计可分为概要从工程管理的角度软件设

5、计可分为概要(preliminary)设计和详细()设计和详细(detail)设计两)设计两大步骤。大步骤。概要设计是根据需求确定软件和数据的总体框概要设计是根据需求确定软件和数据的总体框架,详细设计是将其进一步精化成软件的算法架,详细设计是将其进一步精化成软件的算法表示和数据结构。表示和数据结构。而在技术上,概要设计和详细设计又由若干活而在技术上,概要设计和详细设计又由若干活动组成,除总体结构设计、数据结构设计和过动组成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独程设计外,许多现代应用软件,还包括一个独立的界面设计活动。立的界面设计活动。抽象是控制复杂性的基本策

6、略。抽象是控制复杂性的基本策略。“抽象抽象” 要求要求人们将注意力集中在某一层次上考虑问题,而人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。忽略那些低层次的细节。软件设计过程应当是在不同抽象级别上考虑和软件设计过程应当是在不同抽象级别上考虑和处理问题的过程。最初,应在最高抽象级别上,处理问题的过程。最初,应在最高抽象级别上,用面向问题域的语言叙述用面向问题域的语言叙述“问题问题”,概括,概括“问问题解题解”的形式,而后不断地具体化,不断地用的形式,而后不断地具体化,不断地用面向过程的语言描述问题,最后,在最低的抽面向过程的语言描述问题,最后,在最低的抽象级别上给出可直接实现的象

7、级别上给出可直接实现的“问题解问题解”,即程,即程序。序。软件工程过程的每一步都是对较高一级抽象的解作一软件工程过程的每一步都是对较高一级抽象的解作一次进一步具体化的描述。次进一步具体化的描述。v在系统定义阶段,软件系统被描述为基于计算机的大在系统定义阶段,软件系统被描述为基于计算机的大系统的一个组成部分;系统的一个组成部分;v在软件规划和需求分析阶段,软件用问题域约定的习在软件规划和需求分析阶段,软件用问题域约定的习惯用语表达;惯用语表达;v从概要设计过渡到详细设计时,抽象级再一次降低;从概要设计过渡到详细设计时,抽象级再一次降低;v编码完成后达到了抽象的最低级。编码完成后达到了抽象的最低级

8、。在上述由高级抽象到低级抽象的转换过程中,伴随着在上述由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。一连串的过程抽象和数据抽象。v过程抽象把完成一个特定功能的动作序列抽象为一个过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表;过程名和参数表;v数据抽象把一个数据对象的定义(或描述)抽象为一数据抽象把一个数据对象的定义(或描述)抽象为一个数据类型名。个数据类型名。抽象抽象 该该CAD软件系统配有能与绘图员进行软件系统配有能与绘图员进行可视化通信的图形界面,能用鼠标代替绘图工可视化通信的图形界面,能用鼠标代替绘图工具,画各种直线和曲线;能完成所有几何计算具,画各种

9、直线和曲线;能完成所有几何计算以及所有截面视图和辅助视图的设计。图形设以及所有截面视图和辅助视图的设计。图形设计的结果存在图形文件中,图形文件可包含几计的结果存在图形文件中,图形文件可包含几何的、正文的和其他各种补充设计信息。何的、正文的和其他各种补充设计信息。 显而易见,在这一抽象级别上,用问题域本身显而易见,在这一抽象级别上,用问题域本身的术语来描述问题的解。的术语来描述问题的解。抽象抽象 CAD软件任务;软件任务; 用户界面子任务;用户界面子任务; 创建二维图形子任务;创建二维图形子任务; 显示图形子任务;显示图形子任务; 管理图形文件子任务;管理图形文件子任务; end CAD. 在这

10、一抽象级别上,给出了组成在这一抽象级别上,给出了组成CAD软件任务软件任务的所有主要子任务,尽管术语已与问题域有所的所有主要子任务,尽管术语已与问题域有所不同,但仍然不是实现所用的语言。不同,但仍然不是实现所用的语言。抽象抽象(仅以(仅以“创建二维图形子任务创建二维图形子任务”为例)为例) PROCEDURE 创建二维图形创建二维图形 REPEAT UNTIL DO WHILE 数字仪接口任务;数字仪接口任务; 判断作图请求:判断作图请求: 线:画线任务;线:画线任务; 圆:画圆任务;圆:画圆任务; END; DO WHILE 键盘接口任务;键盘接口任务; 选择分析或计算:选择分析或计算: 辅

11、助视图:辅助视图任务;辅助视图:辅助视图任务; 截面视图:截面视图任务;截面视图:截面视图任务; END; END REPEAT;END PROCEDURE.l在这一抽象级别上,给出了初步的在这一抽象级别上,给出了初步的过程性表示,此时所有术语都是面过程性表示,此时所有术语都是面向软件(比如采用向软件(比如采用do while结构)结构)并且模块结构也开始明朗。求精过并且模块结构也开始明朗。求精过程还可继续下去,直至产生源代码。程还可继续下去,直至产生源代码。数据抽象与过程抽象一样,能使设计者按不同数据抽象与过程抽象一样,能使设计者按不同的详细程度表示数据对象。的详细程度表示数据对象。仍以仍以

12、CAD软件为例,我们可定义一个称为软件为例,我们可定义一个称为drawing(图)的数据对象:(图)的数据对象:TYPE drawing IS STRUCTURE DEFINED number IS STRING LENTH(12); geometry DEFINED notes IS STRING LENTH(256); bom DEFINEDEND drawing TYPE;在此,在此,drawing被表示为一种结构,其各个组被表示为一种结构,其各个组成 部 件 本 身 又 可 为 某 种 数 据 抽 象 , 比 如成 部 件 本 身 又 可 为 某 种 数 据 抽 象 , 比 如geom

13、etry(几何图形)和(几何图形)和bom。一旦抽象数据类型一旦抽象数据类型drawing定义完毕,即可用定义完毕,即可用类型名直接说明数据对象,而不必涉及其内部类型名直接说明数据对象,而不必涉及其内部构造的细节,例如,可用语句构造的细节,例如,可用语句: blueprint IS INSTANCE OF drawing; 或或 schematic IS INSTANCE OF drawing; 说明说明blueprint和和schematic具有具有drawing的一切的一切特性。特性。blueprint蓝图,蓝图,schematic简(略)图。简(略)图。在抽象数据类型的定义中可以附加一组

14、操作的在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操定义,用以确定在此类数据对象上可进行的操作。以抽象数据类型作。以抽象数据类型drawing为例,可以定义为例,可以定义擦除(擦除(erase)、存储()、存储(save)、分类()、分类(catalog)和拷贝(和拷贝(copy)等操作。)等操作。许多程序设计语言都提供了对抽象数据类型的许多程序设计语言都提供了对抽象数据类型的支持,支持,Ada 的程序包机制是对数据抽象和过程的程序包机制是对数据抽象和过程抽象的双重支持抽象的双重支持 关于关于“逐步求精逐步求精”,N.Wirth曾经做过如下说曾经做过如下说明:

15、明: “我们对付复杂问题的重要办法是抽象,因此,我们对付复杂问题的重要办法是抽象,因此,对一个复杂的问题不应该立即用计算机指令、对一个复杂的问题不应该立即用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽数字和逻辑符号来表示,而应该用较自然的抽象语言来表示,从而得出抽象程序。抽象程序象语言来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象适的记号(可能是自然语言)来表示。对抽象程序做进一步分解,进入下一个抽象层次,重程序做进一步分解,进入下一个抽象层次,重复这一精化过程直到程序能被计算机

16、接受为止。复这一精化过程直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令这时的程序可能是用某种高级语言或机器指令书写的。书写的。”因为求精的每一步都是用更为详细的描述替代因为求精的每一步都是用更为详细的描述替代上一层次的抽象描述,所以在整个设计过程中上一层次的抽象描述,所以在整个设计过程中产生的,具有不同详细程度的各种描述,组成产生的,具有不同详细程度的各种描述,组成了系统的层次结构。层次结构的上一层是下一了系统的层次结构。层次结构的上一层是下一层的抽象,下一层是上一层的求精。层的抽象,下一层是上一层的求精。在过程求精的同时自然伴随着数据的求精,无在过程求精的同时自然伴随着

17、数据的求精,无论是过程还是数据,每一步细化都蕴涵着某些论是过程还是数据,每一步细化都蕴涵着某些设计决策,因此设计人员必须掌握一些基本的设计决策,因此设计人员必须掌握一些基本的准则,比较各种可能的候选方案。准则,比较各种可能的候选方案。 软件总体结构(下一节讨论)体现了模软件总体结构(下一节讨论)体现了模块化思想,即把软件划分为可独立命名块化思想,即把软件划分为可独立命名和编制的部件,每个部件称为一个模块,和编制的部件,每个部件称为一个模块,当把所有模块组装到一起时,便可获得当把所有模块组装到一起时,便可获得满足问题需要的一个解。满足问题需要的一个解。“模块化是唯一对软件中的程序进行智模块化是唯

18、一对软件中的程序进行智能化管理的一个属性能化管理的一个属性”。假设:假设:函数函数C(X)问题问题X的复杂性;的复杂性;函数函数E(X)求解问题求解问题X需要花费的工作量(时间);需要花费的工作量(时间);对于问题对于问题P1和和P2,如果,如果 : C(P1)C(P2) 则有则有 : E(P1)E(P2) 结论:解决一个复杂问题总比解决一个简单问题耗费结论:解决一个复杂问题总比解决一个简单问题耗费 更多的工作量。更多的工作量。 同时同时 有:有:C(P1+P2)C(P1)+C(P2) 结论:由结论:由P1、P2组合而成的问题的复杂性往往比考虑组合而成的问题的复杂性往往比考虑 单个问题复杂性的

19、和更大。单个问题复杂性的和更大。 于是有:于是有: E(P1+P2)E(P1)+E(P2)图图8-1-2 模块与软件耗费模块与软件耗费最小成本最小成本区域区域MO软件总成本软件总成本用于接口的成本用于接口的成本每个模块成本之和每个模块成本之和模块总数模块总数成本或成本或工作量工作量信息隐蔽原理告诉我们,模块应该设计得使其信息隐蔽原理告诉我们,模块应该设计得使其所含信息(过程和数据)对于那些不需要这些所含信息(过程和数据)对于那些不需要这些信息的模块不可访问;每个模块只完成一个相信息的模块不可访问;每个模块只完成一个相对独立的特定功能;模块之间仅仅交换那些为对独立的特定功能;模块之间仅仅交换那些

20、为完成系统功能必须交换的信息,即模块应该独完成系统功能必须交换的信息,即模块应该独立。显然,模块独立的概念是模块化、抽象、立。显然,模块独立的概念是模块化、抽象、信息隐蔽和局部化等诸多概念的直接结果。信息隐蔽和局部化等诸多概念的直接结果。它不仅支持模块的并行开发,而且还可它不仅支持模块的并行开发,而且还可减少测试和后期维护的工作量。因为测减少测试和后期维护的工作量。因为测试和维护阶段不可避免地要修改设计和试和维护阶段不可避免地要修改设计和代码,模块对大多数数据和过程处理细代码,模块对大多数数据和过程处理细节的隐蔽可以减少错误向外传播。此外,节的隐蔽可以减少错误向外传播。此外,整个系统欲扩充功能

21、亦只需整个系统欲扩充功能亦只需“插入插入”新新模块,原有的多数模块无须改动。模块,原有的多数模块无须改动。内聚度是前述信息隐蔽和局部化概内聚度是前述信息隐蔽和局部化概念的自然扩展,它标志一个模块内念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。部各成分彼此结合的紧密程度。 内聚度按其高低程度可分为七级,内聚度按其高低程度可分为七级,内聚度越高越好。内聚度越高越好。偶然性内聚(偶然性内聚(coincidental cohesion)。是指一个模块)。是指一个模块内各成分为完成一组功能而组合在一起,它们相互之内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。常见的偶然

22、性内聚情形是,间即使有关系,也很松散。常见的偶然性内聚情形是,当程序员写完一个程序后发现有一组语句多处出现,当程序员写完一个程序后发现有一组语句多处出现,于是为节省内存便将这组语句单独组成一个模块。于是为节省内存便将这组语句单独组成一个模块。XYZW如果一个模块完成的诸任务逻辑上相关,则称如果一个模块完成的诸任务逻辑上相关,则称之为逻辑性内聚(之为逻辑性内聚(logical cohesion)例如:一个模块产生所有与类型无关的输出,即例如:一个模块产生所有与类型无关的输出,即为逻辑性内聚。为逻辑性内聚。又如:模块又如:模块X、Y分别调用分别调用A、B,A、B相似,将相似,将其合并为模块其合并为

23、模块AB,模块,模块AB即为逻辑性内聚。即为逻辑性内聚。XYSABXYSAB如果一个模块包含的诸任务必须在同一如果一个模块包含的诸任务必须在同一时间段内执行(例如一个初始化模块),时间段内执行(例如一个初始化模块),则称之为时间性内聚(则称之为时间性内聚(temporal cohesion)。)。以上三种内聚形式通常认为是低级内聚。以上三种内聚形式通常认为是低级内聚。过程性内聚(过程性内聚(procedural cohesion) 模块的过程性内聚度是指,模块内成分模块的过程性内聚度是指,模块内成分彼此相关,并且必须按特定的次序执行;彼此相关,并且必须按特定的次序执行;过程内聚模块的各组成功能

24、由控制流联过程内聚模块的各组成功能由控制流联结在一起。结在一起。通信性内聚(通信性内聚(communicational cohesion)。)。 模块的通信性内聚度是指,模块中各成分都模块的通信性内聚度是指,模块中各成分都将对数据结构的同一区域进行操作,以达到将对数据结构的同一区域进行操作,以达到通信的目的。通信的目的。例如,模块例如,模块A的处理单元是由同一数据文件的处理单元是由同一数据文件的数据产生不同的表格的数据产生不同的表格模块模块A从文件从文件FILE读出数据读出数据1. 由数据产生报表一由数据产生报表一2. 由数据产生报表二由数据产生报表二顺序性内聚(顺序性内聚(sequentia

25、l cohesion) 。如果一个模块内的各处理成分均与同一如果一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行,功能相关,且这些处理必须顺序执行,则称顺序内聚;则称顺序内聚; 通常,一个处理成分的通常,一个处理成分的输出是另一个处理成分的输入。例如:输出是另一个处理成分的输入。例如:1. 输入系数输入系数2. 求方程的根求方程的根3. 打印方程的根打印方程的根求一元二次方程求一元二次方程根的模块根的模块功能性内聚(功能性内聚(functional cohesion)。)。如果模块内所有成分形成一个整体,完如果模块内所有成分形成一个整体,完成单个功能,则称功能内聚,功能内聚成单个

26、功能,则称功能内聚,功能内聚是最高程度的内聚形式。是最高程度的内聚形式。例如,一个模块仅完成一个矩阵的输出,例如,一个模块仅完成一个矩阵的输出,就是一个具有功能性内聚的模块。就是一个具有功能性内聚的模块。q设计软件时,应该能够识别内聚度的高设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内低,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性。聚度,从而获得较高的模块独立性。耦合度是对软件结构中模块间关联程度的一种度量。耦合度是对软件结构中模块间关联程度的一种度量。耦合的强弱取决于模块间接口的复杂性、进入或调耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以

27、及通过界面传送数据的多少等。用模块的位置以及通过界面传送数据的多少等。与内聚度正好相反,在设计软件时应追求尽可能松与内聚度正好相反,在设计软件时应追求尽可能松散耦合的系统。因为对这类系统中任一模块的设计、散耦合的系统。因为对这类系统中任一模块的设计、测试和维护相对独立。由于模块间联系较少,错误测试和维护相对独立。由于模块间联系较少,错误在模块间传播的可能性也随之变小。在模块间传播的可能性也随之变小。模块间的耦合程度直接影响系统的可理解性、可测模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。试性、可靠性和可维护性。耦合度也可以分为七级耦合度也可以分为七级耦合度也可以分为七级:

28、耦合度也可以分为七级:如果两模块中任一个都不依赖于对方能如果两模块中任一个都不依赖于对方能独立工作,则称这两模块为(独立工作,则称这两模块为(nodirect coupling),这类耦合度最低。例如:),这类耦合度最低。例如: XYAB无关系无关系数据耦合(数据耦合(data coupling) 如果两模块间通过参数交换信息,而信如果两模块间通过参数交换信息,而信息仅限于数据,则称这两模块为数据耦息仅限于数据,则称这两模块为数据耦合。一般软件系统中都存在数据耦合,合。一般软件系统中都存在数据耦合,它是完成大多数功能所必需的。例如:它是完成大多数功能所必需的。例如:AB通过参数通过参数传递数据

29、传递数据特征耦合(特征耦合(stamp coupling)。)。介于数据耦合和控制耦合之间的是特征耦合介于数据耦合和控制耦合之间的是特征耦合(stamp coupling)。例如,传递了求平均成)。例如,传递了求平均成绩以外的参数:绩以外的参数:producereport cardscalculateaverage printreport cardstudengt recordaverragestudengt recordaverrage控制耦合(控制耦合(control coupling)。)。如果两模块间通过参数交换信息,此时如果两模块间通过参数交换信息,此时若传递的信息中含有控制信息,则

30、耦合若传递的信息中含有控制信息,则耦合度上升为控制耦合。控制耦合通常会增度上升为控制耦合。控制耦合通常会增加系统的复杂性,有时适当分解模块可加系统的复杂性,有时适当分解模块可消除控制耦合。消除控制耦合。外部耦合(外部耦合(external coupling)。)。当若干模块均与同一个外部环境关联当若干模块均与同一个外部环境关联(例如,(例如,I/O处理使所有处理使所有I/O模块与特定模块与特定的设备、格式和通信协议相关联),它的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部耦合尽管们之间便存在外部耦合。外部耦合尽管需要,但应限制在少数几个模块上。需要,但应限制在少数几个模块上。公共

31、耦合(公共耦合(common coupling)当若干模块通过全局的数据环境相互作当若干模块通过全局的数据环境相互作用时,它们之间存在公共耦合。全局数用时,它们之间存在公共耦合。全局数据环境中可能含有全局变量、公用区、据环境中可能含有全局变量、公用区、内存公共覆盖区、任何存储介质上的文内存公共覆盖区、任何存储介质上的文件、物理设备等件、物理设备等。内容耦合(内容耦合(content coupling)。)。最高耦合度是内容耦合,出现内容耦合最高耦合度是内容耦合,出现内容耦合的情形包括:当一个模块使用另一个模的情形包括:当一个模块使用另一个模块内部的数据或控制信息;一个模块直块内部的数据或控制信

32、息;一个模块直接转移到另一个模块内部,等等。接转移到另一个模块内部,等等。一般来说,设计软件时应尽量使用数据耦合,一般来说,设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共数据减少控制耦合,限制外部环境耦合和公共数据耦合,杜绝内容耦合。耦合,杜绝内容耦合。值得指出,模块化设计的思想适用于任何软件值得指出,模块化设计的思想适用于任何软件系统的设计。当某些软件系统(如实时软件系统的设计。当某些软件系统(如实时软件等),因不能容忍子程序调用引起的时间开销等),因不能容忍子程序调用引起的时间开销而必须以整块软件的形式出现时,软件设计仍而必须以整块软件的形式出现时,软件设计仍然应该以模

33、块化设计的思想为指导,直至编码然应该以模块化设计的思想为指导,直至编码时再改用代入式(时再改用代入式(in line)方法。这样,源)方法。这样,源程序中虽不含明显的模块,但模块化设计所带程序中虽不含明显的模块,但模块化设计所带来的大部分益处却已被系统获得。来的大部分益处却已被系统获得。课程名称:软件工程课程名称:软件工程 第第14讲讲班班 级:级:日日 期:期:教教 室:室:教学题目:教学题目:8.1.48.1.6,8.2,8.3教学目的:理解软件设计的概念,掌握几种设计教学目的:理解软件设计的概念,掌握几种设计 技术和工具,了解设计规格说明和评审。技术和工具,了解设计规格说明和评审。 教学

34、重点:几种设计技术和工具。教学重点:几种设计技术和工具。教学难点:教学难点: 判定表。判定表。教教 具:多媒体教室、电子教案具:多媒体教室、电子教案作作 业:业:软件总体结构(软件总体结构(software architecture)应该包)应该包括两方面内容:括两方面内容: 1) 由系统中所有过程性部件(即模块)由系统中所有过程性部件(即模块) 构成的层次结构,即程序结构;构成的层次结构,即程序结构; 2) 对应于程序结构的输入输出数据结构。对应于程序结构的输入输出数据结构。软件总体结构设计的目标就是产生一个模块化软件总体结构设计的目标就是产生一个模块化的程序结构并明确各模块之间的控制关系,

35、此的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。据流,进一步协调程序结构和数据结构。软件总体结构(软件总体结构(software architecture)应该包)应该包括两方面内容:括两方面内容: 1) 由系统中所有过程性部件(即模块)由系统中所有过程性部件(即模块) 构成的层次结构,即程序结构;构成的层次结构,即程序结构; 2) 对应于程序结构的输入输出数据结构。对应于程序结构的输入输出数据结构。软件总体结构设计的目标就是产生一个模块化软件总体结构设计的目标就是产生一个模块化的程序

36、结构并明确各模块之间的控制关系,此的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。据流,进一步协调程序结构和数据结构。图图8-1-3 8-1-3 结构演变结构演变软件软件“解解”S1S4S2待解问题待解问题S3P1 P2P4P3图图8-1-4 对应于同一问题的各种软件结构对应于同一问题的各种软件结构问题问题P结构结构1结构结构2结构结构3M1M2M3M4M1M2M3M4M1M2M3M4MMM类树图(类树图(tree like diagram)Warnier Orr图图Jackson图图v

37、最常见的是如图最常见的是如图8-1-5所示的类树图。为所示的类树图。为便于讨论,下面定义几个有关的术语和便于讨论,下面定义几个有关的术语和度量。度量。图图8-1-5 有关程序结构的术语有关程序结构的术语Mabcdemfgihopqrntjks扇出扇出扇入扇入宽度宽度深度深度一个软件的深度(一个软件的深度(depth) 控制的层数;控制的层数;一个软件的宽度(一个软件的宽度(width) 其控制的层其控制的层数和跨度;数和跨度;一个模块的一个模块的“扇出数扇出数”(fan out) 该模块直接控制的其他模块数;该模块直接控制的其他模块数;一个模块的一个模块的“扇入数扇入数”(fan in)指能)

38、指能直接控制该模块的模块数。直接控制该模块的模块数。如果一个模块控制另一个模块,称前者为如果一个模块控制另一个模块,称前者为“主控主控”模块,后者为模块,后者为“从属从属”模块。在图模块。在图8-1-5中模块中模块M主控模块主控模块a、b、c,模块,模块d从属从属模块模块a,因此也从属,因此也从属M。此外,软件结构中还有两个重要的特性,即此外,软件结构中还有两个重要的特性,即可见域和连通域。可见域和连通域。v模块的可见域模块的可见域该模块可直接或间接引用该模块可直接或间接引用 的一组模块;的一组模块;v模块的连通域模块的连通域仅包括该模块可直接引用仅包括该模块可直接引用 的模块。的模块。数据结

39、构描述各数据分量之间的逻辑关系,数数据结构描述各数据分量之间的逻辑关系,数据结构一经确定,数据的组织形式、访问方法、据结构一经确定,数据的组织形式、访问方法、组合程度及处理策略等随之而定,所以数据结组合程度及处理策略等随之而定,所以数据结构是影响软件总体结构的重要因素。构是影响软件总体结构的重要因素。数据结构与程序结构一样,也可以在不同的抽数据结构与程序结构一样,也可以在不同的抽象级别上表示。以栈为例,作为一个抽象数据象级别上表示。以栈为例,作为一个抽象数据类型,在概念级上只关心类型,在概念级上只关心“先进后出先进后出”特性,特性,而在实现级上则要考虑物理表示及内部工作的而在实现级上则要考虑物

40、理表示及内部工作的细节,比如,用向量实现,或用链表实现等。细节,比如,用向量实现,或用链表实现等。数据结构对程序结构和过程复杂性有直接的影响,从数据结构对程序结构和过程复杂性有直接的影响,从而在很大程度上决定了软件的质量。而在很大程度上决定了软件的质量。数据设计的目标是为在需求规格说明中定义的那些数数据设计的目标是为在需求规格说明中定义的那些数据对象选择合适的逻辑表示,并确定可能作用在这些据对象选择合适的逻辑表示,并确定可能作用在这些逻辑结构上的所有操作(包括选用已存在的程序包)。逻辑结构上的所有操作(包括选用已存在的程序包)。数据抽象和信息隐蔽两个概念是数据设计的基础。数据抽象和信息隐蔽两个

41、概念是数据设计的基础。通常,数据设计方案不是唯一的,有时需进行算法复通常,数据设计方案不是唯一的,有时需进行算法复杂性分析、综合各种因素之后才能从多种候选方案中杂性分析、综合各种因素之后才能从多种候选方案中筛选出最佳的设计方案。筛选出最佳的设计方案。过程设计紧跟在数据结构和程序结构设计之后,过程设计紧跟在数据结构和程序结构设计之后,其基本任务是描述模块内各处理元素和判断元其基本任务是描述模块内各处理元素和判断元素的顺序,图素的顺序,图8-1-6展示了模块展示了模块B的内部过程。的内部过程。过程说明过程说明图图8-1-6 模块模块B的内部结构的内部结构模块模块B模块模块B程序结构程序结构所谓过程

42、,应包括有关处理的精确说明,诸如所谓过程,应包括有关处理的精确说明,诸如事件的顺序、判断的位置和条件、循环操作以事件的顺序、判断的位置和条件、循环操作以及数据的组成,内部变量和外部变量的引用问及数据的组成,内部变量和外部变量的引用问题等等。题等等。过程设计也应遵循过程设计也应遵循“自上而下,逐步求精自上而下,逐步求精”的的原则和单入口单出口的结构化设计思想。原则和单入口单出口的结构化设计思想。过程设计的任务是描述算法的细节。结构化程过程设计的任务是描述算法的细节。结构化程序流程图、盒图(序流程图、盒图(N-S图)、判定表和判定树,图)、判定表和判定树,以及过程设计语言(以及过程设计语言(PDL

43、)、)、PAD图等是人们图等是人们经常使用的工具。经常使用的工具。结构化程序设计定义:是程序设计技术,它采用自顶结构化程序设计定义:是程序设计技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。向下逐步求精的设计方法和单入口单出口的控制构件。 结构化程序设计的思想,应该在软件设计中体现出来,结构化程序设计的思想,应该在软件设计中体现出来,但这并不排除为效率或其他原因对结构化程序设计作但这并不排除为效率或其他原因对结构化程序设计作一点修正。随着面向对象、软件重用等新的软件开发一点修正。随着面向对象、软件重用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能方法和技术的发展,

44、更现实、更有效的开发途径可能是自顶向下和自底向上两种方法有机地结合。是自顶向下和自底向上两种方法有机地结合。1流程图(也称为程序框图)是最常用的一种流程图(也称为程序框图)是最常用的一种表示法,表示法, “顺序顺序”、“分支分支”和和“循环循环”三个三个基本控制构件用流程图表达的形式如图基本控制构件用流程图表达的形式如图8-2-1所所示。示。F第二个任务第二个任务顺序结构顺序结构then部分部分else部分部分do while循循环环第一个任务第一个任务T分支条件分支条件If then else结结构构循环条件循环条件循环体循环体TF图图8-2-1 流程图构件流程图构件 2盒图也称为盒图也称为

45、N-S图或图或Chapin图。这种表达方图。这种表达方式取消了流程线,它强迫程序员以结构化方式式取消了流程线,它强迫程序员以结构化方式思考和解决问题。思考和解决问题。第一个任务第一个任务第二个任务第二个任务第三个任务第三个任务顺序结构顺序结构else部分部分then部分部分条件条件FTif-then-else结构结构do-while部分部分循环条件循环条件循环结构循环结构图图8-2-3 盒图的构件盒图的构件当模块中包含复杂的条件组合,并要根据这当模块中包含复杂的条件组合,并要根据这些条件的组合选择动作时,只有判定表和判些条件的组合选择动作时,只有判定表和判定树能够清晰地表达出复杂的条件组合与各

46、定树能够清晰地表达出复杂的条件组合与各种动作之间的对应关系。种动作之间的对应关系。 判定表由四部分组成:判定表由四部分组成:左上部左上部列出所有条件;列出所有条件;左下部左下部列出所有可能的动作;列出所有可能的动作;右上部右上部所有可能的条件组合(矩阵);所有可能的条件组合(矩阵);右下部右下部条件组合与动作之间的对应关系。条件组合与动作之间的对应关系。判定表的每一列可解释为一条处理规则。判定表的每一列可解释为一条处理规则。【例【例8.2】问题处理描述:耗电记费系统可】问题处理描述:耗电记费系统可以采用固定价格收费、浮动价格收费和其以采用固定价格收费、浮动价格收费和其他方式收费三种方式。若采用

47、固定价格方他方式收费三种方式。若采用固定价格方式收费,对每月耗电式收费,对每月耗电100kWh以下的用户以下的用户只征收最低标准费,超过只征收最低标准费,超过100kWh的用户的用户按价格表按价格表A收费;若采用浮动价格方式收收费;若采用浮动价格方式收费,则每月耗电费,则每月耗电100kWh以下的用户按价以下的用户按价格格A收费,超过收费,超过100kWh的用户按价格的用户按价格B收费。收费。规规 则则12345 固定价格方式固定价格方式 浮动价格方式浮动价格方式 耗电耗电100kW.h 耗电耗电100kW.h TFTFTFFTFTTFFTFTFF 收取最低标准费收取最低标准费 按价格表按价格

48、表A收费收费 按价格表按价格表B收费收费 其他处理其他处理 条件条件动作动作 耗电耗电100kWh 收取最低标准费收取最低标准费 固定方式固定方式 耗电耗电100kWh 按价格表按价格表A收费收费 耗电耗电100kWh 按价格表按价格表A收费收费耗电收费耗电收费 浮动方式浮动方式 耗电耗电100kWh 按价格表按价格表B收费收费 其他方式其他方式 其他处理其他处理图图8-2-5 用判定树表示计算耗电收费的算法用判定树表示计算耗电收费的算法 判定树的优点:形式简单,直观明了,易于判定树的优点:形式简单,直观明了,易于掌握。掌握。判定树的缺点:判定树的缺点:存在着数据冗余的问题,相同的数据元素往存

49、在着数据冗余的问题,相同的数据元素往往要重复多次,而且越接近树的叶端重复的往要重复多次,而且越接近树的叶端重复的次数越多。次数越多。 判定树要求对条件进行层次划分,若条件所判定树要求对条件进行层次划分,若条件所处层次不对,可能会导致增加判定树的复杂处层次不对,可能会导致增加判定树的复杂性。性。PDL(Procedure Design Language)也)也称为结构英语或伪码,是所有正文形式称为结构英语或伪码,是所有正文形式的过程设计工具的统称。的过程设计工具的统称。PDL经常表现为一种经常表现为一种“混杂混杂”的形式,的形式,允许自然语言(如英语)的词汇与某种允许自然语言(如英语)的词汇与某

50、种结构化程序设计语言(如结构化程序设计语言(如Pascal、C、Ada等)的语法结构交织在一起等)的语法结构交织在一起PDL应具有下述特点:应具有下述特点: 1关键字采用固定语法并支持结构化构件、关键字采用固定语法并支持结构化构件、数据说明机制和模块化;数据说明机制和模块化; 2处理部分采用自然语言描述;处理部分采用自然语言描述; 3允许说明简单(标量、数组等)和复杂允许说明简单(标量、数组等)和复杂(链表、树等)的数据结构;(链表、树等)的数据结构; 4子程序的定义与调用规则不受具体接口子程序的定义与调用规则不受具体接口方式的影响。方式的影响。考察一个考察一个PDL的原型,它可以建立在任意一

51、个通的原型,它可以建立在任意一个通用的结构化程序设计语言之上。基本成分包括:用的结构化程序设计语言之上。基本成分包括:子程序定义、界面描述、数据说明、块结构、分子程序定义、界面描述、数据说明、块结构、分支结构、循环结构和支结构、循环结构和I/O结构。结构。数据说明的形式为:数据说明的形式为: TYPE IS 其中:其中:局部变量或全局变量;局部变量或全局变量;某个特定关键字(例如,某个特定关键字(例如,SCALAR,ARRAY,LIST,STRING,STRUTURE等);等);说明此处定义的变量在该过程或整说明此处定义的变量在该过程或整个程序中应如何使用。个程序中应如何使用。l可进行抽象数据

52、类型的定义,例如可进行抽象数据类型的定义,例如 :TYPE table_1 IS INSTACE OF symbol_table 而而symbol_table在另一处已定义如下:在另一处已定义如下:TYPE symbol_table IS STRUCTURE DEFINEDl该该PDL的块结构描述一个过程元素,即一个块的块结构描述一个过程元素,即一个块内的所有语句将作为一个整体执行,形式为内的所有语句将作为一个整体执行,形式为 BEGIN END该该PDL的分支结构有的分支结构有if-then-else和和case两种形式,两种形式,分别为分别为 IF THEN ELSE ENDIFCASE

53、OF WHEN SELECT WHEN SELECT WHEN SELECT DEFAULT:ENDCASE循环结构包括三类,表达形式分别为循环结构包括三类,表达形式分别为 :DO WHILE ENDWHILEREPEAT UNTIL ENDREPEATDOFOR = ENDFOR此此PDL还提供了还提供了NEXT和和EXIT两种语句:两种语句: EXIT语句,退出本层循环;语句,退出本层循环; NEXT语句强迫本次循环结束,新一轮循环开始。语句强迫本次循环结束,新一轮循环开始。在该在该PDL中,子程序说明为:中,子程序说明为: PROCEDURE INTERFACE END 其中属性表指明该

54、子程序的引用特性(比如,是其中属性表指明该子程序的引用特性(比如,是INTERNAL还是还是EXTERNAL模式)和其他依赖于模式)和其他依赖于实现(即程序设计语言)的特性。实现(即程序设计语言)的特性。输入输入/输出说明部分常用的形式有输出说明部分常用的形式有 READ/WRITE TO 或或 ASK ANSWER 后一种形式多用于人机交互部分的设计。后一种形式多用于人机交互部分的设计。软件设计阶段的输出主要是设计规格说明书:软件设计阶段的输出主要是设计规格说明书:第一节:描述与设计活动有关的各个方面,该节第一节:描述与设计活动有关的各个方面,该节中许多信息取自系统规格说明书和系统定义阶中许

55、多信息取自系统规格说明书和系统定义阶段产生的其他文档。段产生的其他文档。第二节:具体指明引用信息的出处。第二节:具体指明引用信息的出处。第三节:设计描述,是概要设计的产物,此时设第三节:设计描述,是概要设计的产物,此时设计由信息驱动,即软件总体结构主要受数据流计由信息驱动,即软件总体结构主要受数据流程、数据结构的影响,需求分析时产生的程、数据结构的影响,需求分析时产生的DFD或其他某种形式的数据表示将在这一节中进一或其他某种形式的数据表示将在这一节中进一步精化,用于确定软件结构。当信息流程确定步精化,用于确定软件结构。当信息流程确定后,界面亦可作为整个软件的一部分进行描述。后,界面亦可作为整个

56、软件的一部分进行描述。第四、五两节是概要设计向详细设计过渡后形成的。第四、五两节是概要设计向详细设计过渡后形成的。第四节:模块指软件中可单独编址的部件,如函数和第四节:模块指软件中可单独编址的部件,如函数和过程,最初用自然语言描述它们的功能,随后采用过程,最初用自然语言描述它们的功能,随后采用某种过程设计工具将这些自然语言描述转换为结构某种过程设计工具将这些自然语言描述转换为结构化描述。化描述。第五节:主要描述数据组织结构,包括辅存的文件结第五节:主要描述数据组织结构,包括辅存的文件结构、全局数据(例如构、全局数据(例如FORTRAN公共区)的赋值以公共区)的赋值以及这些文件与全局数据的交叉访问关系。及这些文件与全局数据的交叉访问关系。第六节:是与需求规格说明书的交叉访问表,根据交叉第六节:是与需求规格说明书的交叉访问表,根据交叉访问表可断定设计是否满足所有需求,这对于完成某访问表可断定设计是否满足所有需求,这对于完成某个具体需求的模块来说十分重要。个具体需求的模块来说十分重要。第七节:是测试的初步计划。一旦软件结构和模块间界第七节:是测试的初步计划。一旦软件结构和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论