软件工程软设计课件

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