《软件工程》各章节重点_第1页
《软件工程》各章节重点_第2页
《软件工程》各章节重点_第3页
《软件工程》各章节重点_第4页
《软件工程》各章节重点_第5页
已阅读5页,还剩206页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

--软件设计软件工程内容提要软件设计根底原理概要设计详细设计软件设计软件设计是软件开发的最重要阶段;是保证软件质量的重要步骤;软件设计是把用户需求准确转化为软件系统的唯一途径。软件设计软件设计是把软件需求转换为软件表示的过程。它包含两个阶段:概要设计 将软件需求转化为数据结构和软件的系统结构。详细设计 通过对结构表示进行细化,得到软件详细的数据结构和算法。软件设计的根底概念软件结构软件结构包括两局部,一是软件模块的层次结构;二是数据的结构。通常软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统模型出发,对整个问题进行分解,使其每一局部用一个或几个软件成分加以解决,从而解决整个问题。该过程可用以下图形象表示:P1P2P3S1S2S3软件设计的根本原理抽象模块化逐步求精信息隐藏与局部化模块的独立性抽象抽象,即析取出事物的本质特征而不考虑他们的细节。抽象是人类认识复杂问题的重要思维工具之一。抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象。下层概念是上层概念的精化和细化。模块化模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问的。例如,过程。函数、子程序、宏等等都可作为模块。模块具有三个根本属性:功能—模块实现的功能逻辑—描述模块内部怎么做状态—模块使用时的环境和条件模块化模块的特征:内部特征—模块的名字、参数等;外部特征—完成模块功能的程序代码和模块内部数据。模块化,即把软件按照规定原那么,划分为一个个较小的,相互独立的但又相互关联的部件。模块化实际上是系统分解和抽象的过程。模块化理想的模块每个模块只解决一个问题;每个模块的功能应该明确,使人容易理解;模块之间的联结关系简单,具有独立性;用理想模块构建的系统,容易使人理解,易于编程,易于测试,易于修改和维护。对用户来说,其感兴趣的是模块的功能,而不必理解模块内部的结构和原理。模块化的理论依据设函数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)。模块化的理论依据此不等式说明:单独解决问题P1和P2所需的工作量之和,比把P1和P2合起来作为一个问题来解决所需要的工作量要少。这种“分而治之〞的思想提供了模块化的理论依据:把复杂问题分解成许多容易解决的小问题,那么原来复杂的问题也就容易解决了。模块化与软件本钱本钱或工作量模块数目模块本钱接口本钱最小本钱区软件总本钱αM模块化采用模块化原理使软件结构清晰,不仅容易设计也容易阅读和理解:因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易调试和测试,有助于提高软件的可靠性;因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性;模块化也有助于软件工程的组织管理,一个复杂的大型软件可以有许多程序员分工编写,进而提高了开发效率。逐步求精逐步求精是人类解决复杂问题的根本技术之一,它是把问题的求解过程分解成假设干步骤或阶段,每步都比上步更精化,更接近问题的解法。为了能集中精力解决主要问题而尽量推迟问题细节的考虑。它可以看作是一项把一个时期必须解决的种种问题按优先级别排序的技术。逐步求精和抽象是一对互补的概念。信息隐藏和局部化应用模块化原那么,自然会产生一个问题“为了得到一组模块,应该怎样分解软件呢?〞信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息对不需要这些信息的模块来说是不能访问的。局部化指把一些关系密切的软件元素放得彼此靠近。显然,局部化有助于信息隐藏。信息隐藏和局部化实际上应该隐藏的不是模块的一切信息,而是模块的实现细节。因此这条原理也被称作“细节隐藏〞。隐藏,意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。信息隐藏和局部化有助于软件测试和维护!模块独立性模块独立性是模块化、信息隐藏和局部化等概念的直接结果。为什么模块独立性很重要?有效模块化的软件比较容易开发出来;独立的模块比较容易测试和维护。总之,模块独立是设计好坏的关键!模块独立的含义:模块完成独立的功能,与其他模块的接口简单;符合信息隐蔽和信息局部化原那么;模块间关连和依赖程度尽可能小。模块独立的度量模块的独立程度可由两个定性标准来衡量:耦合 耦合衡量不同模块彼此间相互依赖的紧密程度;内聚 内聚衡量同一模块内部各元素彼此组合的紧密程度;耦合性耦合是程序结构内不同模块之间相互关联的度量,是影响软件复杂程度和设计质量的重要因素。耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块控制的数量模块间接口的复杂程度设计目标:低耦合(建立模块间耦合尽可能松散的系统)耦合度耦合性模块独立性数据耦合控制耦合公共环境耦合内容耦合特征耦合外部耦合非直接耦合非直接耦合(NodirectCoupling)两个模块没有直接关系(模块1和模块2),它们之间的联系完全是通过主模块的控制和调用来实现,非直接耦合是模块独立性最强的。模块1模块2模块3模块4主模块数据耦合(DataCoupling)一模块调用另一模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构和外部变量)来交换输入、输出信息。属松散耦合。开发票计算水费单价数量金额特征耦合(StampCoupling)如两个模块之间是通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,那么称这两个模块间存在特征偶合。计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况〞是一个数据结构,图中模块都与此数据结构有关。“计算水费〞和“计算电费〞本无关,由于引用了此数据结构产生依赖关系,它们之间就是特征偶合。特征耦合将特征耦合改为数据耦合:计算水电费计算水费计算电费本月用水量水费电费本月用电量控制耦合(ControlCoupling)一模块向下属模块传递的信息控制了被调用模块的内部逻辑。如开关量、标志、名称等控制决策的变量,控制选择了被调用模块的功能。AFlagF1F2FnFlag……..B控制耦合举例-1PROCA(){

//调用B,使用其功能1 B(x,y,1) //调用B,使用其功能2 B(x,y,2)}PROCB(a,b,flag){ docase caseflag=1 功能1 caseflag=2 功能2

endcase}控制耦合举例-2AB计算平均分或最高分平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了模块间的相互依赖关系。去除模块间控制耦合的方法:将被调用模块内的判定上移到调用模块中进行;被调用模块分解成假设干单一功能模块。控制耦合修改控制耦合为数据耦合:AB1计算平均分平均成绩B2计算最高分最高成绩外部耦合(ExternalCoupling)一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。公共环境耦合一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。其中,公共数据区指:全局数据结构共享的通讯区内存的公共覆盖区等A公共数据区CB公共环境耦合公共耦合的复杂程度随耦合模块的个数增多而显著增加。假设只有两个模块间存在公共数据环境,那么公共耦合有两种情况,松散公共耦合和紧密公共耦合。AB公共数据区AB公共数据区a.松散公共耦合b.紧密公共耦合公共环境耦合存在的问题软件可理解性降低诊断错误困难软件可维护性差,软件可靠性差 公共数据区及全程变量无保护措施慎用公共数据区和全程变量!!!内容耦合(ContentCoupling)如果发生以下情形之一,两模块之间就产生了内容耦合:一个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块的内部;两个模块有局部程序代码重叠;一个模块有多个入口。一模块直接访问另一模块的内部信息(程序代码或数据〕ABAB模块代码重叠Entry1……Entry2……多入口模块如何降低模块间耦合度①尽量使用数据耦合少用控制耦合限制公共环境耦合的范围坚决防止使用内容耦合②降低接口的复杂性内聚性内聚指一个模块内部元素在功能上相互关联的强度(彼此结合的紧密程度),它是信息隐藏和局部化概念的扩展。设计目标: 高内聚(模块在软件过程中完成单一的任务)内聚性模块独立性偶然内聚逻辑内聚时间内聚过程内聚通信内聚信息内聚功能内聚内聚性偶然内聚(ConcidentalCohesion)含义:模块内各局部之间没有联系,或者即使有联系,这种联系也很松散。如:A、B两个模块含有相同的一段代码C,程序员为了节约内存,而将A、B放在同一模块内,以共享C,模块AB即为偶然内聚。缺点:可理解性差,可修改性差CCABCAB偶然内聚例子ABCMOVEOTORREADFILEFMOVESTOTM模块M中的三个任务没有任何联系逻辑内聚(LogicalCohesion)把几种相关的功能〔逻辑上相似的功能〕组合在一模块内,每次调用时,由传给模块的判定参数来确定该模块应执行哪一个功能。!逻辑内聚导致模块间的控制耦合调用模块判定读一个记录写一个记录被调用模块AMBCEFGAMBCEFGE、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合(控制);不易修改,效率低A1B1C1EFG模块内部逻辑公用代码段公用代码段逻辑内聚例子时间内聚(ClassicalCohesion)这种模块大多为多功能模块,但模块内的各个功能的执行与时间有关,通常要求所有功能必须在同一时间内执行,这些功能只因时间因素关联在一起。例如:系统初始化模块、系统结束模块、紧急故障处理模块等均是时间性内聚模块.过程内聚(ProceduralCohesion)模块内各处理成分相关,且必须以特定次序执行。 使用流程图作为工具设计程序时,把流程图中的某一局部划出来组成模块,就得到过程内聚模块。例如,把流程图中的循环局部、判定局部、计算局部分成三个模块,这三个模块都是过程内聚模块。读入成绩单读入并审查成绩单审查成绩单统计成绩打印成绩统计并打印成绩单通信内聚

(CommunicationCohesion〕如果一个模块内各功能局部使用了相同的输入数据,或产生了相同的输出结果,那么称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。打印报告A打印报告B打印报告C计算A计算B保存学生信息通信内聚例子产生职工工资报表并计算平均工资模块产生工资报表计算平均工资职工工资记录职工工资报表平均工资A结果B结果文件读文件打印检验结果计算A计算B读卡片文件合并修改文件A/B卡片A/B数据新文件获得A/B数据加工记录通信内聚例子信息内聚(InformationalCohesion)模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一的入口点。这个模块将根据不同的要求,确定该执行哪个功能。由于这个模块的所有功能都基于同一个数据结构(符号表),因此,它是一个信息内聚模块信息内聚例子符号表查找登录删除修改功能内聚(FunctionalCohesion)一个模块中各个局部都是完成某一具体功能必不可少的组成局部,或者说该模块中所有局部都是为了完成一项具体功能而协同工作,紧密联系,不可分割。内聚性最强!耦合与内聚的关系内聚与耦合密切相关,同其它模块强耦合的模块意味着弱内聚,强内聚模块意味着与其它模块间松散耦合。耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚那么辅助耦合共同对模块独立性进行衡量。内聚度耦合度概要设计概要设计的根本目的概要设计的根本任务概要设计过程结构化设计方法面向数据流的设计方法概要设计工具层次图和HIPO图结构图概要设计的根本目的概要设计的根本目的就是答复“概括的说,系统应该如何实现?〞概要设计的根本任务确定软件系统的结构和数据库结构划出组成系统的物理元素:程序、文件、数据库、人工过程和文档等等;设计软件结构,即确定系统由哪些模块组成,以及这些模块之间的相互关系(接口)。概要设计的主要工作是:完成模块分解即每个模块的功能说明!概要设计过程设想供选择的方案选择合理的方案推荐最正确方案功能分解设计软件结构数据库设计制订测试方案编写文档审查和复审设想供选择的方案在概要设计开始时,只有系统的逻辑模型,分析人员有充分的自由比较分析不同的物理实现方案。设想供选择的方案的一种通常的做法是,设想数据流图中的处理分组的各种可能的方法,抛弃技术上行不通的分组方法,余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。选取合理的方案在数据流图的根底上,一个边界一个边界设想并列出可供选择的方案。通常,选择的这些方案中至少应包括低本钱、中本钱和高本钱的三种方案;对每个合理方案要提供以下几方面资料:系统流程图;数据字典;本钱、效益分析;实现这个系统的进度方案。推荐最正确方案分析人员应该在综合分析比照各种合理方案利弊,推荐一个最正确方案,并为推荐的方案拟定详细的实现方案。用户和有关的技术专家应该认真审查分析员所推荐的最正确系统,如果系统符合用户的需求,并且在现有条件下完全能够实现的。那么应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员的推荐方案之后,才可以进入下一个环节。对分析结果进一步细化,再进行功能分解。P2P5P3P4P1需要通过软件解决的“问题〞S1S2S3S4S5软件的“解决方案〞功能分解设计软件结构软件结构反映系统中模块的相互调用关系:顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,最下层的模块完成最具体的功能;软件结构通过层次图或结构图来描述,可以直接从DFD映射出软件结构。数据库设计数据库应用越来越广泛,目前大多数的系统都要用到数据库技术。数据库设计是一项专门的技术,包括模式设计、子模式设计、完整性和平安性设计和优化处理等。制订测试方案在软件开发的早期阶段提前考虑软件的测试方案是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。文档编写概要设计阶段需要编写的文档包括: 系统说明书;用户手册; 测试方案;详细的实现方案; 数据库设计结果;审查与复审最后应该对概要设计的结果进行严格的技术审查,然后再提交使用部门负责人从管理角度进行审查。概要设计准那么改进软件结构提高模块独立性模块适当的深度、宽度、扇出和扇入模块判断作用范围应在其控制作用范围内力争降低模块接口的复杂度设计单入口单出口的模块模块功能应该是可以预测的改进软件结构提高模块独立性设计出软件的初步结构以后,应该审查分析该结构,通过模块分解或合并,力求降低耦合提高内聚。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时也可以通过分解或合并模块以减少信息传递对全局数据的引用,并降低接口的复杂性。模块大小适中,一般一个模块包含的语句在30~50条左右较好。模块适度的宽度、深度、扇出和扇入深度:软件结构中模块的层数宽度:软件结构内同一层的模块总数的最大值扇出:一个模块所调用(直属下级)的模块个数(控制在7以内)扇入:有多少上级模块调用它经验证明,一个设计好的软件结构,通常顶层扇出比较高,中层扇出比较少,底层有高扇入。模块适当的深度、宽度、扇出、扇入MabcdelmfghnopqijrDepthFan-inFan-outWidth控制作用范围:本身及其所有下级模块判断作用范围:被判断调用的模块对于任何一个内部存在判断调用的模块,它的判断作用范围应该是其控制作用范围的一个子集;ABCDEFG模块G中有一条判断调用模块D的语句。判断作用范围应在控制作用范围内存在判断调用的模块所在层次不要与那些属于判断作用范围的模块所在的层次相隔太远。ABDGEFC模块C中有一条判断调用模块G的语句。相隔太远正确ABDGCFE判断作用范围应在控制作用范围内力争降低模块接口的复杂性模块接口的复杂度是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致〔即看起来传递的参数之间没有联系〕,是高耦合和低内聚的征兆,应该重新分析这个模块的独立性。设计单入口单出口的模块即不要使模块间出现内容耦合模块功能应该是可以预测的只要输入的数据相同就产生相同的输出数据,这个模块的功能就是可以预测的;模块的功能应该可以预测,但也要防止模块功能过分局限。概要设计工具层次图(HierarchyChart

)输入/处理/输出图(IPO)HIPO图结构图(StructureChart)层次图层次图用来描绘软件的层次结构的图形工具。正文加工系统输入输出编辑加标题存储检索编目录格式化添加删除插入修改合并列表IPO图HC图中的每一个模块,均可用一张IPO图来描述。IPO图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框。IPO图在需求分析阶段主要用来描述系统的主要算法。

IPO图例子(班务管理系统)

未缴班费处理添加新的缴费学生名单出错信息记录不符合1将合格标志送回上一级2调用模式3将核对的记录记入文件4修改学生记录5添加学生记录1核对学号和原有学生记录2核查学生缴费状况3处理过程1上组模块送入学生数据2读取原有学生记录3读取学生学号4学生所缴班费输出部分O处理部分P输入部分I使用单位教务处和班主任模块名称财务信息查询IPO图1财务查询IPO图1表示了财务查询系统,它讲述如何查询学生缴费情况,并且验证其是否准确HIPO图HIPO图即HC加IPO层次图加上编号称为H图。在层次图的根底上,除最顶层的方框之外,其余每个方框都加了编号。层次图中每一个方框都有一个对应IPO图(表示模块的处理过程)。每张IPO图应增加编号与其表示的(对应的)层次图编号一致。正文加工系统输入1.0输出2.0编辑3.0加标题4.0存储5.0检索6.0编目录7.0格式化8.0添加3.1删除3.2插入3.3修改3.4合并3.5列表3.6结构图(SC)结构图是SD方法在概要设计中的主要表达工具约定:一个方框代表一个模块,框内注明模块的名称或主要功能;方框之间的箭头表示模块的调用关系;尾部带空心圆的短箭头表示数据信息,尾部带实心圆的短箭头表示控制信息。数据信息控制信息结构图例1:编辑学生记录读学生记录学生数据无此学生学号结构图例2:产生最正确解得到好输入计算最正确解输出结果读输入编辑输入结果格式化显示结果解解解好输入原始输入编辑结果原始输入格式化的解格式化的解ACBD结构图结构图中还有一些附加符号,来表示模块的选择调用和循环调用:A根据内部判断决定是否调用BA按另一判定结果选择调用C或DABCA根据内在的循环重复调用B、C等模块提示层次图和结构图并不严格表示模块的调用次序,也不指明什么时候调用下层模块,他们仅仅表示一个模块调用那些模块,至于模块内有无其他成分那么完全没有表示。通常用层次图作为描述软件结构的文档。结构图作为文档并不适宜,因为图中包含信息过多,有时反而降低了清晰程度。但是,结构图可以作为检查设计正确性和评价模块独立性的好方法。面向数据流的设计方法面向数据流的设计方法〔结构化设计方法〕概述变换流与事务流变换分析事务分析面向数据流的设计方法面向数据流的设计方法以数据流图为根底,它定义了把数据流图变换成软件结构的不同映射方法。因为任何系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计出任何软件的系统结构。数据流类型决定了映射方法。数据流有变换流和事务流两种根本类型。软件结构也被划分为变换型结构、事务性结构两种类型。变换流外部表示内部表示信息时间信息流输入流输出流变换流信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息通过变换中心,经过加工处理后再沿输出通路变换为外部形式离开软件系统。特点:从同一数据源进入系统的数据,它在DFD中流动的逻辑路径是相同的。事务流数据沿输入通路到达一个处理(事务中心)这个处理根据输入数据的类型在假设干个动作序列中选出一个来执行。这种以“事务为中心〞的数据流,称为“事务流〞;事务中心完成:接受输入数据;分析每个事务以确定它的类型;根据事务类型选取一条活动通路。事务中心事务DFD类型输入输出事务中心接受路径动作路径事务型结构由输入、变换中心和输出三局部组成具有在多种事务中选择执行某类事物的能力变换型数DFD事务型DFD变换中心变换型结构根本结构特征映射变换型DFD变换中心传入局部传出局部总控模块加工模块输入模块输出模块变换型SC输入加工输出映射映射事务型DFD动作1事务中心接受局部接受事务事务分析动作2动作3事务中心调度模块接受事务输出模块动作2动作1动作3映射事务型SC提示大型系统的数据流图中,变换型和事务型结构往往共存:T传入变换传出事务中心面向数据流的设计过程精化DFD确定DFD类型把DFD映射到系统模块结构设计出模块结构的上层基于DFD逐步分解高层模块设计出下层模块根据模块独立性原理,精化模块结构模块接口描述面向数据流方法中两种映射过渡方法变换型DFD事务型DFD初始SC初始SC变换分析事务分析变换分析步骤确定输入流和输出流的边界,孤立出变换中心在数据流图上标明分界线Aabcedrpuwv变换中心传入部分传出部分BCDEPRQWUV变换分析步骤第一级分解(建立初始结构图框架)设计顶层和第一层模块MCMTMAME总控模块初始的SC第一层分解后的结构图-1MCMTMAME第一层顶层c,ec,eu,wu,w传出模块中心变换模块传入模块第一层分解后的结构图-2MCMA1ceu,wc,pMA2QPRME1eprrw,uw传入分支模块中心加工分支模块传出分支模块ME2变换分析步骤第二级分解: 自顶向下分解,设计出每个分支的中、下层模块方法从变换中心的边界开始沿输入通路向外移动,把输入通路中每个处理逻辑映射成软件结构中MA控制的一个下层模块;然后沿输出通路向外移动,把输出通路中每个处理逻辑映射成直接或间接受模块ME控制的一个底层模块;最后把变换中心内的每个处理映射成受MT控制的一个模块。传入分支的分解MACBAbacEDdec,e(1)c,eMAGetCGetBReadAbacGetEReadDdeDtoEBtoCAtoBbcdeab(2)传出分支的分解MEWPutUWriteVuuw,uUtoVvvvMEUWriteWwwuw,uV(1)(2)中心加工分支的分解MTPQRec,pru,wpr变换分析实例某校欲设计“成绩录入〞程序,由录入员输入成绩信息(学号+课程代码+成绩),对程序要求如下:查询是否有该学生查询该学生的班级信息查询教学方案信息查询成绩是否重复录入在核对以上信息后保存该成绩信息。成绩信息成绩库姓名班级信息课程信息成绩信息成绩录入精化数据流图管理员输入成绩查询学生查询班级查询教学方案查询成绩成绩信息成绩信息成绩信息成绩信息显示姓名显示班级显示课程保存成绩姓名班级信息课程信息教学方案班级信息学生信息无此学生报告无此班级报告无此课程报告重复输入报告姓名班级信息课程信息成绩信息划界的数据流图管理员输入成绩查询学生查询班级查询教学方案查询成绩成绩信息成绩信息成绩信息成绩信息成绩信息显示姓名显示班级显示课程保存成绩姓名班级信息课程信息成绩库教学方案班级信息学生信息无此学生报告无此班级报告无此课程报告重复输入报告输出加工输入成绩录入上层模块图主模块查询输出成绩录入如果输入或输出模块已经是原子模块,那么不必进一步细化;如果输入和输出模块不需要变换数据,那么输入和输出不需设计下层模块;如果有多种输入或输出,那么这些输入或输出模块作为输入和输出模块的下层模块。进一步分解的规那么成绩录入结构二次分解主模块查询输出成绩录入查询学生查询班级查询教学计划查询重复显示姓名显示班级显示课程保存成绩事务分析事务分析的设计步骤和变换分析的设计步骤大局部相同或类似,主要差异仅在由数据流图到软件结构图的映射方法不同。由事务流映射成软件结构包括一个接受分支和一个发送分支。映射出接受分支结构的方法和变换分析映射出输入结构的方法相似,即从事务中心的边界开始,把沿着接受流通路的处理逻辑模块映射成模块。发送分支的结构包含一个调度模块,它控制下层的所有活动模块;然后把DFD中的每个活动流通路映射成与它的特征相对应的结构。事务分析步骤在数据流图上确定事务中心、接收局部和发送局部。画出结构图框架,把数据流图上的三局部分别映射为事务控制模块、接收模块和动作发送模块。分解细化接收分支和发送分支,完成初始结构图。初始的SC事务控制模块接受模块动作发送模块动作1模块动作2模块动作3模块由事务分析产生主模块调度模块事务分析的映射方法总控调度C通路B通路A通路TA通路B通路C通路接收路径事务分析举例ILMNABCDFEG事务中心事务流设计举例取A总控ALMNGDBCFE〔主模块〕调度动作分支的典型结构PT2T1TiA2D2A1D1A3AjDk事务层操作层细节层处理层调度模块事务加工模块操作模块细节模块事务型数据流图举例ILMONABCDFEGH总控输入A变换控制ALMNAGDBCFE输出E、F、GE、F、GE、F、G输出HOE、F、GHH事务型数据流图举例事务型分析实例某校欲设计“收费查询〞系统,该程序可以为学生和管理人员效劳,由录入员和管理员输入查询请求,即可查出学生的缴费情况,要求做到:按学号查询按姓名查询按专业查询按班级查询精化数据流图录入员接受查询分析查询按学号查询按姓名查询按专业查询按班级查询查询信息查询信息学号姓名专业班级学生管理员缴费清单缴费清单缴费清单缴费清单得出程序结构首先应设计出事务中心模块,对整个事务进行控制。从数据流图可看出,“分析查询〞处理是事务调度中心,可以设计为事务调度模块。由四个事务处理,分别为其设计事务处理模块。输入模块为“接受查询〞。事务中心接受查询调度输出查询结果按学号查询按姓名查询按专业查询按班级查询混合流分析-例13412675810911变换中心传入传出事务型混合流分析-例2T传入变换传出事务中心接收局部发送部分混合流分析-例3AB变换中心传入传出abb1b2b3c1c2c3BCT1T2CDT3DEEHFJLMKLdegfjLm事务流子系统HKhk混合流分析—例4XX系统输入D变换控制输出K输入Cdc输出LCDDEFJEHHKKLcddkkkLL输出MLMmmL事务子系统de,f,g提示对于一个大型系统,常常把变换分析和事务分析应用到同一个数据流图的不同局部,由此得到的子结构形成“构件〞,可以利用它们构造完整的软件结构;一般来说,如果数据流不具有显著的事务特点,使用变换分析;反之,假设具有明显的事务中心,那么应该采用事务分析技术。设计优化考虑设计优化问题时,应该记住“一个不能工作的‘最正确设计’的价值是值得疑心的〞。应该在设计的早期阶段对软件结构进行精化、优化。可以导出不同的软件结构,并对它们进行评价和比较,力求得到“最好〞的结果。注意,简单的结构通常既表示优雅的设计风格,又表示高效率。设计优化应该力求做到在有效模块化的前提下使用最少的模块,以及在能够满足系统数据要求的前提下,使用最简单的数据结构。阶段性成果系统说明书用户手册测试方案详细的实现方案数据库设计文档……详细设计内容提要详细设计根底结构化程序设计方法详细设计工具流程图〔FC〕盒图图〔NS〕PAD图程序设计语言判定表判定树详细设计说明书设计复审详细设计又称过程设计,在概要设计阶段,已经确定了软件系统的总体结构,给出系统中各个组成模块的功能和模块间的联系。这一步的工作,就是要在上述结果的根底上,考虑“怎样实现〞这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述。需要指出,这些描述应该用详细设计的表达工具来表示,因它们还不是程序,一般不能够在计算机上运行。详细设计提示详细设计是编码的先导。这个阶段所产生的设计文档的质量,将直接影响下一阶段程序的质量。为了提高文档的质量和可读性,本章除要说明详细设计的目的、任务与表达工具外,还将扼要介绍结构程序设计的根本原理,以及如何用这些原理来指导模块内部的逻辑设计,提高模块控制结构的清晰度。对于功能较简单的系统开发,概要设计之后可以跳过详细设计直接进行编码。详细设计的目的详细设计的目的是为软件结构图〔SC图或HC图〕中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。表达工具可以由开发单位或设计人员选择,但表达工具必须具有描述过程细节的能力,进而可在编码阶段能够直接将它翻译为用程序设计语言书写的源程序。详细设计的任务为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,编写模块的详细过程性描述;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。在详细设计结束时,应该把上述结果写入详细设计说明书,并且通过复审形成正式文档。交付给下一阶段〔编码阶段〕的工作依据。详细设计的任务要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码〔即程序〕进行测试。模块的测试用例是软件测试方案的重要组成局部,通常应包括输入数据,期望输出等内容。由于负责详细设计的软件人员对模块的功能、逻辑和接口最清楚,所以由他们提出对各个模块的测试要求最为适宜。详细设计的原那么模块的逻辑描述要清晰易读、正确可靠。选择恰当描述工具来描述各模块算法。采用结构化设计方法,改善控制结构,降低程序的复杂程度,从而提高程序的可读性、可测试性、可维护性。其根本内容归纳如下:程序语言中应尽量少用GOTO语句,以确保程序结构的独立性。使用单入口单出口的控制结构,确保程序的静态结构与动态执行情况相一致。保证程序易理解。程序的控制结构一般采用顺序、选择、循环三种结构来构成,确保结构简单。用自顶向下逐步求精方法完成程序设计。结构化程序设计的缺点是存储容量和运行时间增加10一20%,但可读性和可维护性好。详细设计的方法--结构程序设计方法结构程序设计的概念最早由提出。1965年他在一次会议上指出“可以从高级语言中消除goto语句〞,“程序的质量和程序中所包含的goto语句的数量成反比〞。1966年Bohm、Jacopomo证明了只用三种根本的控制结构—顺序、选择、循环,就能实现任何单入口单出口程序。结构程序设计方法实际上用顺序和循环结构〔do-while〕完全可以实现选择结构〔if-then-else〕因此理论上最根本的控制结构只有两种。ABExpBTFExpTFAB结构程序设计方法随着对高级语言中是否取消GOTO语句讨论的深入,人们逐渐认识到:不是简单去掉GOTO语句,而是要建立一种新的程序设计思想、方法和风格,以显著的提高软件生产率和降低软件维护代价。成功的工程实践:纽约时报信息库管理系统美国宇航局空间实验室飞行模拟系统 验证了结构设计方法的有效性。结构程序设计方法1972年Mills进一步指出:程序应该只有一个入口和一个出口,补充了结构程序设计的规那么。结构程序设计的定义经典定义 “如果一个程序的代码块仅仅通过顺序、选择和循环这三种根本控制结构进行连结,并且每个代码块只有一个入口和一个出口,那么称这个程序是结构化的。〞上述经典定义过于狭隘,结构程序设计的实质并不是无goto语句的编程方法,而是一种使程序代码容易阅读、容易理解的编程方法。为此我们给出如下定义: “结构程序设计是尽可能少用goto语句的程序设计方法。最好在检测出错误时才使用goto语句。〞结构程序设计虽然理论上上述三种根本控制结构就可以实现任何单入口单出口的程序,但是为了实际使用方便起见,常常允许使用do-until和do-case结构:ExpTAFDoCaseiCASE1CASEn……结构程序设计有时要立即从循环中转移出来,如果允许使用leave或break结构,那么不仅方便而且高效。Leave和break实质是受限制的goto语句。详细设计工具如何用一种适宜的表示方式来描述每个模块的执行过程? 目前常用的描述方式一般有三类,即图形描述、语言描述和表格描述:图形描述包括程序流程图、盒图、问题分析图等;语言描述,即用某种高级语言〔称之为伪码〕来描述过程的细节。表格描述包括判定表等。程序流程图程序流程图又称之为程序框图,它是软件开发者最熟悉的一种算法表达工具。它独立于任何一种程序设计语言,能比较直观和清晰地描述过程的控制流程,易于学习掌握。因此,程序流程图是软件开发者最普遍采用的一种工具。程序流程图在程序流图中定义了下述的五种根本控制结构:顺序型选择性While型循环Until型循环多情况型选择程序流程图顺序型由几个连续的处理步骤依次排列构成选择型是指由某个逻辑判断式的取值决定选择两个处理中的一个ABABP程序流程图while型循环是先判定型循环,在循环控制条件成立时,重复执行特定的处理until型循环是后判定型循环,重复执行某些特定的处理,直到控制条件成立为止SPSP程序流程图多情况型选择列举多种处理情况,根据控制变量的取值,选择执行其一。A1PPPA2An……程序流程图的主要缺点程序流程图本质上不是逐步求精的好工具,它诱使程序员过早考虑程序控制流程,而不去考虑程序的全局结构。程序流图中用箭头表示控制流,因此程序员不受任何约束,可以完全不顾结构程序设计思想,随意转移控制。程序流程图不易表示数据结构。N-S图Nassi和Shneiderman提出了一种符合结构化程序设计原那么的图形描述工具,称之为盒图〔N-S图〕。在N-S图中,为了表示五种根本控制结构,规定了五种图形构件:顺序型结构选择型结构While重复型循环结构Until重复型循环结构多分支选择型结构N-S图顺序型选择型多分支选择型ABTFPS1S2While循环结构Until型循环结构TFPSDO-WHILEPSDO-UNTILPSP=1=2=nS1S2S2…………N-S图另外,补充调用子程序的盒图表示方法如下:AN-S图例1:AX1TFX2TFDO-WHILEX2CDBN-S图ajbX1fX2X4=1=2=3ighcdeTTFFDO-UNTILX5DO-UNTILX6DO-WHILEX3例2:N-S图的特点图形清晰、准确;控制转移不能任意规定,必须遵守结构化程序设计原那么;很容易确定局部数据和全局数据的作用域;容易表现嵌套关系和模块的层次结构。PAD图PAD是Problemanalysisdiagram的英文缩写,它是日本日立公司提出的。它是用结构化程序设计思想表现程序逻辑结构的图形工具。PAD也设置了五种根本控制结构的图示,并允许递归使用:PAD图按顺序先执行A,再执行B。给出了判断条件为C的选择型结构。当P为真值时执行上面的A框,C取假值时执行下面的B框中的内容。如果这种选择型结构只有A框,没有B框,表示该选择结构中只有THEN后面有可执行语句A,没有ELSE局部。ABAB条件CPAD图WHILECPUNTILCPWhile型循环结构Until型循环结构PnP2P1多分支选择型结构PAD图的扩充结构为了反映增量型循环结构,在PAD图中增加了对用于FORi:=n1ton2stepn3do的循环控制结构,如以下图所示。其中,n1是循环初值,n2是循环终值,n3是循环增量。I=n1,n2,n3SPAD图的扩充结构PAD所描述程序的层次关系表现在纵线上。每条纵线表示一个层次。把PAD图从左到右展开,随着程序层次的增加,PAD逐渐向右展开,有可能会超过一页纸,这时,对PAD增加了一种如以下图所示的扩充形式:当一个模块A在一页纸上画不下时,可在图中该模块相应位置矩形框中简记一个“NAMEA〞,再在另一页纸上详细画出A的内容,用def及双下划线来定义作A的PAD。这种方式可使在一张纸上画不下的图,分在几张纸上画出,也可以用它定义子程序。defP1P2条件CSNAMEANAMEAP1C1C2I=n1,n2,n3PAD图的特点PAD图的结构化程度高;PAD图中的第一条纵线是程序的主干线,即程序的第一层结构。其后,每增加一个层次,那么向右扩展一条纵线。程序中的层数就是PAD图中的纵线数。因此,PAD图的可读性强。利用PAD图设计出的程序必定是结构化的程序。利用软件工具可以将PAD图转换成高级语言程序,进而提高了软件的可靠性和生产率。PAD图支持自顶向下的逐步求精的方法。PDL—过程设计语言PDL〔ProcedureDesignLanguage〕是过程设计语言的英文缩写,于1975年由Caine与Gordon首先提出。PDL是所有非正文形式的过程设计工具的统称,到目前为止已出现多种PDL语言。PDL的特点关键字采用固定语法并支持结构化构件、数据说明机制和模块化;处理局部采用自然语言描述;可以说明简单和复杂的数据结构;子程序的定义与调用规那么不受具体接口方式的影响。选择结构IF<条件> 一条或数条语句ELSEIF<条件> 一条或数条语句ELSEIF<条件> 一条或数条语句ELSE 一条或数条语句ENDIF循环结构While循环结构Until循环结构For循环结构DOWHILE<条件描述> 一条或数条语句ENDWHILEREPEATUNTIL<条件描述> 一条或数条语句ENDREPFOR<循环变量>=<取值范围,表达式或序列> 一条或数条语句ENDFOR子程序 PROCEDURE<子程序名><属性表> INTERFACE<参数表> 一条或数条语句 END 其中,属性表指明了子程序的引用特性和利用的程序语言的特性。输入输出READ/WRITETO<设备><I/O表>PDL评价优点可以作为注释直接插在源程序中;可以使用普通的文本编辑工具或文字处理工具产生和管理;已经有自动处理程序存在,而且可以自动有PDL生成程序代码。缺乏不如图型工具形象直观,描述复杂的条件组合与动作间对应关系时,不如判定表、判定树清晰简单。当模块中包含复杂的条件组合时,并要根据这些条件选择动作时,系统流程图、盒图、PDL语言都有一定缺陷。这时我们可以采用判定表、判定树来描述。判定表判定表有四局部组成:所有条件、所有动作、条件组合及其对应动作。所有条件条件组合所有动作相应动作判定表例子假设某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重局部每公斤收费4元,对其它舱的国内乘客超重局部每公斤收费6元,对外国乘客超重局部每公斤收费比国内乘客多一倍,对残疾乘客超重局部每公斤收费比正常乘客少一半。用判定表来表示与上述每种条件组合相对应的动作。判定表TFFFTTTFTTTTTTTTTFFFFFFFFFFFFFFFF×××××××××国内乘客头等舱残疾乘客行李≤30kg免费(W-30)*2(W-30)*3(W-30)*4(W-30)*6(W-30)*8(W-30)*12判定树判定树实质是判定表的变形,它们仅仅是形式上的差异,本质是一样的!行李费算法行李重量W>30国内乘客外国乘客头等舱其它舱残疾乘客----(W-30)*2正常乘客----(W-30)*4残疾乘客----(W-30)*3正常乘客----(W-30)*6头等舱其它舱残疾乘客----(W-30)*4正常乘客----(W-30)*8残疾乘客----(W-30)*6正常乘客----(W-30)*12免费行李重量W<=30判定表和判定树可以描述复杂的条件,这些用N-S图和PAD图是不易表达的;判定树的优点是形式简单、较直观、易于掌握和使用;判定树的缺点是简洁性不如判定表、重复多。详细设计的阶段性成果详细设计说明书表示软件结构的图表;对逐个模块的描述,包括算法和逻辑流程,输入/输出项,与外部接口等。详细设计复审复审的指导原那么详细设计复审一般不邀请用户和其他领域的代表。复审是为了提早揭露错误,参加复审的设计人员应该欢送别人提出批评和建议,但复审的对象是设计文档,不是设计者本身,其他参加者也应为复审创造和谐的气氛。复审中提出的问题应详细记录,但不一定当场解决。复审结束前作出本次复审能否通过的结论。设计复审是非常重要的工作,设计复审主要是指对设计文档的复审。复审的主要内容详细设计复审的重点应该放在各个模块的具体设计上。例如模块的设计能否满足其功能与性能要求、选择的算法与数据结构是否合理、符不符合编码语言的特点、设计描述是否简单、清晰等等。复审的方式复审分正式与非正式两种方式:非正式复审的特点是参加人数少,且均为软件人员,带有同行讨论的性质。因而方便灵活,十分适合于详细设计复审。常采用的非正式复审的过程是:由一名设计人员逐行宣读设计资料,由到会的同行跟随他指出的次序一行行的往下审查。发现有问题或错误就做好记录,然后根据多数参加者的意见,决定通过该设计资料或退回原设计人进行纠正。正式复审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用辩论方式,与会者要提前审阅文档资料,设计人员对设计方案详细说明之后,答复与会者的问题并记录各种重要的评审意见。人机界面设计人机界面〔Human-ComputeInterface,HCI〕设计是绝大局部软件设计中必不可少的活动,与其他设计活动相比,人机界面的设计与最终用户及应用领域的关系更紧密。一个好的界面设计必须建立在对应用领域中原有任务及软件系统未来的用户透彻了解和把握的根底之上。设计用户界面不仅需要计算机科学的理论知识,而且需要认知心理学以及人-机工程学、语言学等学科的知识。人机界面设计内容提要人的因素人机界面风格人机界面设计过程人机界面实现的原那么人机界面标准人的因素所谓“人的因素〞包含如下3层含义;人对感知过程的认识,包括视觉、阅读时的认知心理、记忆、归纳与演绎推理等;用户已有的技能和行为方式:用户所要求完成的整个任务以及用户对人机交互局部的特殊要求。由于用户通过界面与系统交互.因此只有充分考虑了人的因素,对话才能和谐流畅,否那么系统内部无论设计得多么合理,整个系统也将表现得不够友善。人类感知根底感官是人类认知客观世界的初始通道。因此,设计人机界面要充分考虑视觉、触觉和听觉的作用,这样才能使用户有效地从系统获取信息,并存入记忆中,并通过大脑用归纳和演绎的方法进行推理。大多数人机界面都在可视介质上实现,此时,用户总是眼脑并用,并根据所显示的内容、体积、形状、颜色、方向、移动和其他表现解释所获可视信息。如何表示这些可视信息是设计“友好〞界面的关键。人类感知根底阅读--从正文中提取信息仍为大多数界面的主要活动。人们首先对可视的句式〔patterns〕进行解码,然后在大脑内检索字或短语的意思。这个过程的快慢受到眼球运动模式的控制,字号、字体、行长、大小写、位置和颜色等诸多因素也会直接影响到信息提取的难易程度。人类感知根底人脑的组成:短期记忆系统〔Short‑TermMemory,STM〕长期记忆系统〔Long‑TermMemory,LTM〕感官输入〔视、听、触〕一开始放在“缓冲区〞中,随即存入STM,STM中的信息可立即重用。但缓冲区的大小、STM中信息可重用的时间间隔都十分有限。知识—指语法、语义信息,一般存在LTM中,它们是人对事物做出反响的依据。因此,系统分析员在说明人机界面时,假设对STM和〔或〕LTM有什么过分要求,必将导致系统性能的下降。人类感知根底大多数人遇到问题时并不进行形式的演绎和归纳推理,而是使用一组启发式策略。这组策略是从以往对类似问题的处理中逐渐获得的。因此,设计人机界面时还应便于用户积累有关交互工作的经验,同时要注意这些启发式策略的一致性,不宜受特殊交互领域的影响。用户的技能用户本身的技能,个性上的差异,行为方式的不同,都会对人机界面造成影响。终端用户的技能,直接影响到他从人机界面上获取信息、对系统做出反响、以及使用启发式策略与系统和谐地进行交互的能力。大多数情况下,特定领域的知识比广泛的教育和智慧更重要。此外,每个人的个性又往往与思维方式或认知方式相联系。因此理想的人机界面应针对具有典型个性的特定的一类用户设计,不过目前在这方面可供人机界面设计人员参考的经验还很贫乏。任务与用户的特殊要求设计交互式应用软件系统,大多数情况下是为了追求速度、效率、精度或降低本钱,使那些原来由手工或其他方式完成的任务能自动〔或半自动〕地完成。因任务本身根本不变,用户自然要求人机界面能提供一个他早已熟悉,并感到亲切自然的环境。任务与用户的特殊要求任务千差万别,但大致可分为下面几类:通信型任务〔communicationtask〕:使信息从生产者传递到使用者的活动。对话型任务〔dialoguetask〕:使用户能指挥和控制与系统交互的活动。认知型任务〔cognitivetask〕:获得信息即可执行的活动,或与系统功能关联的活动。控制型任务〔controltask〕:允许用户对信息及其他任务处理的顺序进行控制的活动。具体开发这些任务时,将用到用户界面设计技术--任务分析和建模。人机界面风格命令和询问方式简单的菜单式面向窗口的点选〔W窗口I图标M菜单P光标〕界面第四代界面命令和询问方式最早在图形显示、鼠标、高速工作站等技术出现之前,现实可行的界面方式只能是命令和询问方式,通信完全以正文形式并通过用户命令和用户对系统询问的响应来完成。例如:>run/debug='on'/out=P1/in=t1/alloc=1000k.RUNALLOCATIONTOBEQUEUED?>>yes.AUTOMATICCHECKPOINTINGINTERVAL?>>5尽管每个命令和询问都不复杂,但对用户来说易出错、不友善且难于学习。简单的菜单式 这种方式与命令行方式相比不易出错,但使用起来仍然乏味。比方有选择7进入另一个选择时候,必须逐级进行,不能一步到位。Chooseprogramoptionthatisdesired:1.Inputdatamanually2.Inputdatafromexistingdatafile3.Performsimplifiedanalysis4.Performdetailedanalysis5.Prodecetabularoutput6.Producegraphicaloutput7.OtheroptionscalssesSelectoption?_面向窗口的点选界面随着硬件的开展,特别是软件工程师逐渐认识到人的因素对界面设计的影响,面向窗口的点选界面出现了,此类界面亦称为WIMP界面,即窗口、图标、菜单、指示器四为一体,形成桌面的概念。面向窗口的点选界面的优点能同时显示不同种类的信息,使用户可在几个工作环境中切换而不丧失几个工作之间的联系,窗口使用户能自如地执行许多通信型和认知型任务。用户通过下拉式菜单可以方便的执行控制型和对话型任务。引入图标、下拉式菜单、按钮和滚动条技术,可大大减少键盘输入,这对那些不精于打字的用户无疑提高了交互效率,极大地推动了计算机应用。第四代界面最新一代HCI把第三代HCI技术与超文本、多任务概念结合起来,使用户可同时执行多个仟务。第四代界面已出现在许多工作站和高性能PC机上。人机界面设计过程人机界面的设计过程可分为下面几个步骤:创立系统功能的外部模型;确定为完成此系统功能人和计算机应分别完成的任务考虑界面设计中的典型问题;借助CASE工具构造界面原型;真正实现设计模型:评估界面质量。人机界面设计的相关模型在人机界面的设计过程中先后涉及四个模型:由软件工程师创立的设计模型〔designmodel〕,由人机工程师〔或软件工程师〕创立的用户模型〔usermodel〕,终端用户对未来系统的假想〔systemperception或user'smodel〕系统实现后得到的系统映象〔systemimage〕。一般来说,这四个模型之间差异很大,界面设计时要充分平衡四者之间的差异,设计协调一致的界面。人机界面设计的相关模型设计模型主要考虑软件的数据结构、总体结构和过程性描述,界面设计一般只作为附属品;用户模型概括了终端用户的大致情况,只有对假想用户的情况有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论