-
2018-03-25 10:22:52
软件的需求分析阶段知道系统要“做什么”,而软件设计阶段我们明白的是“怎么做”。
软件的设计分为:总体设计&&详细设计设计基本原理:
总体设计的任务和过程
总体设计分为:面向数据,面向功能,面向对象的分析
设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)
总体设计图形工具
1.层次图:描述层次结构。
2.HIPO图:在层次图的基础上,把图中除了顶层的方框外都加上编号****基本形式:输入,处理,输出。
3.结构图(SC):表达程序结构图形的表示方法,反映程序模块间的层次关系和联系。
成分:模块,模块间调用关系,通信,辅助控制符号。
结构图的四中类型:传入,传出,变换,协调
结构图VS数据流图
数据流图反映的是程序中数据流的情况
结构图反映的是程序中控制流的情况
结构图VS程序流程图
Battle1:
结构图着重反映模块间的隶属关系,即调用关系和层次关系。
程序流程图表达程序执行的顺序及执行顺序依赖的条件。
Battle2:
结构图着眼于软件系统的总体结构,不涉及内部细节,只考虑模块作用,以及上下级模块关系
程序流程图表达执行程序的具体算法
面向数据流的设计方法
目标:给出设计软件结构的一个系统化途径。
作用:信息流映射成软件结构。
映射的方法由信息流的类型决定
信息流的类型分为两类
1.变换流:信息-->系统-->外换内-->加工-->内换外-->离开。
变换型系统结构图:输入,变换中心,输出。
2.事务流:信息-->输入-->处理-->输入类型选动作-->执行
根据信息流类型,进行不同的分析。
变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构
事务分析:设计步骤跟变换分析类似,不同之处是数据流图到软件结构的映射方式不同。事务流映射的软件结构包括一个接收分支和一个发送分支。
更多相关内容 -
[软件工程] 总体设计(概要设计或初步设计)
2019-09-25 16:37:32第5章 总体设计 5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法 5.6小结及作业 总体设计(概要设计或初步设计)的基本目的就是回答“概括...总体设计
基本目的:“概括回答地说就是,系统应该如何实现?”
工作内容: 将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等黑盒子级“产品”。黑盒子里的具体内容将在以后仔细设计。
重要任务: 是设计软件的结构——模块组成,以及这些模块相互间的关系。
首先根据需求分析阶段得到的数据流图寻找实现目标系统的各种不同的方案,为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且制定实现这个方案的进度计划。选出一个最佳方案向用户推荐。必要性(详细设计之前): 站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,降低成本、提高质量。
一、设计过程
- 系统设计阶段:确定系统的具体实现方案;
- 结构设计阶段:确定软件结构。
(一) 9个步骤
典型的总体设计过程包括下述9个步骤:
1. 设想供选择的方案
- 考虑各种可能的实现方案从中选出最佳
- 根据系统的逻辑模型,分析比较不同的物理实现方案,选出最佳方案,提高系统的性/价比。
- 由需求分析的数据流图作为出发点,把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法,提供可供选择的物理系统。
2. 选取合理的方案
选取低成本、中等成本和高成本的三种方案,对每个合理的方案分析员都应该准备下列4份资料:
(1) 系统流程图;
(2) 组成系统的物理元素清单;
(3) 成本/效益分析;
(4) 实现这个系统的进度计划。3. 推荐最佳方案
推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。
提请使用部门负责人进一步审批之后,将进入总体设计过程的下一个重要阶段——结构设计。4. 功能分解
- 程序和文件(或数据库)是组成系统的主要元素,需要设计决定。
- 对程序的设计通常分为两个阶段完成:结构设计和过程设计。
- 结构设计确定程序由哪些模块组成,以及这些模块之间的关系(总体设计);
- 过程设计确定每个模块的处理过程(详细设计)。
- 为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
- 经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。
- 功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。
5. 设计软件结构
- 通常程序中的一个模块完成一个适当的子功能,将模块组织成良好的层次系统,顶层模块调用下层模块以实现程序的完整功能
- 软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
- 若数据流图细化到适当的层次,则可以直接从数据流图映射出软件结构。
6. 设计数据库
- 对于需要使用数据库的应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。
- 在数据库课中已经详细讲述了设计数据库的方法,本书不再赘述。
7. 制定测试计划
在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
本书第7章将仔细讨论软件测试的目的和设计测试方案的各种技术方法。8. 书写文档
完成的文档通常有下述几种:
- 用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。
- 用户手册根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。
- 测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等等。
- 详细的实现计划
- 数据库设计结果
- 审查和复审
最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。
软件设计工作流程
二、设计原理
(一) 模块化
“模块”,又称“构件” 。
- 过程、函数、子程序和宏等,都可作为模块;面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。模块是构成程序的基本构件。
- 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
- 模块化是为了使一个复杂的大型程序能被人的智力所管理,化繁为简、化难为易、化整为零。
设函数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)
这就是模块化的根据。
(二)抽象
-
抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
-
处理复杂系统的有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。
-
任何问题的模块化时,可提出许多抽象的层次。
在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;
在较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;
最后在最低的抽象层次用可直接实现的方式叙述问题的解法。 -
软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
在可行性研究阶段,软件作为系统的一个完整部件;
在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;
当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;
最后,当源程序写出来以后,也就达到了抽象的最低层。 -
逐步求精和模块化的概念,与抽象是紧密相关的。
软件结构顶层的模块,控制了系统的主要功能并且影响全局;
在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。
(三)逐步求精
逐步求精是人类解决复杂问题时采用的基本方法,逐步求精可定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”
逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。
Miller法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作。
逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略, Wirth曾说:
“我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”
求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。- 抽象与求精是一对互补的概念。
- 抽象使得设计者能够说明过程和数据,同时却忽略低层细节。
- 求精则帮助设计者在设计过程中逐步揭示出低层细节。
- 这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。
(四) 信息隐藏和局部化
如何得到最好的一组模块?
- 信息隐藏原理指出:设计一个模块,使得包含的信息(过程和数据) 对于不需要这些信息的模块来说,是不能访问的。
- 局部化是指把一些关系密切的软件元素
- 物理地放得彼此靠近。
- 在模块中使用局部数据元素是局部化的一个例子。局部化有助于实现信息隐藏。
(五) 模块独立
模块独立是模块化、抽象、信息隐藏和局部化概念的直接结果。
希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。模块独立的两条理由:
第一,有效的模块化(即具有独立的模块)的软件比较容易开发。
因为功能简单而且接口可简化,当许多人分工合作时这个优点尤其重要。
第二,独立的模块比较容易测试和维护。
模块独立是设计的关键,而设计又是决定软件质量的关键环节。
模块的独立程度可以由两个定性标准度量,分别称为内聚和耦合。- 耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;
- 内聚衡量一个模块内部各个元素彼此结合的紧密程度。
- 模块独立要求:高内聚、低耦合;
- 耦合
耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
在软件设计中应该追求尽可能松散耦合的系统。
模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:
(1)内容耦合(content coupling)
一个模块直接访问另一模块的内部数据。
一个模块不通过正常入口转到另一模块的内部。
一个模块有多个入口。
两个模块有部分代码重迭。
(2)公共耦合(common coupling)
若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的可靠性和可适应性,降低软件的可读性。
(3)控制耦合(control coupling)
一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。
显然,对被控制模块的任何修改,都会影响控制模块。
(4)复合耦合(Data Coupling)
一个模块传送给另一个模块的参数是一个复合的数据结构,例如,包含几个数据单项的记录。
(5)数据耦合(Data Coupling)
若两个模块间通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是松散的耦合,模块之间的独立性比较强。
2. 内聚
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
理想内聚的模块只做一件事情。
设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。
内聚性愈强,模块独立性愈好。
偶然内聚:
模块内部各部件之间没有任何关系,仅仅为了满足模块尺寸要求而将一些程序合入一可模块,出现错误时,难以确定位置;
逻辑内聚:
这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判断参数来确定该模块应执行那种功能。
瞬时内聚:
模块包含的任务必须在同一段时间内执行,由于不使用选择参数,逻辑简单,但结合了许多无关任务,错误难以定位。
例如:各种初始化。通信内聚:
模块中所有的部件都访问同一组数据,几个部件之间有数据关系而无控制关系。
优点:可通过参数选择不同的作用,是一种较理想的内聚。顺序内聚:
模块完成多个功能,各个功能都在同一数据结构上操作,每项功能有唯一的入口点。
较好的内聚。
功能内聚:
模块内所有部件处理同一组数据,共同完成单一的功能,是最理想的内聚之一。
三、启发规则
在长期的软件开发实践中,总结经验,得出了一些启发式规则。
没有基本原理和概念那样普遍适用,在改进软件设计,提高软件质量有积极意义。
下面介绍几条启发式规则。
1.改进软件结构提高模块独立性
2.模块规模应该适中
3. 深度、宽度、扇出和扇入都应适当
4. 模块的作用域应该在控制域之内
5. 力争降低模块接口的复杂程度
6. 设计单入口单出口的模块
7. 模块功能应该可以预测四、描绘软件结构的图形工具
(一) 层次图和HIPO图
层次图用来描绘软件的层次结构。
(二)结构图
结构图也是描绘软件结构的图形工具。
一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。
尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。
(三)结构图
有一些附加的符号,可以表示模块的选择调用或循环调用。
如左图表示当模块M中某个判定为真时调用模块A,为假时调用模块B。如右图表示模块M循环调用模块A、B和C。五、 面向数据流的设计方法
面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。
通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。(一)概念
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型。
- 变换流
- 事务流
如图所示,数据流是“以事务为中心的”,即数据沿输入通路到达一个处理T,根据输入数据的类型选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。
如图处理T称为事务中心,它完成下述任务:
(1) 接收输入数据(输入数据又称为事务);
(2) 分析每个事务以确定它的类型;
(3) 根据事务类型选取一条活动通路。
3 设计过程
基于数据流方法的设计过程
(二) 变换分析
变换分析把具有变换流特点的数据流图按预先确定的模式映射成软件结构。
中心变换型(transform center)— 变换分析
其特点是:DFD图可以明显分为“输入-处理-输出”三部分。
事务处理型(transaction)— 事务分析
这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。
(三)事务分析技术
① 确定流界:首先从数据流图中找出事务流、事务处理中心和事务路径。
② 进行一级分析,设计上层模块:对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。
③ 进行二级分解,设计中下层模块:接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。
(四) 设计优化
设计优化应力求做到在有效的模块化的前提下使用最少量的模块,以及在能够满足信息要求的前提下使用最简单的数据结构。
对于时间是决定性因素的场合,下述方法对软件进行优化是合理的:-
(1)在不考虑时间因素的前提下开发并精化软件结构;
-
(2)在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;
-
(3) 使用高级程序设计语言编写程序;
-
(4) 在软件中孤立出那些大量占用处理机资源的模块;
-
(5) 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。
上述优化方法遵守了一句格言:“先使它能工作,然后再使它快起来。”
-
第四章-总体设计
2021-03-02 23:31:49第四章-总体设计 了解总体设计的概念及在软件开发中的位置,了解总体设计的目标、步骤及基本任务。 掌握软件结构设计的基本概念及相应的方法。 掌握模块化、抽象、信息隐蔽、模块独立性、内聚性、耦合性等相关内容...第四章-总体设计
- 了解总体设计的概念及在软件开发中的位置,了解总体设计的目标、步骤及基本任务。
- 掌握软件结构设计的基本概念及相应的方法。
- 掌握模块化、抽象、信息隐蔽、模块独立性、内聚性、耦合性等相关内容。
- 掌握软件结构形态中的相关特征、模块的影响范围、模块的控制范围及软件结构设计的优化准则等内容。
1、总体设计的任务
- 用比较抽象概括的方式确定系统如何完成预定的任务,确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。
- 设计软件的结构
2、总体设计的主要阶段
- 系统设计阶段
从数据流图出发构想完成系统功能的若干种合理的物理方案 - 结构设计阶段
确定程序由哪些模块组成以及这些模块之间的关系
3、总体设计的步骤
1、设想供选择的方案
需求分析阶段得到的数据流图是总体设计的极好的出发点。
2、选取合理的方案- 系统流程图
- 组成系统的物理元素清单
- 成本/效益分析
- 实现这个系统的进度计划
3、推荐最佳方案
4、功能分解
功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。
5、设计软件结构- 顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层模块完成最具体的功能。
- 软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
6、设计数据库
7、制定测试计划
8、书写文档- 系统说明
用系统流程图描绘的系统构成方案
组成系统的物理元素清单
成本/效益分析
对最佳方案的概括描述
精化的数据流程图
用层次图或结构图描绘的软件结构
用IPO图或其他工具(PDL语言)简要描述的各个模块的算法
模块间的接口关系
需求、功能和模块三者之间的交叉参照关系 - 用户手册
- 测试计划
- 详细的实现计划
- 数据库设计结果
9、审查和复查
4、设计原理
(1)模块化
模块是构成程序的基本构件。
模块化就是把程序划分为独立命名而且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足客户的需求。
总成本不仅与模块的数量有关,还与模块间接口的数量有关。
模块化的优点:
- 可以使软件结构清晰,不仅容易设计也容易阅读和理解
- 可以使软件容易测试和调试,因而有助于提高软件的可靠性
- 能够提高软件的可修改性
- 有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块
(2)抽象
软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
随着软件开发工程的进展,在软件结构每一层中的模块,表示了对抽象层次的一次精化。抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
软件结构顶层的模块,控制了系统的主要功能并且影响全局;
在软件结构底层的模块,完成对数据的一个具体处理。用自顶向下由抽象到具体的方式分配控制的优点:
- 简化了软件的设计和实现
- 提高了软件的可理解性和可测试性
- 使软件更容易维护
(3)逐步求精
逐步求精与抽象是互补的概念,由抽象到具体地构造出软件的的层次结构。
定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
- 抽象使得设计者能够说明过程和数据,同时却忽略了底层细节。
- 求精则帮助设计者在设计过程中逐步揭示出底层的细节。
求精实际上是细化过程。
求精是把一个时期内必须解决的种种问题按照优先级排序的技术。(4)信息隐藏和局部化
信息隐藏:
应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化:
把一些关系密切的软件元素物理地彼此靠近。(局部化有助于信息隐藏)细节隐藏:应该隐藏的不是有关模块的一切信息,而是模块的实现细节。
优点:
- 方便在以后的测试期间和维护期间修改软件
- 因为绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。
(5)模块独立
模块独立的概念是模块化、抽象、信息隐藏和局部化的直接结果。
开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
A.耦合
衡量不同模块彼此间相互依赖(连接)的紧密程度
影响耦合强弱的因素:
- 模块间接口的复杂程度
- 进入或访问一个模块的点
- 通过接口的数据
实现低耦合,采取下列措施:
- 耦合方式:采用非直接耦合,不采用直接耦合。
- 传递信息类型:尽量使用数据耦合,少使用控制耦合,外部耦合和公共耦合限制使用。
- 耦合数量:模块间相互调用时,传递参数最好只有一个。
耦合级别(好到差):
-
非直接耦合
两个模块之间没有联系,则它们之间为非直接耦合。
-
数据耦合
被调用模块的输入与输出是简单的参数或者是数据结构(该数据结构中的所有元素为被调用的模块使用),则它们之间为数据耦合。
-
标记耦合
如果两个模块都要使用同一数据结构的一部分,不是采用全局公共数据区共享,而是通过模块结构传递数据结构的一部分,则它们称为标记耦合。
-
控制耦合
如果两个模块中的一个模块给另一个模块传递控制信息,则它们具有控制耦合。
特点:接口单一,但仍然影响被控模块的内部逻辑。
-
外部耦合
当模块与软件的外部环境联结在一起,并受到约束时就出现较高程度的耦合,则它们之间为外部耦合。
-
公共耦合
如果两个模块都可以存取相同的全局数据,则它们之间是公共耦合。
存在的问题:
- 公共部分的改动将影响所有调用它的模块;
- 公共部分的数据存取无法控制;
- 复杂程度随耦合模块的个数增加而增加。
解决方法:通过使用信息隐藏来避免公共耦合。
-
内容耦合
产生的条件(满足其一即可):
- 一个模块访问另一个模块的内部数据
- 一个模块不通过正常入口而转移到另一个模块的内部
- 两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
- 一个模块有多个入口(这意味着一个模块有几种功能)
B.内聚
衡量一个模块内部各个元素彼此结合的紧密程度
模块各元素执行相同的任务。
内聚级别(差到好;3低2中2高):
-
偶然内聚
为方便把不相干的元素组合在一起。
缺点:产品的可维护性退化;模块是不可复用的,增加软件成本。
解决途径:将模块分成更小的模块,每个小模块执行一个操作。
-
逻辑内聚
某段时间执行的若干功能任务放在同一模块中。
例如:系统的初始化
问题:不同的功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。
-
时间内聚
一个模块包含的任务必须在同一段时间内执行。
-
过程内聚
模块内的各功能元素是相关的,而且必须以特定次序执行。
例如:读写并更新数据记录
程序流程图
-
通信内聚
模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。
例如:某模块的各成分都利用一符号表进行操作;从同一磁带上读取不相干的数据。
问题:可能破坏独立性。
-
顺序内聚
模块的输出是下一个模块的输入。
数据流图
-
功能内聚
为完成一个任务把所需的全部功能组合在一起。
原则:力争高内聚,识别低内聚,可以使得设计的软件具有较高的功能独立性。
5、启发规则
-
争取低耦合、高内聚
增加内聚、减少耦合 -
模块规模适中
过大,分解不充分,不易理解;
太小,则开销过大、接口复杂。 -
适当控制模块结构参数
- 深度 = 分层的层数。过大表示分工过细。
- 宽度 = 同一层上模块的最大值。过大,表示系统复杂度大。
- 扇出 = 一个模块直接调用\控制的模块数。
- 扇入 = 直接调用该模块的模块数。
尽可能减少高扇出结构,随着深度增大扇入。
扇出太大一般是因为缺乏中间层次,应当适当增加中间层次的控制模块;
扇出太小时可以把下级模块进一步分解为若干个子功能模块,或合并到它的上级模块中去。
顶层扇出高,中间扇出少,底层高扇入。
-
模块的作用范围保持在该模块的控制范围内
- 控制域 = 该模块本身以及所有直接或间接从属于它的模块。
- 作用域 = 该模块中一个判断所影响的所有其他模块。
令作用域是控制域的子集:
- 把作判定的点往上移;
- 把那些在作用域但不在控制域内的模块移到控制域内。
-
降低接口的复杂程度
模块接口的复杂性是引起软件错误的一个主要原因。接口设计应该使得信息传递简单并且与模块的功能一致。 -
单出口单入口,避免内容耦合
易于理解和维护。 -
模块功能可预测
相同输入必产生相同输出。
6、面向数据流的设计方法
-
模块独立
面向数据流的设计方法吧数据流(信息流)映射成软件结构,数据流的类型决定了映射的方法。
-
变换流
信息沿输入通路进入系统,同时由外部形式变成内部形式,进入系统的信息通过变换中心,经加工处理后再沿输出通路变成外部形式离开软件系统。 -
事务流
数据沿输入通路到达一个处理,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。事务中心
-
接收输入数据(输入数据又称为事务)
-
分析每个事务以确定它的类型
-
根据事务类型选取一条活动通路
-
-
变换分析
经过若干步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。 -
变换流分析
-
事务流分析
从事务流的DFD到程序结构图的转换。
与变换分析的主要差别仅在于由数据流图到软件结构的映射方法不同。- 接收分支
从事务中心的边界开始,把沿着接收流通路的处理映射成模块。 - 发送分支
包含一个调度模块,控制下层的所有活动模块。
- 接收分支
7、设计优化
应该在设计的早期阶段对软件结构进行精化,这种优化的可能,是把软件结构设计和过程设计分开的的真正优点之一。
设计优化应该力求做到在有效的模块化的前提下使用最少量的模块,以及在能满足信息要求的前提下使用最简单的数据结构。
对时间起决定作用的软件设计进行优化:
- 在不考虑时间因素的前提下开发并简化软件结构。
- 在详细设计阶段选出最耗费时间的那些模块,仔细地设计他们的处理过程(算法),以求提高效率。
- 使用高级程序设计语言编写程序。
- 在软件中孤立出那些大量占用处理机资源的模块。
- 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。
8、描绘软件结构的图形工具
- 层次图
用来描绘软件的层次结构
一个矩形框代表一个模块(与描绘数据结构的层次方框图不同)
连线表示调用关系(层次方框图表示组成关系)
适合在自顶向下设计软件的过程中使用 - HIPO图
层次图加输入/处理/输出图
在H图里除了最顶层的方框外,每个方框都加了编号→可追踪性 - 结构图
一个方框代表一个模块,方框之间的箭头(或直线)表示模块的调用关系
在结构图中还经常用带注释的箭头表示模块调用过程中来回传递的信息
- 数据(空心圆)
- 控制信息(实心圆)
选择调用、循环调用 - PS
层次图和结构图并不严格表示模块的调用次序。
层次图和结构图并不指明什么时候调用下层模块。
通常用层次图作为描绘软件结构的文档,结构图并不是很合适。
利用IPO图或数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,可以作为检查设计正确性和评价模块独立性的好方法。
-
软件项目总体设计
2019-10-22 22:53:11path软件学习系统的概要设计,包括框架设计,功能模块设计,数据库设计,界面设计等部分。 本文档的预期读者包括: 设计开发人员 项目管理人员 测试人员 用户 1.2范围 该文档的目的是解决整个项目系统的...1.导言
1.1目的
该文档根据Learning path软件学习系统的功能和性能,阐述了Learning
path软件学习系统的概要设计,包括框架设计,功能模块设计,数据库设计,界面设计等部分。本文档的预期读者包括:
- 设计开发人员
- 项目管理人员
- 测试人员
- 用户
1.2范围
该文档的目的是解决整个项目系统的“怎么做”的问题。在这里,主要是根据
用户提出的项目需求进行的全面设计。
1.3参考资料
《软件工程案例教程软件项目开发实践 第三版》 韩万江等 机械工业出版社
2.项目设计原则简介
软件英语学习系统(Learning path)主要是针对在校学生英语学习而做的。该平台融合了主流教学平台的特点,同时具有传统的英语翻译功能。方便日常英语学习以及师生间的英语反馈。
在整个系统设计的过程中遵循以下的设计原则:-
实用性:实用性是系统的主要设计原则,系统设计必须最大可能地满足用户的需求,做到操作方便、界面友好、可即时更新,能适应不同层次用户的需求。
-
先进性:信息技术发展迅速,系统设计尽可能采用先进的技术标准和技术方法。
-
以用户为中心的处理:个性化服务充分体现了这一点,根据用户当前展业重点,配置页面功能布局及展现内容,贴合用户操作。
-
使用便捷。系统要有设计良好的人机交互界面,即使系统的操作界面简单易用,又能具有较强的适用性,满足不同计算机使用水平的用户使用。
-
灵活和易维护:采用开放的体系架构,基于开放源代码的技术框架和数据库系统,使用高效率的开源和免费开发工具,具备完整的文档说明。在维护方面,主要考虑两个层面,一是对于开发人员来讲,系统编码容易调整,可适应需求的变化和调整;二是对于系统管理维护人员来说,能够对系统进行便捷的维护和管理。
-
安全可靠:选择安全可靠的软硬件运行平台,并在系统设计和实现的时候关注系统的安全控制和执行效率,提供相应的安全防护功能,保证系统具有较高的安全性和可靠性。安全性方面,要考虑系统的安全、数据管理的安全、网络安全。保证用户权限、数据安全和系统的稳定性。
-
单一职责原则:我们系统在面向对象设计部分采取单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。从而最终提高我们系统的可修改性和可维护性。
本概要设计涵盖了体系结构设计、模块设计、数据库设计、界面设计等。
3.功能模块设计
3.1功能模块设计总述
本系统主要包括的模块为两部分:客户端子系统功能模块图、管理端子系统功能模块图,如图
3-1 所示。其中,图 3-2 是客户端子系统功能模块图,图 3-3
是管理端子系统功能模块图。
图3-1 主要模块图
图3-2 Learning path客户端子系统功能模块图
图 3-3 是管理端子系统功能模块图
3.2 客户端子系统模块设计
3.2.1 模块 CM1 :静态页面
编号:CM1
模块名称:静态页面
功能简介:本模块为系统的静态页面模块。
输入:鼠标点击事件
输出:调用的页面
操作流程:
图3-4静态页面模块图
3.2.2 模块 CM2:系统登录
编号:CM2
模块名称:系统登录
功能简介:本模块为系统登录模块,即用户登录系统的入口。在此模块中,用户输入自己的用户名和密码,在此用户名为学号或职工号,系统在后台数据库进行查询操作后,返回布尔值,表示该输入是否正确,输入正确则进入系统,错误则对用户进行相应提示。
输入:用户名,密码
输出:用户是否登录成功
操作流程:
图3-5系统登录模块图
3.2.3 模块 CM3 :注册模
编号:CM3
模块名称:系统注册
功能简介:本模块为系统注册模块。用户首次进入系统时。可通过本模块进行注册。在此模块中,系统显示注册界面,用户输入相关必要的身份信息,单击确定。若注册成功,系统将以学生学号作为账号,用户设定密码作为密码存入后台数据库。注册完成后,用户可使用注册成功的账号和密码登录系统。
输入:用户名,密码
输出:用户是否注册成功
备注:对于未登录系统的游客用户,系统将自动限制一部分功能的显示
操作流程:
图3-6注册模块图
4.数据库设计
4.1 数据库种类及特点
本项目采用了MySQL 的数据库。MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL具有以下几个特性:
(1) MySQL为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、
Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
(2) 优化的 SQL查询算法,有效地提高查询速度。
(3) 提供多语言支持,常见的编码如中文的
GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。
(4) 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
(5) 提供用于管理、检查、优化数据库操作的管理工具。
(6) 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
(7) MySQL 使用标准的 SQL数据语言形式。
4.2 数据库逻辑结构
经过充分的调研和分析,我们将“Learning path”的数据中设计了七个实体,其中包括管理员、教师、学生、单词识别、班级、生词本、题库。针对每个实体,又有其对应的属性。他们之间的关系主要包括以下几项:管理员表、学生信息表、教师信息表是独立存在的,管理员负责管理学生信息、普通用户信息和教师信息。因此管理员与教师、普通用户和学生是一对多关系。
教师负责班级管理,其中一个老师可以管理多个班级,因此老师与班级是一对多的关系
一套试卷可能包含多道题目,同样的一道题目可能被包括在多套试卷中,
所以试卷与题目之间是多对多的关系。
知识点与题目之间是包含的关系,所以知识点与题目之间是一对多的关
系
一个学生可以参加多次试卷测评,一套试卷可以被多个学生使用,所以
试卷与学生之间是多对多的关系
综上分析,软件项目管理课程平台的实体关系图(概念数据模型)如下图5-1
所示。
4.3E-R图
-
软件工程复试——五、总体设计
2020-04-10 00:14:10五、总体设计 总体设计又称为概要设计或初步设计。其基本目的就是回答“概括地说,系统应该如何实现”这个问题。 设计过程 总体设计过长一般分两个阶段组成:系统设计阶段,结构设计阶段。 总体设计一般包含以下九个... -
论文研究-论区域规划中的模型系统——常德地区社会经济规划中模型的总体设计.pdf
2019-09-20 11:06:12论区域规划中的模型系统——常德地区社会经济规划中模型的总体设计.pdf, 本文论述了区域规划中模型系统化的基本思想、目标、原则和任务,并根据常德地区规划中模型总体设计的实践,提出了构造模型系统的途径。 -
【软件工程】软件设计之总体设计
2014-11-02 18:38:50软件的设计分为:总体设计/\详细设计 设计基本原理: 总体设计的任务和过程 总体设计分为:面向数据,面向功能,面向对象的分析 设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测... -
系统总体结构设计
2020-02-16 04:25:08总体设计主要是指在系统分析的基础上,对整个系统的划分(子系统)、机器设备(包括软、硬设备)的配置、数据的存贮规律以及整个系统实现规划等方面进行合理的安排。 一、系统设计的任务 1. 系统设计的概念 系统... -
飞机总体多学科设计优化的现状与发展方向 (2008年)
2021-05-17 12:51:54通过对飞机总体多学科设计优化(Multidisciplinary design optimization,MDO)研究进展的分析,为飞机总体MD0进一步研究和应用提供基础。首先阐述飞机总体MD0与传统飞机总体参数优化的区别,然后介绍MDO领域中重要... -
面向服务中心的地理信息系统总体架构
2021-01-26 23:16:47为了实现广域网环境下大量...对面向服务中心的地理信息系统的总体架构进行了详细的分析与设计,并给出了海量地理空间数据存储与管理、大规模地理信息应用服务器集群、高并发、高可靠的Web服务器集群的实现技术途径。 -
硬件设计开发指导(完整版).docx
2020-02-26 15:39:20其次,根据需求分析制定硬件总体方案,寻求关键器件及其技术资料、技术途径、技术支持,要比较充分地考虑技术可能性、可靠性以及成本控制,并对开发调试工具提出明确的要求,关键器件索取样品。第三,总体方案确定且... -
weibotwo:课堂项目的另一种使用微博的途径
2021-03-13 22:36:19适用于Android的weibo2 weibo2为提高所有人的微博体验而生 组名:小组一 成员信息 姓名 ID ...我们的总体准备开发支持的功能: 登录 主题设置(含夜间模式) 关键词屏蔽(支持正则表达式) 按分组显 -
.Net平台下并行工程项目规划与团队组织系统的设计与实现
2021-03-04 19:42:19考虑到现实中的具体问题,在.net平台上设计并实现了基于C/S的产品项目规划和团队组织系统,给出了相应的流程设计、模块结构设计和总体系统的实现,为企业生产效率的提高提供了一条科学途径。关键词并行工程,项目... -
一种禽舍环境监控领域的设计和实现
2020-10-22 23:21:23近年米在研究国外禽舍设施技术的基础上,我国的禽舍设施对微型计算机的应用,在总体上正从消化吸收、简单应用阶段,向实用化、综合性应用阶段过渡和发展。现有的禽舍监测系统中数据的采集火多采用传统的有线方式,... -
一卡通管理系统总体设计
2018-12-05 11:19:55摘要:数字化校园建设的实质就是学校的管理部门通过信息化手段,实现对各种资源的有效集成、整合和优化,实现资源的有效配置和充分利用,从而提高各种...本文主要讨论校园一卡通的总体设计。 1.校园一卡通的发展现状 -
基于Pro/INTRALINK的产品协同设计
2020-06-29 03:27:23利用Pro/INTRALINK建立产品设计开发平台,在此环境下,总体、总装、零件可同时设计互相参考。设计时利用公共空间保证数据的完整性和安全性,通过有效管理设计更改,避免设计冲突;多名设计人员可以通过工作空间同时工作,... -
分享《硬件工程师手册》,快速学习掌握硬件设计技术规范
2020-11-09 15:26:09资料、 技术途径、 技术支持, 要比较充分地考虑技术可能性、 可靠性以及成本控 制, 并对开发调试工具提出明确的要求。 关键器件索取样品。 第三、 总体方案确 定后, 作硬件和单板软件的详细设计, 包括绘制硬件... -
嵌入式系统/ARM技术中的基于NIOS II的ARINC429总线接口板设计
2020-12-13 09:47:081 引言随着数字技术和计算机技术的不断发展,越来越多的航空电子设备采用了数字化技术,从而使...2 系统总体设计Altera公司在2004年发布了支持CycloneⅡFPGA系列的NIOSⅡ嵌入式微处理器。它是一款通用的RISC结构32位C -
2017.12.8 软件工程-----第五章 总体设计(复习)
2017-12-08 23:29:00软件工程-----第五章 总体设计(复习) (1)概要 经过需求分析阶段的工作,系统必须“做什么”已经很清楚了,现在是决定“怎样做”的时候了。总体设计的基本目的是系统应该如何实现。他最重要的一项工作是设计软件... -
大储量工作面远距离掘进及施工设计优化
2020-07-11 02:22:45布置大采高、大走向、大采长工作面是煤炭工业总体发展趋势,也是提高煤炭资源回收、减少矿井开采投入,提高全员效率的有效途径。马兰矿南一下组煤18307工作面两巷及专用回风巷设计长度为2010 m,由于工作面顺槽长、储量... -
Java常见设计模式总结
2021-09-18 17:18:54设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于人于系统都...总体来说,设计模式分为三大类:5种创建型模式、7种结构型模式、11种行为型模式 -
工业电子中的基于S3C44B0X的工业用煤成分分析系统设计
2020-11-05 09:24:12用洗中煤和矸石混烧发电,是解决污染的有效途径。2009年,煤矸石综合利用量3.9亿吨以上,利用率达到70%以上。如何快速、精确地定量分析混合燃料中煤与矸石的搭配比例,就成为监管部门及企业需要解决的问题。为解决... -
3d游戏的总体设计框架 .
2013-10-14 16:27:48方案 1. 技术方案 (1) 系统概要 ...SI Engine的设计以追求图形应用的效果和效率为主要的目标。以系统的通用性、开放性、易用性为次要目标。力求做一个满足制作高效的、逼真的实时图形应用要求的 -
2020BUPT数据结构大作业COVID-19疫情环境下低风险旅行模拟系统C语言EGE图形界面实现(含源码、文档)
2020-09-24 17:47:36文档包括数据结构说明报告、用户使用说明报告、功能需求&总体方案设计报告、测试&评价和改进意见报告,源码包括项目工程所有资源文件、源代码文件和可执行文件等。供参考使用。 课程设计题目:COVID-19疫情环境下低... -
工程师必备:硬件EMC设计规范
2021-07-06 23:09:08广义的电磁兼容控制技术包括抑制干扰源的发射和提高干扰接收器的敏感度,我们都知道干扰源、干扰传输途径和干扰接收器是电磁干扰的三要素,同时EMC也是围绕这些问题进行研究,而运用最为广泛的抑制方法是屏蔽、滤波... -
论设计洪水计算 (2014年)
2021-05-30 14:22:48证明了基于概率论和数理统计的防洪计算途径理论上的正确性和实用上的不可能性,分析了同倍比法和同频率法产生的背景,通过与数理统计途径的对比,揭示了借助于“设计洪水过程线冶概念建立起来的这两个方法的理论基础。... -
智能停车诱导系统代码.rar
2022-04-14 08:44:421. 在停车设施的增加速度远不及城市汽车增长速度的情况下,停车诱导系统是提高现有...3.给出要解决的实际问题的业务模型、总体设计和详细设计; 4.运用当前主流程序设计语言实现设计方案,并根据要求撰写设计说明书。 -
研究论文-基于ARM的智能公交系统设计.pdf
2019-08-07 15:27:16首先,在详细分析系统所需性能指标的基础上制定系统的总体设计方案;然后,根据各功能模块的工作原理,给出了智能车载终端和智能站牌终端的设计方法,并完成了系统硬件电路设计;之后,给出了智能公交系统的软件设计...