软件设计综述报告.docx
- 文档编号:2316843
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:13
- 大小:110.86KB
软件设计综述报告.docx
《软件设计综述报告.docx》由会员分享,可在线阅读,更多相关《软件设计综述报告.docx(13页珍藏版)》请在冰豆网上搜索。
软件设计综述报告
软件设计综述报告
软件设计综述报告
软件设计包括一套原理、概念和实践。
明确软件设计目标是软件设计的第一步。
软件设计目标明确了最终的软件系统应该拥有的质量属性。
软件设计的目标涉及性能、可靠性、成本、维护等多个方面的目标。
1.1软件设计的目标
软件设计的目标应从用户那里得到,确定了软件最终应拥有的功能。
可以从需求规格说明书中选择重要的质量属性,作为设计目标,如性能目标、可靠目标等。
而成本和维护方面往往从客户和供应商那里得到。
1.1.1性能准则
性能准则包括对系统速度和空间的需求。
系统应该是能够发现请求并及时响应这些请求。
1.1.2可靠性准则
可靠性准则决定了对减少系统崩溃以及随后所造成危害所做的努力程度。
1.1.3成本准则
成本准则包括开发、配置和管理系统的成本。
当新系统更新旧系统时,应该考虑确保向后兼容,或减少新系统移植的开销,同时需要考虑在多种不同成本之间做出权衡。
1.1.4维护准则
维护准则确定在开发完成后再改变系统的困难程度。
这些准则很难进行优化和事先规划,因为很少能够清晰的给出项目成功的程度和系统的可操作的时间周期。
1.1.5最终用户准则
最终用户准则包括从用户的视点出发所需的属性,但并没有覆盖性能准则和可靠性准则。
1.2软件设计的任务
软件设计的主要任务是要解决如何做的问题,要在需求分析的基础上,建立各种设计模型,并通过对设计模型的分析和评估,确定模型是否满足需求。
软件设计是将用户需求准确的转化成为最终的软件产品的唯一途径,在需求到构造之间起到了桥梁作用。
1.2.1软件设计的阶段和任务
从工程管理的角度将软件设计分为两个阶段:
概要设计阶段和详细设计阶段。
从技术的角度,采用的方法不同,设计的内容也会有所不同。
传统的结构化的方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计。
(1)体系结构设计:
体系结构设计定义软件的主要结构元素及其之间的关系。
体系结构设计表可以从系统规格说明、分析模型及体系结构的风格导出。
(2)类设计:
类设计对分析阶段所建立的分析类模型进行细化,转化为设计类的实现及软件实现所要求的数据结构。
(3)数据设计:
传统方法主要根据需求阶段所建立的实体-关系图来确定软件设计的文件系统的结构及数据库的表结构。
(4)接口设计:
接口设计描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口。
(5)构件级设计:
构件级设计将软件体系结构的结构元素变换为对软件构件的过程性的描述。
(6)过程设计:
过程设计的主要工作是确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达式来描述各种算法。
1.2.2结构化设计与结构化分析的关系
软件设计必须依据对软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息。
(1)研究、分析和审查数据流图。
根据穿越系统边界的信息流初步确定系统与外部接口。
(2)根据数据流图决定问题的类型。
数据处理问题通常有两种类型:
变换型和事务型。
针对两种不同的类型分别进行分析处理。
(3)由数据流图推导出系统的初始结构图。
(4)利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。
(5)根据分析模型中的实体关系图和数据字典进行数据设计,包括数据库设计或数据文件的设计。
(6)在设计的基础上,依旧分析模型中的加工规格说明、状态转换图进行过程设计。
(7)制定测试计划。
结构化设计与结构化分析的关系如图。
左面是结构化分析阶段所建立的分析模版,右面为建立的设计模型。
图2结构化设计与结构化分析关系
1.3模块结构与数据结构
软件的结构包括两部分,一部分为软件的模块结构,另一部分为软件的数据结构。
虽然这两部分是有密切联系的。
但是在传统方法中,这两部分的设计是分开进行的。
1.3.1模块结构表示
一般通过功能划分过程来完成软件结构设计。
功能划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每一部分用一个或几个软件模块加以解决。
一个软件系统通常由很多模块组成,结构化程序设计的函数和子程序都可称为模块。
它是程序语句按逻辑关系建立起来的组合体。
对于大的模块,一般还可以继续分为功能独立的较小模块,将不能再分解的模块称为原子模块。
通常,可以按照在软件系统中的功能将模块分为四种类型。
(1)传入模块:
传入模块的功能是取得数据或输入数据,经过某些处理,再将其传送给其他模块。
(2)传出模块:
传出模块的功能是输出数据,在输出之前可能进行某些处理,数据可能被输出到系统的外部,也可能会输出到其他模块进行进一步的处理,但最终的目标是输出到系统的外部。
(3)变换模块:
也叫加工模块,从上级调用模块取得数据,进行特定的处理,转换成其他形式,再将加工结果返回给调用模块。
(4)协调模块:
协调模块本身一般不对数据进行加工,如数据X和Y,其主要功能是通过调用、协调和管理其他模块来完成特定的功能,如结构化程序设计中的主程序。
1.3.2模块结构
模块结构表明了程序各个部件的组织情况,通常是树状结构和网状结构。
是软件的过程的表示,并没有表明软件的某些过程性特征。
(1)树状结构。
位于最上层的的根部是顶层模块,他是程序的主模版。
与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块。
由下图可知,树状结构的特点是:
整个结构只有一个顶层模块,上层模块调用下层模块,同一层模块之间不可相互调用。
(2)网状结构。
网状结构中,任意的两个模块间都可以有调用关系。
不存在上下级模块关系,分不出层次;任何两个模块都是平等的,没有从属关系。
1.3.3结构图
结构图是精确表达模块结构的图形标识工具,可以清楚的反映软件模块之间的层次调用关系和联系。
严格定义了各个模块的名字、功能和接口,集中反映了设计思想。
(1)模块的调用关系接口:
在结构图中,两个模块之间用单向箭头连接。
箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。
被调用模块执行完成后,控制又返回到调用模块。
(2)模块间的信息传递:
当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。
而被调用模块在执行过程中又把它产生的数据或控制信息送给调用模块。
为了表示在模块之间传递的数据或控制信息,在连接模块的箭头旁边给出短箭头,并且用尾端带有空心园的短箭头表示数据信息,用尾端带有实心园的短箭头表示控制信息。
(3)两个辅助符号:
如图所示,当模块A有条件的调用另一个模块B时,在模块A的箭头尾部标以一个菱形符号;当一个模块A反复的调用模块C和模块D时,在调用箭头尾部则标一个菱形符号。
图5条件调用和循环调用的表示
(4)结构图的状态特征。
图所表示的是一个软件系统的分层模块结构图。
上级模块调用下级模块,他们之间存在着主从关系,同一层模块之间并没有这种主从关系。
模块间的连线:
模块之间的调用箭头也可用没有箭头方向的直线表示,在用直线表示时,用模块所处的位置表示他们之间的调用关系,位于上面的模块调用位于下面的模块。
结构图的深度:
在多层次的结构图中,模块结构的层次数称为结构图的深度。
结构图的深度在一定程度上反映了程序结构的规模和复杂程度。
结构图的宽度:
结构图中同一层模块的最大模块数称为结构图的宽度。
模块的扇入和扇出:
扇出表示一个模块直接调用的下属模块数目,扇入则定义为调用一个给定的模块的调用模块的数目。
1.3.4数据结构的表示
数据结构是数据的各个元素之间的逻辑关系的一种表示。
数据与程序是密不可分的,实现相同的功能,采用的数据结构不同,底层的算法也不相同。
数据结构设计应先确定数据的组织、存取方式、相关程度,以及信息的不同处理方法,典型的数据结构种类是有限的。
所谓的标量项就是单个的数据元素,如一个布尔量、整数、实数或一个字符串,可以通过名字对他们进行存取。
基本数据结构可以构成其他数据结构可以用包含标量项、向量或N维空间的多重链表来建立分层树状结构和网状结构,并实现多种集合的存储。
1.4创建良好的设计的原则
1.4.1分而治之和模块化
分而治之就是将大型复杂的问题分解为许多容易解决的小问题。
模块化是将整体软件划分成独立访问的模块,不同的模块通常是具有不同功能或职责。
每个模块可以独立的开发、测试,最后组装成完整的软件。
一个模块的规模应该由它的功能和用途决定,并不是分解的越小越好。
存在一个模块个数M,使得开发成本达到最小。
图6模块大小、模块数目与成本的关系
1.4.2模块独立性
模块独立性是指软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口都是简单的。
一般采用两个准则度量模块的独立性,即模块间的耦合和模块的内聚。
耦合是模块间的相对独立性的度量,模块之间连接的越紧密,联系越多,耦合性就越高,而模块独立性就越弱。
内聚是模块功能强度的度量。
一个模块内部各个元素之间的联系越紧密,它的内聚性就越高,相对的,其他模块之间的耦合性就会降低。
因此,模块独立性比较强的模块应该是高度内聚、松散耦合的模块。
1.松散耦合
耦合性是程序结构中各个模块之间相互关联的度量。
取决于各个模块之间的接口复杂程度、调用模块的方式以及哪些信息通过接口。
(1)非直接耦合。
两个模块之间没有直接关系,他们之间的联系完全是通过主模块的控制和调用来实现的。
模块之间的独立性最强
(2)数据耦合。
一个模块访问里一个模块时,彼此之间是通过数据参数来交换输入、输出信息的。
(3)标记耦合。
如果一组模块通过参数表达传递记录信息,就是标记耦合。
(4)控制耦合。
一个模块通过传送开关,标志,名字等控制信息,明显的控制选择另一个模块的功能。
(5)外部耦合。
一组模块都访问同意全局变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。
(6)公共耦合。
一组模块都访问同一个公共数据环境。
(7)内容耦合。
一个模块直接访问另一个模块的内部数据。
一个模块不通过正常入口转到另一模块内部。
两个模块有一部分代码重叠。
一个模块有多个入口。
2.高度内聚
一个内聚程度高的模块应当只完成软件过程中的一个单一的任务,而不与程序其他的部分进程发生关系。
(1)巧合内聚。
模块内各部分之间没有联系,或者即使有联系,这种联系也很松散。
(2)逻辑内聚。
模块把几种相关功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应该执行哪一种功能。
(3)时间内聚。
模块为多功能模块,各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。
(4)过程内聚。
一个模块内的处理是相关的,必须以特定程序执行。
(5)通信内聚。
一个模块内各功能部分都使用了相同的数据,或产生了相同数据。
(6)信息内聚。
模块完成多个功能,各个功能都在同一个数据结构上操作,每一项功能都有一个唯一的入口点。
(7)功能内聚。
一个模块中各个部分都是完成某一种具体功能必不可缺少的组成部分。
1.4.3提高抽象层次
抽象是指忽视一个主题与当前目标无关的那些方面,以便充分的注意与当前目标相关的方面。
设计软件时,设计开始时应该尽量提高软件的抽象层次。
按抽象级别由高到低进行软件设计。
1.4.4复用性设计
复用是指同一实体不做修改或者稍加修改就可以多次重复使用,将复用的思想用于软件开发。
复用的范围包括软件开发的各个阶段,包括需求模型和规格说明、设计模型、文档、测试用例的复用。
1.4.5灵活性设计
保证软件灵活性的关键是抽象。
在设计中引入灵活性的方法如下。
(1)降低耦合并提高内聚。
易于提高替换能力。
(2)建立抽象。
创建有多态操作的接口和父类。
(3)不要将代码写死。
消除代码中的常数。
(4)抛出异常。
由操作的调用者处理异常。
(5)使用并创建可复用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 综述 报告