软件工程第四章-2(软件设计)
软件工程第4章 软件设计PPT课件

A B
(1)顺 序 型
S F
P T
(4)后 判 定 循 环 (D O -U N T IL )
F
T
P
A
B
(2)选 择 型
F P T S
(3)先 判 定 型 循 环 (W H IL E -D O )
T
P=1
A1
F
T
P=2
A2
F
T
P=n
An
F
(5)多 情 况 选 择 型 (C A S E 型 )
A B
确定事务中心 和加工路径 事
务 分 析 映射成事务结构
“变换”
确定逻辑输入/输 变 出和变换中心 换 分 析
映射成变换结构
用启发式规则 精化软件结构
导出接口描述 和全程数据结构
未通过 复查
通过 详细设计
详细设计的过程中应遵循一下原则。 1.保证模块的逻辑描述要清晰易读、正确可靠。 2.采用结构化程序设计(Structured Programming) 方法,改善控制结构,降低程序的复杂程度,从 而提高程序的可读性、可测试性、可维护性。 3.选择恰当描述工具来描述各模块算法。
题域子系统、人机交互子系统、任务管理子系统和数据管理子 系统4个子系统组成。
任务也称进程,就是执行一系列活动的一段程序。当系统 中有许多并发任务时,需要依照各个行为的协调关系进行 任务划分,所以任务管理主要是对系统各种任务进行选择 和调整的过程。要标识任务管理子系统中的任务。
1.标识事件驱动任务 2.标识时钟驱动任务 3.标识优先任务 4.标识关键任务 5.标识协调任务
设计数据管理子系统设计数据管理子系统11数据存储格式的设计数据存储格式的设计22数据存放服务的设计数据存放服务的设计服务的算法设计与一般的软件算法的设计并无不同只是服务的算法设计与一般的软件算法的设计并无不同只是在设计过程中可能需要添加一些内部类和内部操作增加在设计过程中可能需要添加一些内部类和内部操作增加的新类主要用来存放在算法执行过程中所得出的某些中间的新类主要用来存放在算法执行过程中所得出的某些中间结果
软件工程课件第四章

2020/5/20
信息科学与技术学院
6
制定测试计划
确定对各模块和系统联调的测试方案。 在软件开发的早期阶段考虑测试问题,
能促使软件设计人员在设计时注意提高 软件的可测试性 。
2020/5/20
信息科学与技术学院
7
书写文档
1.系统说明:概要设计说明书 2.用户手册 3.测试计划 4.详细的实现计划 5.数据库设计结果
第一,有效的模块化(即具有独立的模块)的软件比较容 易开发出来。
第二,独立的模块比较容易测试和维护。 模块的独立程度的度量标准:
内聚:衡量一个模块内部各个元素彼此结合的紧密程度; 耦合:衡量不同模块彼此间互相依赖(连接)的紧密程度。
2020/5/20
信息科学与技术学院
19
模块独立 – 耦合
耦合是对一个软件结构内不同模块之间互联程度的度量。 耦合强弱取决于模块之间接口的复杂程度,调用模块的方式, 以及通过接口的数据。实际上,耦合是接口数据对模块独立 性的影响。
2020/5/20
信息科学与技术学院
14
采用模块化的依据
容易被理解。 使问题复杂度降低,容易被实现。
设函数C(x)定义问题x的复杂程度,函数E(x) 确定解决问题x需要的工作量(时间),对于两个问题 p1和p2,如果
C(p1)> C(p2) 则: E(p1)> E(p2) 规律: C(p1+p2)> C(P1) + C(p2) 必有: E(p1+p2)> E(p1)+ E(p2)
如果两个模块中的每一个都能独立地工作而不需要另一个 模块地存在,那么它们彼此完全独立,这意味着模块间无任 何连接,耦合程度最低。但一个软件系统中的模块之间是彼 此协同工作的,不可能所有模块间没有连结。
软件工程第4章 软件设计

5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统,顶层模块调用它 的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能。
6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师 应该在需求分析阶段所确定的系统数据需求的基础 上,进一步设计数据库。
高内聚也有两类:如果一个模块内的处理元素和同 一个功能密切相关,而且这些处理必须顺序执行 (通常一个处理元素的输出数据作为下一个处理元 素的输入数据),则称为顺序内聚。根据数据流图 划分模块时,通常得到顺序内聚的模块,这种模块 彼此间的连接往往比较简单。如果模块内所有处理 元素属于一个整体,完成一个单一的功能,则称为 功能内聚。功能内聚是最高程度的内聚。
(2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果
9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。
为什么模块的独立性很重要呢?主要有两条理由: 第一,有效的模块化(即具有独立的模块)的软件比 较容易开发出来。这是由于能够分割功能而且接口 可以简化,便于多人分工合作开发同一个软件。
第二,独立的模块比较容易测试和维护。这是因为 相对说来,修改设计和程序需要的工作量比较小, 错误传播范围小,需要扩充功能时能够“插入”模块。
(2)详细设计。详细设计阶段的根本目标是确定 应该怎样具体地实现所要求的系统,也就是说,经 过这个阶段的设计工作,应该得出对目标系统的精 确描述,从而在编码阶段可以把这个描述直接翻译 成用某种程序设计语言书写的程序。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,结果基本上决定了最终 的程序代码的质量。
软件工程第四章软件设计

软件工程第四章软件设计
软件设计与软件需求之间的关系:
数 据
加 工
对 象
体实 关
数 据
规 格
描
系
数据词典 流
说
述
图
图明
状态转换图 控 制 规 格说明
过程设计 接口设计 体系结构设计 数据设计
X2=(-b-sqrt(b2-4ac))/2a
软件工程第四章软件设计
设计时对模块内聚性的选择
➢ “一个模块,一个功能”是模块化设计的一条准则, 也是设计人员争取的目标。
➢ 功能性内聚模块是最理想的。 ➢ 中、高内聚的模块也可使用。 ➢ 低内聚模块的可维护性和可复用性差,设计时应
尽量避免使用。
软件工程第四章软件设计
学生数据
➢ 数据流:在调用关系线的旁边 学号
用命名的箭头表示
无此学生
➢ 选择调用: ➢ 循环调用:
读学生记录
软件工程第四章软件设计
(5)变换分析方法
5.1)划分边界 5.2)第一级分解(建立初始SC框架)
软件工程第四章软件设计
5.3)第二级分解(建立每个分支的下级模型)
传入分支的分解
加工中心的分解
—— 设计是所有后续工作的指南,编码实 现必须以设计为前提和基础。
软件工程第四章软件设计
4.2 软件设计的基本概念和原理
1)模块化
➢ 模块化就是将大型软件按照规定的原则划分解 成一个个较小的、相对独立的但又相互关联的 模块的设计方法。
➢ 将系统分解成模块、对象和构件等组成部分。 在传统的软件工程中用分解来实现模块化设计; 在OO软件工程中,靠分解来划分类和对象。
软件工程PPT课件第4章 软件设计

控制结构(程序结构)
深 度
(模块的 层数)
(一个模块
扇出 直接调用
的模块数)
扇入(块调的用模一块个个给数定)模
宽度
(同一层最大模块数)
例子:扇出
计算 实发工资
煎饼形结构 不可取!
取得 工资数据
计时制 工资额
薪金制 工资额
编外人员 税收 工 资 扣款
编外人员 常规 税 收 扣款
编外人员 扣款
例子:扇出
控制规约
分析模型
过程设计
接口设计 体系结构设计
数据设计
设计模型
将分析模型转换为软件设计
上图中通过数据、功能和行为模型展示的软件 需求被传送给设计阶段,选择其中的设计方 法,设计阶段产生出: 数据设计:将分析时创建的信息域模型变 换成实现软件所需的数据结构。 体系结构设计:定义程序的主要结构元素之 间的关系。 接口设计:描述了软件内部、软件和协作系 统之间的以及软件同人之间如何通信。 过程设计:将程序体系结构元素变换为对软 件构件的过程描述。
模块1
模块2
数据耦合
特征耦合(参数表 传递数据结构)
模块3
模块4
接口复杂性与耦合类型的关系:
直接引用 接口方式 过程调用语句
内容耦合 基本耦合
数据项作参数
接
口 复 接口数据
数据结构,变 量名作参数
杂 的复杂性 性
开关量,起 控制变量作用
I/O
数据耦合 标记耦合 控制耦合 外部耦合
全程变量公用数据区
将标记耦合修改为数据耦合举例
计算水电费
本月 用水量
本月
水费
用电量
电费
计算水费
计算电费
(4) 控制耦合
软件工程 第四章 概要设计

第4章
4.4 模块的独立性
15
4.4.1 耦合性(Coupling)
5.外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为 外部耦合。 6.公共耦合
若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据
4
4.2.1 概要设计的任务
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档;
(4)评审概要设计文档。
第4章
4.2 概要设计的任务与步骤
5
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构
4.数据结构及数据库设计
(2)一个模块不通过正常入口而直接转入到另一个模块的内部;
(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能); (4)一个模块有多个入口。
第4章
4.4 模块的独立性
17
4.4.2 内聚性(Cohesion)
一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只
完成一个功能,模块设计的目标之一是尽可能高内聚。
第4章
4.4 模块的独立性
21
4.4.2 内聚性(Cohesion)
5.通信内聚
指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的 输入数据或产生相同的输出结果。
第4章
4.4 模块的独立性
22
4.4.2 内聚性(Cohesion)
《软件工程实用教程》第4章_结构化软件设计

《软件工程实用教程》第4章_结构化软件设计《软件工程实用教程》第 4 章:结构化软件设计在软件工程领域,结构化软件设计是构建可靠、高效软件系统的关键环节。
它为软件的开发提供了一种清晰、有条理的方法,有助于提高软件的质量、可维护性和可扩展性。
结构化软件设计的核心思想是将一个复杂的软件系统分解为若干个相对独立、功能明确的模块,并通过清晰的接口定义这些模块之间的关系。
这种分解和模块化的方法使得软件开发过程更加可控,也便于团队成员之间的分工协作。
在进行结构化软件设计时,首先要明确软件系统的需求。
这包括对系统功能、性能、安全性等方面的要求。
只有充分理解了需求,才能为后续的设计工作奠定坚实的基础。
模块划分是结构化软件设计的重要步骤。
一个好的模块应该具有高内聚、低耦合的特点。
高内聚意味着模块内部的元素紧密相关,共同完成一个特定的功能;低耦合则表示模块之间的相互依赖程度较低,这样当一个模块发生变化时,对其他模块的影响最小化。
例如,在一个学生管理系统中,可以将学生信息管理、课程管理、成绩管理等划分为不同的模块,每个模块专注于自己的核心业务。
在模块划分的基础上,需要定义模块之间的接口。
接口就像是模块之间的“桥梁”,规定了模块之间传递数据和控制信息的方式。
清晰、简洁的接口设计能够提高模块之间的通信效率,减少错误的发生。
比如,在上述学生管理系统中,学生信息管理模块和成绩管理模块之间的接口可以定义为学生的学号,通过学号来传递学生的相关信息。
结构化软件设计还注重控制结构的设计。
常见的控制结构包括顺序结构、选择结构和循环结构。
合理地运用这些控制结构,可以使软件的流程更加清晰、逻辑更加严密。
以一个简单的登录功能为例,首先需要输入用户名和密码,然后进行验证,如果验证成功则进入系统,否则提示错误信息。
这就是一个典型的顺序和选择结构的组合。
另外,数据结构的设计也是不容忽视的一部分。
选择合适的数据结构可以提高数据的存储和访问效率。
比如,对于频繁查找和插入操作的数据,可以使用二叉搜索树或哈希表等数据结构。
《软件工程》第4章软件总体设计

《软件工程》第4章软件总体设计软件总体设计是软件工程的一个重要环节,它涉及到软件系统的整体结构和架构的定义,以及软件模块之间的关系和接口的设计。
软件总体设计的目标是确保软件系统能够满足用户需求,并且具有高性能和可扩展性,同时保证系统的可维护性和可测试性。
软件总体设计的过程包括以下几个步骤:1.确定系统的功能需求:根据用户需求和系统分析的结果,定义系统应该具备的功能和特性。
2.划分系统结构:将系统划分为多个模块和子系统,确定各个模块之间的关系和层次结构。
3.定义模块接口:对每个模块定义清晰的接口,包括输入参数、输出参数和功能描述,以便模块之间的协作和集成。
4.设计系统架构:选择合适的架构风格和模式,确定系统的整体结构和组成,包括数据流、控制流和模块之间的通信。
5.设计数据结构和算法:根据系统需求和性能要求,设计合适的数据结构和算法,以满足系统的功能和性能要求。
6.设计系统界面:设计系统与用户和外部系统的界面,包括图形界面、命令行界面和数据交换接口。
7.考虑系统安全性和可靠性:在设计阶段考虑系统的安全性和可靠性需求,设计对应的安全和可靠性机制。
8.进行评审和验证:对软件总体设计进行评审和验证,确保设计的可行性和完整性。
软件总体设计的核心是系统架构设计,系统架构设计要考虑系统的功能需求、性能要求、可扩展性、可维护性、可测试性等因素。
常用的软件架构风格包括层次架构、客户端-服务器架构、分布式架构、面向服务的架构等。
选择合适的架构风格可以提高系统的灵活性和可维护性。
在软件总体设计过程中,还需要考虑到软件的适应性和可移植性。
软件应该能够适应不同平台和操作系统的要求,并能够方便地移植到其他环境中。
为了提高软件的可移植性,可以采用标准化的接口和协议,避免使用具体的硬件和操作系统依赖。
此外,软件总体设计还需要考虑到系统的可维护性和可测试性。
软件系统通常需要进行修改和维护,因此设计时需要考虑到系统的可扩展性和模块之间的解耦。
软件工程第四章-2

软件工程第四章-2在软件工程的领域中,第四章往往聚焦于一些关键的概念和技术,而这其中的 2 部分或许涉及到了特定的核心要点。
当我们谈论软件工程时,我们实际上是在探讨如何有效地组织和管理软件开发的过程。
这不仅仅是关于编写代码,更是关于如何在有限的时间、资源和预算内,交付一个满足用户需求、质量可靠且易于维护的软件产品。
在这一章节中,可能会涉及到软件设计的原则和模式。
软件设计就像是为一座大厦绘制蓝图,它决定了软件的架构、模块划分以及它们之间的交互方式。
良好的设计原则能够让软件具有高内聚、低耦合的特性,使得各个模块能够独立工作,又能协同合作,从而提高软件的可维护性和可扩展性。
比如说,单一职责原则告诉我们,一个模块应该只负责一项明确的任务。
这样一来,如果出现问题,我们能够迅速定位到相关的模块进行修改,而不会牵一发而动全身。
还有开闭原则,它强调软件实体应该对扩展开放,对修改关闭。
这意味着我们应该通过添加新的代码来实现新的功能,而不是频繁地修改现有的代码,从而减少引入新错误的风险。
另一个重要的方面可能是软件测试策略。
软件测试是确保软件质量的关键环节,它帮助我们发现潜在的缺陷和错误。
在这部分中,可能会介绍不同类型的测试,如单元测试、集成测试、系统测试和验收测试。
单元测试专注于对软件中的最小可测试单元进行测试,通常是一个函数或一个类。
通过编写单元测试,可以确保每个独立的部分都能按照预期工作。
集成测试则是检查各个模块组合在一起时是否能正常运行。
系统测试会从整个系统的角度来评估软件的性能、功能和兼容性。
而验收测试则是由用户或客户来确认软件是否满足他们的需求。
此外,版本控制也是软件工程中不可或缺的一部分。
版本控制系统能够帮助开发团队有效地管理代码的变更历史,使得多人协作开发变得更加有序和可控。
当出现问题时,我们可以轻松回滚到之前的稳定版本,同时也便于跟踪和比较不同版本之间的差异。
在实际的软件开发过程中,团队协作和沟通也至关重要。
软件工程第4章 软件设计

软件工程第4章软件设计在软件工程的领域中,软件设计是一个至关重要的阶段。
它就像是为一座即将拔地而起的大楼绘制详细的蓝图,决定了软件的架构、功能模块的划分以及它们之间的交互方式。
这一阶段的工作质量直接影响着软件的质量、可维护性和可扩展性。
软件设计的首要任务是明确软件的需求。
这意味着要对用户的期望和业务需求有清晰的理解。
只有这样,才能确保设计出来的软件能够真正满足用户的需求,解决实际的问题。
在这个过程中,开发团队需要与用户、业务分析师等进行充分的沟通,收集各种信息,梳理出软件需要实现的功能、性能要求、安全标准以及用户界面的特点等。
接下来,就是架构设计。
这是软件设计的核心部分,它决定了软件的整体结构和框架。
一个好的架构应该具备高内聚、低耦合的特点。
高内聚意味着一个模块内部的元素紧密相关,共同完成一个特定的功能;低耦合则表示不同模块之间的依赖关系尽量少,这样当一个模块发生变化时,对其他模块的影响最小。
比如,在一个电子商务网站中,用户管理模块、商品管理模块和订单管理模块就应该是低耦合的,它们各自负责自己的业务逻辑,相互之间的干扰较小。
在进行架构设计时,还需要考虑软件的可扩展性。
随着业务的发展和用户需求的变化,软件需要能够方便地进行功能的增加和修改。
这就要求在设计时预留一定的扩展接口和灵活性。
比如,采用微服务架构,将一个大型的应用拆分成多个小型的服务,每个服务可以独立开发、部署和扩展,这样就大大提高了软件的适应性。
模块设计也是软件设计中不可或缺的一部分。
在确定了软件的架构之后,需要将其划分为一个个功能明确的模块。
每个模块都应该有清晰的职责和边界,模块之间通过定义良好的接口进行通信。
比如,在一个在线学习平台中,课程管理模块负责课程的创建、更新和删除,而学习记录模块则负责记录学生的学习进度和成绩,它们通过特定的接口进行数据的交互。
在软件设计中,数据结构和算法的选择也非常关键。
合适的数据结构可以提高数据的存储和访问效率,而优秀的算法则可以提高软件的运行性能。
软件工程第四章

软件工程第四章在软件工程的世界里,每一个章节都像是一座山峰,等待着我们去攀登,去探索其中的奥秘。
而第四章,往往是一个关键的转折点,它为整个软件开发的流程注入了新的活力和深度。
软件工程第四章,通常聚焦于软件设计的核心概念和方法。
软件设计,这可不是一件轻松的事儿。
它就像是为一座即将拔地而起的大楼绘制蓝图,每一条线条、每一个标注都至关重要,直接决定着这座大楼的结构是否稳固,功能是否完善。
在这一章节中,首先要提到的是结构化设计。
这一方法强调将复杂的系统分解为若干个相对简单的模块,每个模块都有明确的功能和接口。
通过这样的分解,开发人员能够更加清晰地理解整个系统的架构,从而有效地进行开发和维护。
想象一下,一个庞大的软件系统就像一个错综复杂的迷宫,如果没有合理的结构化设计,我们很容易在其中迷失方向。
而面向对象设计则是另一个重要的理念。
它把软件中的各种元素都看作是具有特定属性和行为的对象,通过对象之间的交互来实现系统的功能。
这种设计方法更加贴近现实世界的思维方式,使得软件的设计更加直观和易于理解。
比如,我们可以把一辆汽车看作一个对象,它有颜色、型号、速度等属性,还有启动、加速、刹车等行为。
软件架构设计也是第四章的重点之一。
这涉及到确定整个软件系统的高层结构,包括各个组件之间的关系、数据的流动以及系统的可扩展性等。
一个良好的软件架构就像是一座城市的规划图,它决定了城市的发展方向和潜力。
如果架构设计不合理,随着软件功能的不断增加,系统可能会变得越来越混乱,难以维护和扩展。
在软件设计过程中,还需要充分考虑用户需求和用户体验。
毕竟,软件最终是要为用户服务的,如果不能满足用户的需求,再精妙的设计也无济于事。
这就要求开发人员与用户进行充分的沟通,了解他们的期望和痛点,从而设计出真正实用、易用的软件。
同时,设计的可维护性和可扩展性也是不容忽视的。
随着技术的不断进步和业务需求的变化,软件需要不断地进行更新和改进。
如果在设计之初没有考虑到这些因素,那么后续的维护和扩展工作将会变得异常艰难,甚至可能需要对整个系统进行重构。
《软件工程实用教程》教学课件4-软件设计(2)

任务3 设计界面
在需求分析阶段我们已经接触到采用快速原型的 方式来获取和明确用户的需求,在设计阶段我们 已经基本上掌握了用户的想法,需要根据需求规 格说明书中提到的信息构建和明细系统实现的界 面,那么,在用户界面构建的过程中,除了确定 界面中所包含的界面信息外,还有哪些方面是我 们需要注意的呢?
任务4 描述算法
通过概要设计阶段所获得的软件体系结构,我们 已经了解了系统内部基本的组成形式及模块间的 调用关系,下面我们需要深入到模块内部,去探 寻一下每个模块具体的实现策略,那么,可以采 用什么样的方式来对模块内部实现策略进行描述 呢?
18
1 详细设计
详细设计
详细设计也称为构件级设计或过程设计。 在数据设计、体系结构设计和接口设计完成之后进行。 其意图是将设计模型翻译为可以运行的软件。 构件级设计建立起操纵数据结构,影响软件构件间通过
软件工程
第四章 软件设计(2)
任务2 构建数据库
数据设计 数据结构设计 数据库设计
任务3 设计界面 任务4 描述算法
详细设计 详细设计工具
2
任务2 构建数据库
在分析图书管理系统的过程中出现了很多与业务 相关的数据流、数据存储、数据实体等数据表现 形式。这些数据在系统实现过程中都需要使用到 并需要体现出来的。例如,数据存储本身是一种 静态数据的表示方式,就意味着在系统中需要持 久化这些数据。数据库往往是持久化数据的常用 方法。那么,这些数据应该以什么样的形式进行 组织,又应该怎样表达出来呢?
根据规则,下面的实体和联系就很容易转换成了上述对应的关系 数据模型:
① 学生 (学号,姓名,性别,出生日期,籍贯) ② 课程 (课程编号,课程名,学时,学分,教材名称) ③ 教师 (教师编号,教师姓名,性别,出生日期,职称,学历,
软件工程课件第四章精品文档

2019/10/15
信息科学与技术学院
18
模块独立
模块独立(Independence)的概念是模块化、抽象、信 息隐蔽和局部化概念的直接结果。开发具有独立功能且与其 他模块之间没有过多的相互作用的模块,就可以做到模块独 立。
如果两个模块中的每一个都能独立地工作而不需要另一个 模块地存在,那么它们彼此完全独立,这意味着模块间无任 何连接,耦合程度最低。但一个软件系统中的模块之间是彼 此协同工作的,不可能所有模块间没有连结。
2019/10/15
信息科学与技术学院
20
模块独立 – 耦合
数据耦合 :如果两个模块彼此间通过参数交 换信息,而且交换的信息仅仅是数据,那么这种 耦合称为数据耦合。
模块的内部特性:完成模块功能的代码和局部数据。
2019/10/15
信息科学与技术学院
13
模块化
模块化:以模块作为程序设计的基本单位,把程序划分 成若干个模块,每个模块完成一个子功能,把这些模块集总 起来,并通过模块间的调用关系把它们组成一个完整的整体, 完成指定的功能。
采用模块化的依据: 容易被理解。 使问题复杂度降低,容易被实现。
信息科学与技术学院
22
模块独立 – 内聚
内聚是一个模块内各个元素彼此结合的紧 密程度的度量。内聚是信息隐蔽功能的自然扩 展,是模块内部功能独立性的表现,理想内聚 的模块只做一件事情。
按程度分类:低内聚 中内聚 高内聚。
20前1一9/页10/15
信息科学与技术学院
23
模块独立 – 内聚
软件设计第4章第2节

§4.2 架构设计
4.2.2 物理视图 将逻辑结构映射为物理节点。销售收款采用 的三层体系结构。所以需要三个节点 Client节点:部署的是界面层 CashServer节点:部署的业务逻辑层、公 共服 架构设计
销售收款部署图
§4.2 架构设计
4.2.3 编写架构设计说明书
§4.2 架构设计
4.在架构设计过程中,需要说明以下几点: (1)架构模式不是越新越好,好的架构模 式是经过企业多年实践总结出来的,经过验 证的,所以应选择这样的架构模式。 (2)架构主要解决非业务功能需求,比如 软件的分解,公共服务元素的提取等。 (3)有必要在架构设计时,需要对关键用 例进行分析、设计来验证架构
软件设计
第4章 系统业务功能设计
§4.2 架构设计
3.2.1 逻辑视图 1.三层体系结构
§4.2 架构设计
2.三层架构模式
§4.2 架构设计
3.设计公共服务层 在架构设计阶段,架构师通过对核心用例 (高级别的用例)进行分析设计,提取出各 个用例设计需要的公共元素,然后进行公共 元素进行分析与设计,形成一个公共访问的 平台。例如:日志管理、统一用户认证管理、 消息管理、枚举类管理、异常处理管理、数 据访问管理等需求,就是公共服务层中的一 部分。第3章已经对登录、日志管理、数据 访问管理等进行公共服务类设计
软件工程第四章

软件工程第四章在软件工程的广袤领域中,第四章往往聚焦于软件设计的核心环节。
软件设计就像是为一座高楼大厦绘制蓝图,它决定了软件的架构、模块划分以及各个部分之间的交互方式。
首先,我们来谈谈软件设计的目标。
其首要目标是满足用户的需求。
这听起来似乎是一句老生常谈的话,但却是软件开发的根本出发点。
只有深入理解用户的期望和使用场景,才能设计出实用、易用的软件。
在软件设计中,架构设计是至关重要的一环。
一个良好的架构就如同大楼的框架结构,它要能够支撑起整个软件系统的运行。
架构的选择会受到多种因素的影响,比如软件的规模、性能要求、可扩展性需求等。
对于小型软件项目,可能采用简单的单层架构就能满足需求。
但对于大型、复杂的系统,可能需要多层架构,如表示层、业务逻辑层和数据访问层等。
多层架构的好处在于可以将不同的功能清晰地分离,便于开发、维护和扩展。
模块划分是软件设计中的另一个关键要点。
将一个大型软件系统分解为多个独立的模块,每个模块都有明确的职责和功能。
这样做不仅可以提高开发效率,还便于团队成员之间的分工协作。
模块之间的接口设计也不容忽视。
清晰、简洁、稳定的接口可以确保模块之间的通信顺畅,减少错误和冲突。
就像不同房间之间的门,如果门的尺寸不合适或者开关方式不清晰,就会导致通行的困难。
在软件设计过程中,还需要考虑性能优化。
比如,选择合适的数据结构和算法来提高软件的运行效率。
对于频繁访问的数据,采用缓存机制可以大大减少数据的读取时间。
同时,软件的安全性也是设计中必须考虑的因素。
防止数据泄露、保护用户隐私、抵御网络攻击等都需要在设计阶段就进行规划和预防。
可维护性也是软件设计的一个重要目标。
一个易于维护的软件可以降低后期的维护成本,提高软件的生命周期。
这就要求代码具有良好的可读性、可理解性和可修改性。
软件设计并非一蹴而就,而是一个不断迭代和优化的过程。
在开发过程中,可能会发现原设计存在的不足或者新的需求变更,这时候就需要及时对设计进行调整和改进。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由事务分 析产生
接受模块
动作调度模块
动作1模块 动作2模块 动作3模块
软件结构图的六种模块类型
• ⑴ 传入模块 从下属模块传入数据X,经处理后返回给上级模块数据流 Y。它传送的数据流叫做逻辑输入数据流。
Y 模块名 X
数据流
控制流
箭头尾部是空心圆表示传递的是数据,否则表示传递的是 控制信息。为了绘图简便本讲义后面暂且全部用普通箭头
DE FJ EH
k 输出K k
L
L
HK
KL 输出L
事务子系统
L
m
m
LM 输出M
混合流设计
订货输入
订货处理
提货发票
读入数据
判别
进货输入
库存修改
进货票据
订单记录
分析统计
生成统计表
映射成
4.5.3 体系结构设计优化
将初始SC根据模块独立性原 则进行优化,对模块进行合并、分 解修改、调整,得到高内聚、低 耦合模块,得到易于实现、易于 测试和易于维护的软件结构,产 生设计文档的最终SC。
事务流设计
查询 事务1
事务2
有效 事务
有效 事务
更新事务
v
存款 取款
更新事务
w
审计信息
事务选择 确定事
事务3
有效 事务
务类型
更新事务
x
事务4
审计 记录
事务5
转账
有效 事务
更新事务
y
映射成
修改密码
有效 事务
更新事务
z
ATM机处理事务主控
分析器
调度器
ATM机系统结构
转账 修改密码
事务选择
查询
存款
取款
审计记录
打包指用来为特定环境组装软件的 技术
4.5.4 层次图和HIPO图
IBM公司发明的HIPO图:
层次图 + 输入 / 处理 /输出图 ( H图 ) (IPO图)
(Hierachy Input Process Output)
1.
层次图(H图)
表示软件的层次结构
正文加工系统
输入 输出 编辑 加标题
存储 检索 编目录
3、变换分析设计方法
步骤:
(1)区分传入、变换中心、 传出部分,在 DFD 上 标明分界线
a A
B
b
变换中心
C
传入 部分
c r P
w
W
传出 部分
d e D E
R p Q u
v U V
从数据流程图的物理输入端开始,向系 统的中间移动,一直到某个数据流不再 被看作是系统的输入为止,这个数据流 的前一个数据流就是系统的逻辑输入。 同理从物理输出端开始,向系统的中间 移动,就可以找到软件的逻辑输出。 在输入部分和输出部分之间的就是中心 变换部分。
(4) 减少高扇出争取高扇入
高扇出的模块结构举例: 计算实发工资
取得 计时 薪金 编外 税收 编外 常规 编外 工资 制工 制工 人员 人员 人员 数据 资额 资额 工资 扣款 税款 扣款 扣款
避免平铺结构
增加中间层降低扇出
计算实发工资
取得工 计时工人 计薪工人 资数据 实发工资 实发工资 编外人员 实发工资
1. 程序流程图
2. 盒图(N-S图) 3. 问题分析图(PAD) 4. 过程设计语言(PDL)(伪码)
5. 判定表
2. 盒图(N-S图)
用方框图代替传统的流程图
描述五种基本控制结构的图形构件
(1) 顺序型
A B C
(2) 选择型(If – then – else)
If – then – else F If – then F
改进软件结构设计的指导原则
(软件结构设计的启发式规则)
(1) 模块功能的完善化
完整的模块应包括三部分:
(1)执行规定功能部分
(2)出错处理部分
(3)需返回给调用者数据时, 返回是否正确结束标志。
(2)消除重复功能
X
Q1
Y
Q2
X
Y
Q’
X
Q1
Y
Q2
C C
重复部分
改进前 Q1、Q2功 能相似
改进方法1: C 将Q1、Q2 改进方法 2 : 合并为Q’ 将 Q1 、 Q2 的公共 不可取
条件
T
条件
T
B
A
A
then –部分
else–部分 then –部分
(3)多分支选择型(CASE型)
条件 值1 值2
....
值n
A1 A2 .... An
(4) WHILE重复型 (5) UNTIL重复型 (后测试循环) (先测试循环)
DO-WHILE P
系统: 模块: 编号:
IPO图
作者: 日期:
被调用: 输入:
调用: 输出:
输入: 局部数据元素:
注释:
§4.6详细设计(过程设计、模块设计)
主要任务:编写详细设计说明书 为此,设计人员应: (1)确定每个模块的算法,用工具 表达算法的过程,写出模块的 详细过程性描述。 (2)确定每一模块的数据结构。 (3)确定模块接口细节。 详细设计是编码的先导。
Q
R
ME2
传入分 支模块
中心加工 分支模块
传出分 支模块
变换分析设计方法步骤
(3)第二级分解(分解SC各分支)
自顶向下分解,设计出每个分支 的中、下层模块
完成第二级分解的方法是,从变换中心
的边界开始沿着输入通路向左移动,把 输入通路中每个处理逻辑映射成软件结 构中MA控制下的一个低层模块; 然后沿输出通路向右移动,把输出通路 中每个处理逻辑映射成直接或间接受模 块ME控制的一个低层模块; 最后把变换中心内的每个处理映射成受 MT控制的一个模块。
4.6.1 结构化程序设计(SP)方法 传统的设计技术和旧观念:
设计的随意性,具有浓厚的个人色彩. 追求程序效率和个人设计技巧
新的设计思想和风格:
清晰第一
使用标准的、规范的控制结构
逐步细化
4.6.2 详细设计的描述方法
详细设计工具: (1) 图形工具 (2) 表格工具 (3) 语言工具
模块调用的表示(续)
⑵ 选择调用
表示判定条件。 A
B
B C D
模块A 中某个判定为真时调用模块B, 为假时不调用。
C
D
模块A 中某个判定为真时调用模块C, 为假时调用模块D。
模块调用的表示 (续)
⑶ 循环调用
A A
B
C
B
C
D
模块A根据内部循环条件,重复调用B、C模块, 直至内部出现满足循环终止条件为止。
计时 税收 薪金 常规 制工 制工 资额 扣款 资额 扣款
编外 编外 编外 人员 人员 人员 工资 税款 扣款
设计良好的软件结构应该是 顶层扇出比较高,中间扇出 较少,底层扇入到高扇入的 公共模块,有点类似于橄榄 过大:可理解程度下降 模块过小:开销大于有效操作 系统接口复杂
航线调度系统HIPO图举例 H 图: 命令监控器
1.0
取得输入 1.1
输入确认 1.2
请求确认 1.3
更新处理 1.4
传统的IPO图举例
输入
读口令请求 口令文件 权限文件
处理
1取得输入 2口令确认 3请求确认 4更新处理
输出
请求记录
权限记录 状态报告
响应
命令监控器(1.0)的IPO图
改进的IPO图格式
事务分析设计方法步骤:
(1)在DFD上确定事务中心、接收部 分和发送部分。 (2)画出SC框架,把DFD上的三部分 分别映射为事务控制模块、接收 模块和动作调度发送模块。 (3)分解细化接收分支和发送分支, 完成初始SC。
接收 路径
总控 调度
A路径
B路径
C路径
A路径
C路径 B路径
事务分析的映射方法
§4.5概要设计(总体设计)
概要设计确定:
软件系统的结构 各模块功能及模块间联系(接口)
表示软件结构的图形工具
结构图(SC,Structured chart) 层次图和HIPO图
4.5.1 面向数据流的设计方法
(结构化设计方法SD,Structured Design)
1. 面向数据流设计方法的基本概念
„„
活动通路
„„
„„
„„
优化数据流图 面向数据流 方法的设计 “事务” “变换” 流类型 过程
区分事务中心 和数据接收路径 区分输入和 输出分支
映射成事务结构
事务分析
映射成变换结构
变换分析
用启发式设计规则优化软件结构
导出接口描述和全程数据结构 复查
详细设计
初始的SC
主模块
由变换分 析产生
输入模块 主加工模块 传出模块
传 入 分 支 的 分 解
c
C
b
c,e MA
e
E
d
B
a
D
A
传 出 分 支 的 分 解
w,u
ME
w
W
u
U
v
V
中心加工分支的分解
MT
e p
Q
c,p
P
r
u,w r
R
下面设计一个“统计输入文件中单词数目”程序。
文件名
读文 件名
文件名
验证 文件名
有效的 文件名
统计 单词数
单词 格式化 格式化 总数 单词数
添加 删除 插入 修改 合并
列表
带编号的层次图(H图)