软件工程4软件设计.ppt_第1页
软件工程4软件设计.ppt_第2页
软件工程4软件设计.ppt_第3页
软件工程4软件设计.ppt_第4页
软件工程4软件设计.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第4章 软件设计,掌握:概要设计的方法、详细设计的方法、软件设计说明书的规范化编写。,4.1 软件设计概述,4.1.1 软件设计的任务,软件设计的基本目的就是回答“系统应该如何实现?”这个问题。软件设计的任务,就是把分析阶段产生的软件需求说明转换为用适当手段表示的软件设计文档。,1系统结构设计 系统结构设计用于定义软件主要结构性元素之间的关系。系统结构设计表示(即基于计算机的系统的框架)可以从系统规约、分析模型以及分析模型中所定义的子系统的交互中导出。 2数据设计 数据设计用于将分析阶段创建的信息模型,如数据字典、数据流图等,转变为实现软件所需的数据结构。部分数据设计可能和软件系统结构的设计同时发生,但更详细的数据设计活动则会发生在设计每个具体软件构件(或模块)的时候。,3接口设计 接口设计描述软件内部模块之间以及软件与人之间是如何通信的(包括数据流和控制流)。一个接口意味着特定的信息流(如数据流或控制流)以及行为类型,因此,数据和控制流图提供了接口设计所需的信息。 4构件设计 从工程管理的角度来看,传统的软件设计任务通常分两个阶段完成,即概要设计和详细设计。,4.1.2 模块与模块化,在软件系统设计中,模块是一个明确定义的输入、输出和特性的程序实体,通常程序中单独命名且可通过名字访问的过程函数、子程序或宏调用都可看作模块。一般模块具有以下几种特征: (1)接口:模块的输入/输出。 (2)功能:模块实现什么功能,有什么作用。 (3)逻辑:描述模块内部如何实现需求及所需数据。 (4)状态:模块的运行环境,模块间调用与被调用关系。,软件设计应当遵循“模块化”的原则。所谓“模块化”,就是将程序划分成若干个独立的模块的过程,其中,每个模块完成一个特定子功能,每个模块既相对独立,又相互联系,它们共同完成系统指定的各项功能。,4.1.3 抽象与细化,抽象是指从一些事物中抽取其本质的共同的特性,而忽略其非本质细节的差异。 细化是一种先总体、后局部的思维原则,也就是一种逐层分解、分而治之的方法。 模块的“粒度”是指模块的规模。如果模块的规模过大,会使得模块的可重用性差,同时,修改、维护也比较困难。在模块设计中,“细化”与“抽象”的思想极为重要。通过细化,可以将一个大模块分解成若干个小模块;通过抽象,可以将多个模块中的公共部分概括出来,用单独的模块表示,从而降低了模块的粒度。,4.1.4 信息隐蔽,信息隐蔽是在设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的。它通过定义一组独立的模块来实现有效的模块化。信息隐蔽作为一种设计准则用于模块化系统,在测试与维护期间会为软件修改带来极大的好处。,4.1.5 模块的独立性,模块的独立性是指软件系统中的每个模块只涉及软件要求的具体的子功能,应与软件系统中其他模块的接口保持简单化,即模块间的联系不要太多。例如,若一个模块只具有单一的功能,且与其他模块没有太多的联系,那么称此模块具有模块独立性。,1. 耦合,耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。 1)非直接耦合 非直接耦合是指两个模块之间无直接关系,它们之间的联系完全是通过主程序的控制和调用来实现的。非直接耦合的模块间耦合程度最低,即模块独立性最强。,2)数据耦合 数据耦合指的是模块间的通信参数都是数据项。数据是模块间进行信息交流的一种必不可少的联系形式。在模块之间传输的数据项越少,产生的不利影响越少。,图4-1 数据耦合,3)标记耦合 如果两个模块通过参数表传递记录信息,而这个记录是某一数据结构的子结构(如字符串),而不是简单变量 4)控制耦合 控制耦合是指一个模块向另一个模块传送的信息控制了另一个模块的执行。,图4-2 控制耦合,图4-3 控制耦合的修改,5)外部耦合 如果一组模块通过同个全局简单变量相互作用,那么它们之间的耦合称为外部耦合。 6)公共耦合 公共耦合就是一组模块都访问同一全局数据结构。 7)内容耦合 内容耦合是指一个模块直接访问另一模块的内容。,图4-4 7种耦合的耦合性及数据独立性,2. 内聚,内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其他模块之间的耦合性就会减低,而模块独立性也就越强。 1)偶然内聚 如果一个模块的各个部分之间没有联系,或者即使有联系,这种联系也是很松散的,就称为偶然内聚。 2)逻辑内聚 如果把几个逻辑上相关的功能放在同一个模块中,则模块每次被调用时,根据传送给该模块的判定参数来确定模块应执行的功能,就称为逻辑内聚。,3)时间内聚 时间内聚是指一个模块的各个组成部分的处理动作和时间有关。 4)通信内聚 通信内聚是指一个模块内各个组成部分的处理动作都使用相同的输入数据或产生相同的输出数据。 5)顺序内聚 顺序内聚是指一个模块内部的各个组成部分执行的几个处理动作有这样的特征:前一处理动作所产生的输出数据是下一个处理动作的输入数据。 6)功能内聚 功能内聚是指一个模块内部的各个组成部分的处理动作全部都为执行同一个功能而存在,并且只执行一个功能。,图4-5 6种耦合的耦合性及数据独立,4.1.6 自底向上与自顶向下设计策略,采用自顶向下的策略,首先将整个系统分解成子系统,再将子系统分解成更小的子系统,直至分解为能够直接实现的软件模块。 采用自底向上的策略则首先考虑最基本的系统构件和系统的内部函数,然后逐步将这些构件聚合成更大的软件模块、子系统,最终形成整个系统。,4.1.7 结构化设计原则,(1)设计过程应该能够预测和评估。 (2)设计对于分析模型应该是可跟踪的。 (3)设计应该重视资源重用。 (4)设计应该使最终软件尽可能和现实世界中的问题“相似”,也就是说,软件设计的结构应该尽可能地模拟问题域的结构。 (5)设计应该表现出一致性和集成性。 (6)设计应该适应扩展和变更。 (7)设计应该考虑软件的容错性和处理错误、异常的能力。 (8)设计不是编码,编码也不是设计。 (9)在创建设计时就应该能够评估质量,而不是在事情完成之后评估。 (10)应该评审设计,以减少概念性(语义性)错误。,4.2 概要设计,4.2.1 概要设计的基本任务,1. 制定规范,如规定代码体系、接口规约、命名规则等。,2. 总体结构设计,(1)将软件功能转换成模块,规定每个功能用哪些模块实现,保证每个功能都有相应的模块来实现。 (2)决定模块层次结构和模块间的调用关系。 (3)模块间的接口设计决定模块间传递的信息及结构。 (4)用户界面设计。 (5)详细的数据结构设计,如表、索引、文件等。 (6)与算法相关的逻辑数据结构及操作。 (7)其他性能方面的设计。,4.2.2 概要设计的步骤,1. 结构化软件设计方法,结构化软件概要设计的步骤如下: (1)详细阅读需求规格说明书,理解系统建设目标、业务现状、现有系统、用户需求的各功能说明。 (2)分析数据流图,弄清数据流加工的过程。 (3)根据数据流图来决定数据处理问题的类型,一般分为变换型、事务型。 (4)推导出系统的初始结构图。 一般遵循以下步骤: 找出系统底层逻辑输入、主加工和逻辑输出; 设计顶层模块和第一层模块; 对输入、变换、输出模块逐个分解,便可得到初始结构图,(5)对初始结构图进行改进完善:所有的加工都要能对应到相应模块(模块的完整性在于它们完成了需求中的所有加工),消除完全相似或局部相似的重复功能,理清模块间的层次、控制关系,平衡模块大小。 (6)由数据字典导出逻辑数据结构、每种数据结构上的操作,操作应当属于某个模块。 (7)确定系统包含哪些应用服务子系统、客户端、数据库管理子系统。 (8)对每个筛选后的模块进行列表说明。 (9)对逻辑数据结构进行列表说明。 (10)编写概要设计说明书。,2. 面向对象的软件设计方法,使用面向对象的设计方法,首先需要构建软件的体系结构,其过程是:先将系统划分为子系统(可以使用包来描述子系统),根据子系统提供的操作定义它们的接口,然后设计子系统的概念模型。对复杂的子系统,可以继续将其分解,得到更简单的子系统。,3. 结构化软件设计方法和面向对象的软件设计方法之间的比较,(1)从概念方面看,结构化软件是功能的集合,通过模块以及模块和模块之间的分层调用关系实现;面向对象软件是事物的集合,通过对象以及对象和对象之间的通讯联系实现。 (2)从构成方面看,结构化软件过程数据,以过程为中心;面向对象软件(数据相应操作)的封装,以数据为中心。 (3)从运行控制方面看,结构化软件采用顺序处理方式,由过程驱动控制;面向对象软件采用交互式、并行处理方式,由消息驱动控制。,(4)从开发方面看,结构化方法的工作重点是设计;面向对象方法的工作重点是分析。但是,在结构化方法中,分析阶段和设计阶段采用了不相吻合的表达方式,需要把在分析阶段采用的具有网络特征的数据流图转换为设计阶段采用的具有分层特征的结构图,而在面向对象方法中则不存在这一问题。 (5)从应用方面看,相对而言,结构化方法和面向对象的方法均适合数据处理、事务处理软件的开发,但相对而言,结构化方法更适合数据类型比较简单的数值计算软件的开发,面向对象方法则更适合大型复杂软件的开发。,4.2.3 软件结构图,图4-6 成绩管理系统的软件结构图,4.2.4 数据流图,数据流图简称DFD,是采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。,4.3 详细设计,4.3.1 详细设计的基本任务,(1)对每个模块进行详细的算法设计。用某种图形、表格、语言工具将每个模块处理过程的详细算法描述出来。 (2)对模块内的数据结构进行设计。对需求分析、概要设计确定的概念性的数据类型进行确切的定义。 (3)对数据结构进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。 (4)其他设计:为了提高数据的输入、分类、存储、检索等操作的效率,节约内存空间,对数据库中的某些数据项的值要进行代码设计。为了规范系统的输入和输出,还需要进行输入/输出格式设计。对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容、格式的具体设计。 (5)编写详细设计说明书。 (6)评审。对处理过程的算法和数据库的物理结构都要评审。,4.3.2 程序流程图,表4-1 程序流程图的符号说明,图4-7 程序流程图的一个简单例子,4.3.3 盒图,图4-8 盒图的顺序结构,图4-9 盒图的条件结构,图4-10 盒图的While循环结构,图4-11 盒图的Until循环结构,图4-12 盒图的选择结构,图4-13 盒图的端点表示,图4-14 盒图的模块调用,图4-15 盒图表示的一个简单例子,4.3.4 详细设计中的IPO图,IPO图既是需求分析的工具,也是详细设计的工具。它的优点是输入、输出明显,容易被人理解,适合于进行自顶向下设计,有一定的灵活性。另外,使用IPO图开发软件还可以便于人员分工,具有易于测试、纠错等优点。它的缺点是:制作量较大,修改较困难。,4.3.5 PAD图,图4-16 PAD图的常见结构,4.3.6 伪代码,伪代码是一种算法描述语言,它介于自然语言与实际的编程语言之间。相比实际的编程语言而言,伪代码的代码简单、可读性好,但它不可以在实际的编程环境中编译运行。相比自然语言而言,伪代码更容易被转换为实际的程序。一般来说,在软件设计中,一些复杂的算法可以用伪代码来表示。,4.4 软件设计说明书与案例分析,4.4.1 软件设计说明书,1. 概要设计说明书,1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2总体设计 2.1需求规定 2.2运行环境 2.3基本设计概念和处理流程 2.4结构 2.5功能需求与程序的关系 2.6人工处理过程 2.7尚未问决的问题,3接口设计 3.1用户接口 3.2外部接口 3.3内部接口 4运行设计 4.1运行模块组合 4.2运行控制 4.3运行时间 5系统数据结构设计

温馨提示

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

评论

0/150

提交评论