除了概要设计说明书之外课件_第1页
除了概要设计说明书之外课件_第2页
除了概要设计说明书之外课件_第3页
除了概要设计说明书之外课件_第4页
除了概要设计说明书之外课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

软件设计概述软件设计概述3.1软件设计的任务3.2软件设计的步骤3.3软件设计的模块化思想3.4软件设计的原则3.5软件设计文档主要内容3.1软件设计的任务主要内容开发阶段的信息流开发阶段的信息流3.1软件设计的任务软件设计的任务,就是把需求阶段产生的软件需求说明、逻辑系统转换为计算机可以实现的软件系统描述。软件需求解决“做什么”软件设计解决“怎么做”从软件需求规格说明书出发,形成软件的具体设计方案。3.1软件设计的任务软件设计的任务,就是把需求阶段产生的软实际问题现实的处理方法逻辑模型抽象和逻辑计算机软件的处理方法实际问题解决方案1逻辑模型解决方案3解决方案2针对同一问题的不同形式的处理方法同一逻辑模型的不同的计算机解决方案实际问题现实的处理方法逻辑模型抽象和逻辑计算机软件的处理方法软件设计实际工作中的误区1,软件设计阶段,开发人员不清楚某个系统功能2,忽略软件设计过程,直接进入代码编写阶段3,想的太多,导致软件实现复杂4,意图鱼和熊掌兼得5,一味迎合客户软件设计实际工作中的误区1,软件设计阶段,开发人员不清楚某个软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只1,两种设计思路由底向上(Bottom-updesign)选择关键部分先设计从局部开始扩展到整个系统自顶向下顶层开始逐步分解3.2软件设计步骤1,两种设计思路由底向上(Bottom-updesign)软件的设计阶段是软件开发时期中最富有活力、最需要发挥创造精神的阶段。软件设计分为三个步骤:(1)概要设计(Preliminarydesign)

确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计(Detaildesign)

确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。(3)设计复审(Designreview)通过复审指出的错误和测试指出的错误有同等重要的效果。开发中较早发现错误,可减少错误扩大的机会。软件的设计阶段是软件开发时期中最富有活力、最需要发挥创造精神2.概要设计(preliminarydesign)概要设计指基于功能层次结构,确定软件总体结构,制定测试计划,形成概要设计说明书。从工程管理的角度来看,软件设计分为概要设计和详细设计概要设计说明书由模块结构图、模块说明和测试计划构成2.概要设计(preliminarydesign)概要设数据设计侧重于数据结构的定义。系统结构设计定义软件系统各主要成份之间的关系。过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。从技术角度来看,软件设计分为数据设计、系统设计和过程设计数据设计侧重于数据结构的定义。从技术角度来看,软件设计分为2.详细设计(detaildesign)其结果决定了最终的程序代码质量。详细设计说明书由每一模块的详细数据结构设计、详细流程设计和每一模块的测试实例组成。其结果决定了最终的程序代码质量。确定每一个模块内所采用的数据结构和处理算法,同时还要设计完成测试实例,形成详细设计说明书。采取自顶向下、逐步求精的方法。2.详细设计(detaildesign)其结果决定了最终3.设计复审(designreview)复审概要设计和详细设计的所有文档,以完成设计阶段工作。正式复审(FormalReview)非正式复审(informalreview)设计文档也需要复审复审的方式分为设计复审的目的在于及早发现设计中的缺陷和错误3.设计复审(designreview)复审概要设计和详复审的经济效益对比复审的经济效益对比3.3软件设计的模块化思想软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。模块是具有一定功能的可以用名词调用的程序语句集合。3.3.1,模块化(Modularity)3.3软件设计的模块化思想软件系统的模块化是指整个软件被划

模块化是好的软件设计的一个基本准则。高层模块从整体上把握问题,隐蔽细节

复杂问题较小问题

分解可减小解题所需的总的工作分解分解、信息隐藏和模块独立性,是实现模块化设计的重要指导思想。模块化是好的软件设计的一个基本准则。分解分解、信息隐藏和例:将问题(P1+P2)分解为问题P1,问题P2设函数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试验发现:C模块数与开发工作量的关系成本或工作量模块数量软件总成本集成成本成本/模块M最小成本区域模块划分得越小成本越低,但是集成成本却随着模块划分得越小成本越高。如何确定模块化分的最小成本区,并保证模块的最佳性能,是设计活动中的主要任务之一。模块数与开发工作量的关系成本或工作量模块数量软件总成本集成成3.3.2抽象化(Abstraction)软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。(1)过程的抽象

在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。

在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。

在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。3.3.2抽象化(Abstraction)软件系统进行模块例:开发一个CAD软件的三层抽象抽象层次Ⅰ.

用问题所处环境的术语来描述这个软件:

该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现……。抽象层次Ⅱ.

任务需求的描述。

CADSOFTWARETASKS

userinteractiontask;

2-Ddrawingcreationtask;graphicsdisplaytask;

drawingfilemanagementtask;

end.

在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。例:开发一个CAD软件的三层抽象抽象层次Ⅰ.用问题所处环抽象层次Ⅲ.

程序过程表示。以2-D(二维)绘图生成任务为例:

PROCEDURE:2-Ddrawingcreation

REPEATUNTIL(drawingcreationtaskterminates)

DOWHILE(digitizerinteractionoccurs)digitizerinterfacetask;

DETERMINEdrawingrequestCASE;

line:linedrawingtask;

rectangle:rectangledrawingtask;

circle:circledrawingtask;

……抽象层次Ⅲ.程序过程表示。(2)数据抽象

在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。

例如,在CAD软件中,定义一个叫做drawing的数据对象。可将drawing规定为一个抽象数据类型,定义它的内部细节为:

TYPEdrawingISSTRUCTUREDEFIND

numberISSTRINGLENGTH(12);

geometryDEFIND……notesISSTRINGLENGTH(256);

BOMDEFIND

ENDdrawingTYPE;(2)数据抽象

在不同层次上描述数据对象的细节,定义与该数据抽象drawing本身由另外一些数据抽象,如geometry、BOM(billofmaterials)构成定义drawing的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉及drawing的内部细节例如,定义:

blue-printISINSTANCEOFdrawing;

schematicISINSTANCEOFdrawing;

数据抽象drawing本身由另外一些数据抽象,如geomet3.3.3信息隐蔽和局部化模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。由Parnas方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。信息隐蔽(InformationHiding)优点:1,支持模块的并行开发;2,减少修改或维护时的工作量;3,提高模块的独立性。扩充功能只需插入新模块。分解、信息隐藏和模块独立性,是实现模块化设计的重要指导思想。3.3.3信息隐蔽和局部化模块所包含的信息,不允许其它不需信息局部化

把关系密切的软件元素物理地放得彼此靠近。优点:可维护性好可靠性好可理解性好有助于实现信息隐藏信息局部化把关系密切的软件元素物理地放得彼此靠近。优点:3.3.4模块的独立性“模块”,又称“组件”,它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性完成其功能的程序代码和仅供该模块内部使用的数据3.3.4模块的独立性“模块”,又称“组件”,它一般具有如若一个模块在不需要另一个模块的情况下,能够完整地执行其功能,则称此模块具有模块独立性。模块独立的含义:模块完成独立的功能符合信息隐蔽和信息局部化原则模块间关连和依赖程度尽量小模块的独立性概念:模块独立性取决于模块的内部和外部特征。若一个模块在不需要另一个模块的情况下,能够完整地执行其功能,SD方法提出的定性的度量标准:模块之间的耦合性(Coupling)

模块自身的内聚性(Cohesion)耦合是模块之间的相对独立性的度量内聚是模块功能相对强度(一个模块内部各个元素彼此结合的紧密程度)的度量。SD方法提出的定性的度量标准:耦合是模块之间的相对独立性的度1.模块独立性的度量之一:耦合描述模块间相对独立性(相互依赖程度)的度量无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系1.模块独立性的度量之一:耦合描述模块间相对独立性(相互依赖

耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度耦合性越高,模块独立性越弱。耦合强度依赖的因素:耦合性越高,模块独立性越弱。耦合强度的等级耦合强度的等级

如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。(1)非直接耦合(NondirectCoupling)

如果两个模块之间没有直接关系,它们之间的联系完全是通过主模如果一个模块访问另一个模块时,彼此之间是通过简单数据参数

(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。属于松散耦合开发票计算水费单价数量金额(2)数据耦合(DataCoupling)如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(两个模块都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口传递数据结构的一部分(不是简单的数据),称为特征耦合。(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则这两个模块间存在标记偶合。(3)特征耦合(StampCoupling)(标记耦合

)两个模块都要使用同一数据结构的一部分,不是采用全程公共数据区举例计算水电费计算水费计算电费住户情况住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.水费电费举例计算水电费计算水费计算电费住户情况住户情况“住户情况”是将特征耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费将特征耦合修改为数据耦合举例计算水电费计算水费计算电费本月本(4)控制耦合(ControlCoupling)如果两个模块之间通过参数交换信息,而传递的信息中含有控制信息,就是控制耦合。如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,如右图。(4)控制耦合(ControlCoupling)如果两个控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合举例A计算平均分B平均/最高成绩读入分数输出结果计算控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖,降低了独立性。去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例AB1计算平均分平均成绩最高成绩计算最高分B2控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的(5)外部耦合(ExternalCoupling)一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

外部偶合必不可少,但这种模块数目应尽量少。(5)外部耦合(ExternalCoupling)一组模块(6)公共耦合(CommonCoupling)(1)软件可维护性差,修改一个数据会影响所有模块;(2)软件可靠性和适应性差;(3)软件可理解性降低,公共数据名的使用。(4)诊断错误困难(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。(6)公共耦合(CommonCoupling)(1)软件可公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模(7)内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合

(1)一个模块直接访问另一个模块的内部数据;

(2)一个模块不通过正常入口转到另一模块内部;

(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);

(4)一个模块有多个入口。(7)内容耦合(ContentCoupling)如果发生模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要因素目标:建立模块间耦合度尽可能松散的系统(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围

坚决避免使用内容耦合(2)降低接口的复杂性(3)把模块的通信信息放在缓冲区内如何降低模块间耦合度:模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要2.模块独立性的度量之二:内聚性一个模块内部各成分彼此结合的紧密程度。•

偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起•

逻辑内聚:仅仅是逻辑功能相关成分合在一起•

时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起•

过程内聚:过程顺序相关的功能成分合在一起•

通讯内聚:要对相同的外部数据进行操作的成分合在一起•

顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来•

功能内聚:只完成单一的功能2.模块独立性的度量之二:内聚性一个模块内部各成分彼此结合内聚强弱的等级设计目标——高内聚

(模块在软件过程中完成单一的任务)内聚强弱的等级设计目标——高内聚软件设计的概念和原理内聚:一个模块内各个元素彼此结合的紧密程度。偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。逻辑内聚:若干个逻辑功能类似的任务组成一个模块。时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。低内聚中内聚高内聚过程内聚:模块内的处理元素是相关的,且必须以特定次序执行。通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个输出数据。顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必须顺序执行。功能内聚:所有处理元素属于一个整体,完成一个单一的功能。模块A模块B模块CS1;S2;模块A模块B模块C模块A模块B模块C模块D软件设计的概念和原理内聚:一个模块内各个元素彼此结合的紧密程(1)偶然内聚(CoincidentalCohesion)又称为巧合内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。缺点:可修改性差;可理解性差。(1)偶然内聚(CoincidentalCohesion)(2)逻辑内聚(LogicalCohesion)这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。缺点:不易修改,效率低增强了耦合程度(控制耦合)(2)逻辑内聚(LogicalCohesion)这种模块把(3)时间内聚(ClassicalCohesion)例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。(3)时间内聚(ClassicalCohesion)例如:(4)过程内聚(ProceduralCohesion)读入成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。(4)过程内聚(ProceduralCohesion)读入(5)通信内聚(CommunicationCohesion)如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。(5)通信内聚(CommunicationCohesio通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报表产生职工工资报表并计算平均工资模块平均工资通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报通信内聚模块例开领书单登记售书发票领书单售书登记表文件删除修改通信内聚模块例开领登记发票领书单售书文件删除修改(6)信息内聚(InformationalCohesion)几个加工同时引用一个共同的数据信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块知晓。这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。(6)信息内聚(InformationalCohesio(7)功能内聚(FunctionalCohesion)一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。(7)功能内聚(FunctionalCohesion)一模块内聚判定树模块内聚判定树3.4软件设计的原则1,提高模块的独立性通过模块分解或合并,降低耦合提高内聚。提取相同部分3.4软件设计的原则1,提高模块的独立性通过模块分解或合并2,调整模块的大小模块的大小可用模块中所含语句的数量多少来衡量。通常语句行数为50-100行,一页纸之内。2,调整模块的大小模块的大小可用模块中所含语句的数量多少来衡软件的深度(Depth):控制的层数软件的宽度(Width):控制的跨度模块的扇出(Fan—out):该模块直接控制的模块数。模块的扇入(Fan—in):能直接控制该模块的模块数。3,适当的模块深度、宽度、扇出和扇入软件的深度(Depth):控制的层数3,适当的模块深度、宽度4,模块的作用范围应在控制范围之内MAGBCEFD4,模块的作用范围应在控制范围之内MAGBCEFD5,简化模块接口的复杂程度例如:求一元二次方程的根的模块方案1:QUAD_ROOT(TBL,X)

其中用数组TBL传送方程系数,用数组X回送求得的根。方案2:QUAD_ROOT(A,B,C,ROOT1,ROOT2)

其中A,B,C是方程系数,

ROOT1,ROOT2是求得的根方案1使用标记耦合,方案2使用数据耦合,接口简单,设计合理。5,简化模块接口的复杂程度例如:求一元二次方程的根的模块方案3.5软件设计的后处理为每一个模块写一份处理说明为每一个模块提供一份接口说明确定全局数据结构和局部数据结构指出所有的设计约束和限制进行概要设计的评审进行设计的优化(如果需要和可能的话)3.5软件设计的后处理为每一个模块写一份处理说明概要设计阶段的文件主要是概要设计说明书,又称为系统设计说明书。编写本说明的目的,是说明对程序系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织机构、功能分配、模块划分、接口设计、运行设计、数据结构设计和出错处理设计等,为系统的详细设计打下基础。概要设计说明书是概要设计阶段结束时提交的技术文档。除了概要设计说明书之外,还有用户手册、测试计划等文件。见下表概要设计阶段的文件主要是概要设计说明书,又称为系统设计说明书概要设计说明书1引言1.1目的1.2背景1.3定义1.4参考资料2概要设计

2.1需求规定

2.2运行规定

2.3基本设计原则与处理流程

2.4结构

2.5功能需求与程序关系

2.6人工处理过程

2.7未解决问题3总体设计3.1处理流程3.2总体结构和模块外部设计3.3功能分配4接口设计4.1用户接口(用户界面)

4.2内部接口(模块间)

4.3外部接口(软硬件间)5数据结构设计

5.1逻辑结构设计

5.2物理结构设计

5.3设计结构与程序的关系6运行设计

6.1运行模块组合

6.2运行控制

6.3运行时间7出错处理设计

7.1出错输出信息

7.2出错处理7.2.1后备技术7.2.2恢复技术7.2.3再启动技术7.2.4性能降级技术8安全保密设计概要设计说明书1引言4.1用户接口(用户界面)概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现实用性:确认该设计对于需求的解决方案是否实用

概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征各种选择方案:看是否考虑过其它方案,比较

温馨提示

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

评论

0/150

提交评论