软件安全-软件安全的架构和设计.ppt
《软件安全-软件安全的架构和设计.ppt》由会员分享,可在线阅读,更多相关《软件安全-软件安全的架构和设计.ppt(133页珍藏版)》请在三一办公上搜索。
1、第四章 软件安全的架构和设计,4.1 软件设计基础4.2 面向对象程序设计4.3 软件架构和设计过程中的风险分析 4.4 安全原则、安全方针,4.1 软件设计基础,在进行了系统需求分析后,就定义了软件系统实现的目标,这个阶段也称为软件的定义阶段,接着就进入了系统开发的中心阶段软件设计阶段。一般的设计是应用各种技术和原理,对设备、过程、或系统作出足够详细的定义,使之能够在物理上得以实现。软件设计阶段是软件生命周期的中心,它的任务是将软件的需求描述或定义转换成软件的具体设计方案,并且要考虑对实现环境的要求,使之能够在物理上建成一个符合用户要求的软件系统。,4.1.1 软件设计概念,人们经过多年的实
2、践,总结和发展了许多软件的设计概念和经验,成为软件设计人员设计复杂应用问题时应该遵循的基础。我们前面已经学习了需求分析,明确了用户的需求,但那都是软件的需求,而不是软件(也可以说是从用户角度描述,而不是从软件开发人员角度描述问题),这一节就是要将计算机软件需求变为软件表示,那么什么是软件表示?如何实现这一变换?这是这一节要解决的主要问题。,软件需求:解决“做什么”软件设计:解决“怎么做”,1 软件设计划分的形式:,(1)从设计步骤上看可分为总体设计(初步设计)和详细设计:软件设计是将软件需求变换成软件表示的过程,最初这种表示只是描述软件的总体框架,称为软件的总体设计,然后进一步细化,在框架中填
3、入细节,将各模块的具体设计表示成在细节上接近于源程序或易于用源程序实现的形式,称为详细设计。(2)从软件工程管理的观点上看可分为概要设计和详细设计两个部分:概要设计是将软件的需求转化为数据结构和软件的系统结构;详细设计是软件结构表示的细化,得到软件的详细数据结构表达和具体算法描述。,1 软件设计划分的形式:,(3)从设计的技术内容上看可分为数据设计、结构设计和过程设计:从信息流技术包含的设计内容上看,软件设计是根据软件的功能、性能需求和用户其它要求,采用某种设计方法进行数据设计、系统结构设计和过程设计。数据设计侧重于数据结构的定义,系统结构设计侧重于定义软件系统各主要成分之间的关系,过程设计则
4、是把软件结构成分转换成过程性描述。,2 概要设计的内容:,(1)制定规范:为软件开发的设计小组制定软件设计时应该共同遵守的标准,便于协调小组内各个成员的工作。包括:阅读和理解软件需求说明书,确定用户需求的实现条件和设计目标、设计的优先顺序等;根据设计目标确定合适的设计方法;确定设计文档的编制标准(如:文档体系、样式、记述的详细程度、图形的画法等);规定编码(代码)体系的信息形式,与硬件、操作系统及其它软件的接口规约、命名规则等;,2 概要设计的内容:,(2)软件结构的总体设计:从系统开发的角度看,需求分析已经完成了部分功能设计,即将系统按功能进行了逐层分解,使每一部分完成简单的功能,且各个部分
5、又保持一定的联系,还要把该层次结构的各个部分组合起来形成统一的系统。包括:采用某种设计方法,将一个复杂的系统按功能划分为模块的层次结构;确定各个模块的功能,建立模块与功能的对应关系;确定模块间的调用关系和接口(模块间传递的信息)关系;设计接口的信息结构;评估模块的划分质量,导出模块结构规则;,2 概要设计的内容:,(3)处理方式设计:确定外部源点与终点输入/输出接收与发送的形式:根据外部数据源点终点的特性,确定合理的数据接收与发送的形式;确定实现系统功能所需的算法,评估算法的性能;确定为满足软件系统的性能所必需的算法,确定模块间的控制方式,满足以下指标:周转时间从计算机接收请求的输入开始,经过
6、处理直到输出结果为止的整个时间;响应时间对于联机实时系统的性能要求,当终端用户向计算机发出处理请求之后,从一次输入开始到一次输出最终结果之间的一段时间;吞吐量单位时间内能够处理的数据量,表示系统的处理能力;精度进行数学计算时,对运算精确度的要求;,2 概要设计的内容:,(4)数据结构设计:确定软件涉及的数据文件系统结构及数据库模式、子模式和进行数据完整性和安全性设计,包括:数据文件的详细数据结构;确定算法所需要的详细逻辑数据结构和操作;确定对数据结构必需进行操作的程序模块,确定和尽可能限制各个数据操作模块和设计决策所涉及的影响范围;确定系统调用的详细数据结构和使用规则;进行数据的保护性设计:包
7、括防卫性设计,进行自动检错、报错和纠错设计,进行一致性检查设计,保证软件运行过程中所使用的数据类型和取值范围不变;在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏;进行一定的数据冗余设计,保证软件系统有一定的容错性;,2 概要设计的内容:,(5)可靠性设计(质量设计):在使用计算机的过程中可靠性是很重要的,可靠性不高的软件,其质量也不高;确定软件可靠性的指标和其他质量指标,使软件易于适应环境的变化和用户的新要求,易于进行修改和维护;(6)编写设计阶段的文档:编写系统概要设计、数据设计文档,编写用户手册和指定测试计划,对测试提出明确要求;(7)进行设计审查和复审:审查设计方案的正确性,根据
8、设计文档进行评估,选择合理的或推荐最佳的设计方案,并从管理角度进行复审,检查是否符合设计规范和设计步骤,同用户方一起,确定合理的优选设计方案。,概要设计中,最主要的工作是系统总体结构的设计,简称总体设计。其他设计工作可随总体设计工作的过程逐步确定。,4.1.2 模块独立性、耦合性与内聚性,软件被划分成若干个可单独命名和编址的元素称为模块,模块是数据说明、可执行语句等程序对象的集合。例如:子程序、过程、函数、宏、数据说明等都可作为模块。这些模块按一定形式组成整体以满足软件系统指定的要求。,1 模块的独立性:,模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的
9、接口尽可能地简单,模块的设计应该使模块之间仅有必要的联系,没有过多的联系,一个模块的存在不依赖于另一个模块的存在。一般采用两个定性准则评价模块的独立性:模块本身的内聚和模块之间的耦合。耦合越高,模块间的联系就越多,模块独立性就越低;内聚越高,模块内的各个元素联系就越紧密,与其它模块之间的联系相应地会减少,模块独立性就越高。因此,模块独立性高的应该是那些高内聚低耦合的模块。,无耦合没有依赖关系,松散耦合有少量依赖关系,紧密耦合有很多依赖关系,2 模块间联系的形式耦合性:,耦合性是软件结构中各个模块之间相互关联的度量,它取决于模块调用的方式、各个模块之间接口的复杂程度、以及通过接口的模块信息的性质
10、和方式。模块间的耦合性划分为以下七种形式:(1)非直接耦合(也称为偶然性耦合):两个模块之间没有直接的联系,它们的联系完全是通过上层模块的控制调用来实现的,这种模块之间的联系形式,模块的独立性最强;(2)数据耦合:模块之间仅有必不可少的数据参数传递,而不是通过控制参数、公共数据结构或外部变量来交换信息,这样的模块之间的联系接口简单、安全可靠,是一种松散的耦合形式;,(1)无直接耦合,模块1,模块2,模块3,模块6,(2)数据耦合举例,开发票,计算水费,单价数量,金额,(3)标记耦合(也称复合耦合):模块之间不是用简单变量,而是共用某种数据结构的部分或全部信息,并按该结构特点和要求对信息进行操作
11、,这些模块必须清楚该数据结构的形式和特点才能使用。这种耦合使操作复杂化了,如果将数据结构上的操作集中于一个模块内,就能消除这种耦合;(4)控制耦合:模块之间相互传递控制变量,如:开关、标志数据、名字等控制信息,明显地对模块进行选择、控制,实质是利用一个接口选择多功能模块的某项功能。对控制、被控制模块的修改都会相互发生影响,增加了编程和理解的复杂性,降低了模块的独立性;,标记耦合举例,计算水电费,计算水费,计算电费,住户情况,水费,电费,住户情况,“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.,将
12、标记耦合修改为数据耦合举例,计算水电费,计算水费,计算电费,本月用水量,本月用电量,水费,电费,控制耦合举例,A,计算平均分或最高分,B,平均/最高(控制信号),成绩,读入分数,输出结果,计算平均分,计算最高分,平均/最高?,B,控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖,去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调 用模块中进行(2)被调用模块分解成若干单一功 能模块,改控制耦合为数据耦合举例,A,计算平均分,B1,平均成绩,最高成绩,计算最高分,B2,(5)外部耦合:一组模块都访问同一个特定的外部数据块,受外部环境的制约,如:访问外
13、部变量名、共用通信协议、共享外部I/O资源,共享缓冲区等,这些模块之间的耦合成为外部耦合;(6)公共偶合:一组模块都访问同一个公共数据环境,共用全局数据区、内存覆盖区等,形成了公共耦合;它的复杂程度随着耦合模块的个数而迅速增加,应尽量避免这种高强度耦合的使用;(7)内容耦合:两个模块之间如果有下列情形之一,就发生了内容耦合:一个模块与另一个模块的内部代码重叠在一起;一个模块访问了另一模块的内部数据;一个模块不通过正常入口转移到另一模块的内部;一个模块有多个入口,容易从不同的渠道进入;这种耦合是最高程度的耦合。,公共耦合举例,公共数据区,C,B,模块A、B、C间存在错综复杂的联系,(1)软件可理
14、解性降低(2)诊断错误困难(3)软件可维护性差,(6)软件可靠性差(公共数据区及全程变量无保护措施),公共耦合存在的问题:,慎用公共数据区和全程变量!,(7)内容耦合,一模块直接访问另一模块的内部信息(程序代码或数据),最不好的耦合形式!,A,B,A,B,模块代码重叠,Entry1 Entry1,多入口模块,以上七种耦合程度由强到弱的排列顺序为:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。模块化设计的目标是希望建立模块间尽可能松散的系统,有利于系统的设计、编码、测试和维护,减小各个模块发生错误时的影响范围,集中设计、维护人员的主要精力,增加系统的可维护性。,耦合强度
15、依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度,模块间耦合性的强弱也取决于两个模块间接口方式和接口数据的复杂性,接口的复杂性和模块间的耦合性关系如下:,如何降低模块间耦合度:,(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围坚决避免使用内容耦合,(2)降低接口的复杂性,小结,因此,模块设计时应该通过模块调用来使用其它模块,不应该转入模块内部直接引用另一模块的内部信息,模块间传送的参数最好做数据传送,尽量减少使用或有控制地使用共用数据区信息和全程变量,模块间的接口尽可能的简单,减少联系的复杂性,提高模块的独立性,可以提高设计
16、软件的质量。,3 模块内部的联系形式内聚性:,内聚性是度量一个模块内各元素彼此结合的程度。如语句之间或程序段之间的联系。内聚性强,标志着模块的独立性强,内聚性弱,标志着模块的独立性差。内聚的程度取决于模块内各元素结合的形式,一般将内聚分为七种形式:(1)偶然内聚(也称为巧合内聚):模块内各部分元素间没有联系或没有直接的联系,就象偶然放在一起的联系形式,这种内聚性程度最低,往往是程序员为了节省内存,减少程序长度,将一些没有任何联系的、可能在许多模块中重复的语句堆放在一个模块内而形成的,这种模块的缺点是不易修改和维护,不易理解,增加了程序的模糊性,割裂了程序的完整逻辑,增加了出错的可能性;,(1)
17、偶然内聚(巧合内聚),模块内各部分间无联系,A,B,C,M,MOVE O TO RREAD FILE FMOVE S TO T,模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差,例:,(2)逻辑内聚:把几种相似的功能组合在一个模块内,调用时由传送的判定参数或开关参数来控制应执行那一种功能。它表明了模块内各部分的相关关系,有多种可供选择的功能,调用时需要由传递的参数控制,增加了模块间的耦合强度,不易修改,降低了系统的效率;,逻辑内聚模块,A,B,C,E,F,G,A,B,C,EFG,E、F、G逻辑功能相似,组成新模块EFG,缺点:增强了耦合程度(控制耦合)不易修改,效率低,(3)时间内聚
18、(也称经典内聚):软件运行时,有几个操作和处理需要在同一时间段内执行完成,这种内聚称为时间内聚。例如:对软件系统变量设置初值、设置文件的初始状态、现场状态的保护、系统终止时的操作,一般具有这种内聚的模块内各部分可以按任意顺序执行,内部逻辑较简单,判定较少,内聚程度稍高一些;例如:初始化系统模块、系统结束模块、紧急故障处理模块等,(4)过程内聚:模块内的各个处理是相关的,必须以特定的次序执行,模块内各部分具有的内部联系,象一个过程体一样。如统计数据时,先设置统计变量的初值,读入数据,接着进行数据统计和累加,并判断统计完成与否,由判定结果决定是否继续循环执行,循环、判定、计算这三部分是过程内聚,属
19、于中等强度的内聚,比较好理解和易于维护;,过程内聚模块,读入成绩单,审查成绩单,统计成绩,打印成绩,读入并审查成绩单,统计并打印成绩单,(5)通信内聚:模块内的各部分为完成功能都使用了相同的输入数据,或产生了相同的输出数据,这样的内聚形式属于中等强度,一般使用相同的输入输出缓冲区。如:打印表格时,需要读入文件、计算数据、打印多张表格的处理过程,不同的计算数据部分使用了相同的输入数据,这些计算数据部分之间的联系为为通信内聚的形式;,通信内聚模块例,产生工资报表,计算平均工资,职工工资记录,职工工资报表,平均工资,产生职工工资报表并计算平均工资模块,(6)顺序内聚:模块内各个部分的执行次序,是按指
20、定的顺序执行的,不能任意改变。往往前一功能成分的输出,就是后一功能成分的输入,这些功能成分与同一功能密切相关。如:读入数据、计算累加值,这两个功能成分密切相关,顺序不能颠倒,属于顺序内聚;(7)功能内聚:一个模块内的各部分成分是为完成某一具体功能必不可少的组成部分,或者说模块内的各个部分都是为完成某一具体功能而协同工作,紧密,联系,不可分割,这种模块内的联系成为功能内聚。这样的模块内聚程度最高,易于理解、修改和维护。,模块的内聚性类型,低 偶然内聚 0分 逻辑内聚 1分 内 时间内聚 3分 聚 过程内聚 5分 性 通信内聚 7分 顺序内聚 9分 高 功能内聚10分,模块独立性,弱(功能分散),
21、强(功能单一),小结:,内聚性和耦合性是密切相关的,高内聚性的模块往往是低耦合性的模块,但也有例外,而高耦合性的两个模块必然是低内聚性的模块。在一个软件系统分解成模块的时候,尽可能使分解的模块之间具有较低的耦合性,尽量用较高内聚性来确保模块的独立性,进行软件模块结构的设计,有利于程序的编写、调用和控制,也使得各模块的独立性更强。,4.1.3 软件设计的基本原则,(1)模块化原则:模块化就是采用抽象和分解的方法,按一定原则把软件划分成多个模块,每个模块完成一个子功能,将复杂的软件设计转换成相对简单的模块设计的过程;(2)抽象是人类认识复杂现象的思维工具,现实世界的一定事物、状态、过程间总是存在着
22、某些相似的方面共性,把这些共性集中概括,暂时忽略它们之间的差异的细节,提取共同的性质进行描述,就是抽象;(3)信息隐蔽原则:应该使分解得到的每个模块内包含的信息(如过程和数据)对于不需要这些信息的模块来说,是不能访问的,即进行模块的信息隐蔽;,(4)局部化原则:局部化就是把一些关系密切的软件元素物理地放得很近。如:在模块中使用局部化数据元素,有助于进行信息隐藏。有助于避免错误的传播,易于进行软件的维护;(5)模块独立性原则:模块的划分和设计,应尽可能保持独立。即:模块应该完成独立的功能,包含模块完成单一功能在内;模块间相互依赖的程度尽量要低;符合信息隐藏和信息局部化。它是模块化、抽象、信息隐藏
23、、信息局部化的直接产物;,(6)其它原则:软件工程强调软件开发过程的规范化和统一,要求软件系统的定义具有一致性:即各个元素使用统一、一致的符号,没有不必要的差异;对操作有一致的控制结构和调用序列;任一抽象层次中逻辑相关的对象表达是相同的结构形式;软件系统的完整性:系统内所有抽象成分的本质内容都明显地定义或描述了,没有本质的特性被遗漏,即保持系统的完整性,不丢失重要的特性;软件系统的确定性(可验证性):软件分解时应保证所有软件成分能够容易进行测试,定义应该是确定的,不存在二义性。,4.1.4 模块划分的启发性规则,(1)模块的大小要适中,易于模块的设计、阅读与理解,一般每个模块在保证完成系统功能
24、的前提下,模块大小为12页(60100行源程序)为好;(2)软件结构的特性参数要适当,即软件结构的深度、宽度、扇入、扇出数都应适当。深度表示软件结构纵向的控制层数,一般要求中规模软件小于等于10,小规模软件在57间,大规模软件可达几十,客观上深度初略地表示了软件的复杂程度。宽度表示软件结构同一层内模块数的最大值。一般在425,宽度越宽表示软件越复杂。扇出是一个模块直接调用和控制的模块数,一般在39间。太多时可通过增加中间层来减少扇出数。扇入是一个模块直接调用与控制的上级模块数,一般在15间,扇入数太多时,同样可用增加深度的方法来减少扇入数;扇入、扇出与宽度相关,而调整中又涉及到结构深度的改变。
25、因此软件结构特性的参数应适当,并与模块的独立性原则一致;,参数举例:深度:5 宽度:5A的扇出:3 M的扇入:3,(3)模块的接口尽量是单入与单出口,避免出现模块的内容耦合,降低接口成本,也有利于软件的理解和维护;(4)保证模块的功能可以预测,即当有确定的输入时,不论模块中的具体实现路径如何,应该有确定的可预期的输出结果,有利于进行软件的测试;,(5)模块的作用域应在模块的控制域之内,减弱模块间的耦合。作用域是指受该模块影响的所有模块,即直接调用的模块数;控制域是指受这个模块直接和间接控制调用的模块数。如果作用域超出范围,就要重新划分与调整,作用范围通常通过判定而影响的,判定的作用范围应在该判
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 安全 架构 设计

链接地址:https://www.31ppt.com/p-6206800.html