第三章-测试设计和开发_第1页
第三章-测试设计和开发_第2页
第三章-测试设计和开发_第3页
第三章-测试设计和开发_第4页
第三章-测试设计和开发_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1软件测试技术2第三章测试设计和开发3.1测试设计流程3.2总体设计3.3开发测试用例3.4评审测试用例33.1测试设计流程测试设计活动的输入是测试计划,测试计划应该说明将用到的方法和测试工作的范围。测试设计活动的输出是将在系统测试和确认测试中使用的评审过的测试用例集合。43.2总体设计定义设计目标清楚地说明每项测试的目标使每项测试的目的单一,可以对应到规格说明书中的一项需求只说明测试将完成什么工作,而不是说明如何完成定义输入说明定义测试环境和配置编写测试设计文挡53.3开发测试用例什么是测试用例?测试用例是为特定目标开发的测试输入、执行条件和预期结果的集合。

3.3.1了解测试用例什么是好的测试用例?好的测试用例应该容易发现软件错误。好的测试用例要有可重复性。好的测试用例必须清晰地定义一个或多个期望的结果和测试通过和失败标准。没有冗余。6测试用例的作用指导测试的实施作为编写测试脚本的“设计规格说明书”评估测试结果的度量基准分析缺陷的标准7什么是测试过程?IEEE将测试过程定义为“说明执行一系列测试用例的步骤。测试过程是为了评估一系列功能而进行软件项分析的步骤”。3.3.2定义详细测试过程测试用例和测试过程的区别?测试过程是由一系列的测试用例组成的。

83.3.3定义预期结果测试过程的每一步都需要明确预期的结果。步骤动作预期结果通过/失败1在主菜单中单击“成绩输入”按钮显示成绩输入对话框2在成绩栏输入“101”显示错误信息“无效的成绩”3在成绩栏输入“-1”显示错误信息“无效的成绩”4在成绩栏输入“85”成绩显示为“85分”9预期结果的来源:项目专家或其他方面的专家将知道如何确定输出结果用户文档可以包含一些用户场景范例需求文档也可以提供必要的信息其他相关文档也可以提供相关线索最终用户也许能够描述所期望的响应结果10测试用例文档由简介和测试用例两部分组成。简介部分描述了测试目的、测试范围、定义术语、参考文档、概述等。测试用例部分逐一列示各测试用例。测试用例详细信息包括:用例编号、用例名称、测试等级、入口准则、验证步骤、期望结果、出口准则、注释等。3.3.4测试用例内容11最简单的测试用例也将包含:用例编号、输入、期望结果。测试用例ID输入预期结果实际结果测试统计利率贷款期限(年)贷款金额(元)月支付总支付总利息月支付总支付总利息通过/失败测试日期测试人员TC-0018%3080000587.01TC-0028.5%3080000615.13TC-0038.5%1580000787.7912测试的一项基本原则是:被测试的系统始终应该处于一种已知的状态。因此测试用例往往需要说明初始条件。

说明

测试用例ID:

TC-001软件版本:

子系统:

用户名字段测试

操作系统:

测试人员姓名:

测试日期:

初始设置

1.打开注册会话框

2.在用户名字段放入字符“王”

3.确保所有其他输入字段为空输入

1.将光标置于用户名字段

2.输入字符“帅”预期结果

用户名字段出现字符“王帅”实际结果

□通过

□失败13如果没有测试用例或者仅有简单的测试功能描述,测试过程难以控制,测试结果将毫无可靠性可言。简单的测试用例可靠性低,重用性差,可能导致不同人员理解不同。详细的测试用例可靠性高,而且便于估计执行所需时间,易于控制。3.3.5测试用例参数化14测试用例越详细越好?15时间要求

测试时间是否充足?执行者

测试执行者对系统的了解程度?建议程度

将测试用例交给其他人执行时不需要过多的解释。16样例-登录需求:用户名长度为6至10位(含6位和10位)用户名由字符(a-z、A-Z)和数字(0-9)组成不能为空、空格和特殊字符密码规则同用户名规则17简单能够正确处理用户登录一般输入正确的用户名和口令可以进入系统输入用户名或口令错误无法进入系统18详细操作步骤预期结果输入正确的用户名和口令(均为6位),点击[OK]按钮进入系统输入正确的用户名和口令(均为10位),点击[OK]按钮进入系统输入正确的用户名和口令(均为6至8位之间),……进入系统用户名为空,……提示输入用户名不能进入系统用户名为空格,……提示无效用户名不能进入系统用户名小于6位,……提示用户名太短不能进入系统……………………19定义-参数化是一个将测试数据与测试逻辑(步骤)分开,简化测试用例的过程;方式是将用例中的一些输入、输出等作为参数,数据则单独列出,在执行时选择相应的数据执行。20样例-登录步骤:1、输入<<<用户名>>>2、输入<<<口令>>>3、点击[OK]按钮结果:<<<预期结果>>>21测试数据(一)“用户名”“口令”“预期结果”说明“user10”“pass10”进入系统正确的用户名和口令(6位)“user789”“pass789”进入系统正确的用户名和口令(7-9位)“user000010”“pass000010”进入系统正确的用户名和口令(10位)“”“pass”提示输入用户名不能进入系统用户名为空“空格”“pass”提示无效用户名不能进入系统用户名为空格UserUserpass提示用户名太短不能进入系统用户名小于6位user0000011userpass提示用户名太长不能进入系统用户名大于10位22为什么要参数化?没有将测试数据和测试逻辑分开的测试用例可能显得非常庞大,不利于测试员理解,导致难以控制和执行;通过将用例参数化,可以简化用例,使测试用例逻辑清晰,数据与逻辑的关系明了,易于理解;有利于提高测试用例的复用性;23哪些内容需要参数化?测试用例中需要通过使用不同数据来重复执行测试的部分;包括:输入(数据或操作等)输出(结果数据或预期结果等)24测试数据(二)“用户名”“口令”“预期结果”说明“user”“userpass”提示用户名太短不能进入系统用户名小于6位“user0000011”“userpass”提示用户名太长不能进入系统用户名大于10位………………………………………………253.3.6白盒测试用例设计白盒测试作为结构测试方法,是按照程序内部的结构测试程序,对软件的过程性细节做细致的检查,测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例。

2627白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。语句覆盖判定覆盖条件覆盖条件组合覆盖弱强判定条件覆盖路径覆盖281、语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。2、判定覆盖:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。3、条件覆盖:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。4、判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。白盒法常用的覆盖标准295、条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。

6、路径覆盖:执行足够的例子,覆盖程序中所有可能的路径。白盒法常用的覆盖标准30白盒法步骤:例:用白盒法测试以下程序段:Procedure(VARA,B,X:REAL);BEGINIF(A>1)AND(B=0)THENX:=X/A;IF(A=2)OR(X>1)THENX:=X+1END;1)选择逻辑覆盖标准。2)按照覆盖标准列出所有情况。3)选择确定测试用例。4)验证分析运行结果与预期结果。逻辑结构31白盒法举例Procedure(VARA,B,X:REAL);BEGINIF(A>1)AND(B=0)THENX:=X/A;IF(A=2)OR(X>1)THENX:=X+1END;A>1ANDB=0X:=X/AA=2ORX>1X:=X+1YNYN逻辑结构321、语句覆盖使得程序中每个语句至少都能被执行一次。A>1ANDB=0X:=X/AA=2ORX>1X:=X+1abcde满足语句覆盖的情况:执行路径:ace选择用例:[(2,0,4),(2,0,3)]用例格式:[输入(A,B,X),输出(A,B,X)]YNYN332、判定覆盖使得程序中每个判定至少为TRUE或FALSE各一次。A>1ANDB=0X:=X/AA=2ORX>1X:=X+1abcde覆盖情况:应执行路径ace∧abd 或:acd∧abe选择用例(其一):⑴[(2,0,4),(2,0,3)]ace[(1,1,1),(1,1,1)]abd⑵[(2,1,1),(2,1,2)]abe[(3,0,3),(3,1,1)]acdYYNN343、条件覆盖A>1ANDB=0X:=X/AA=2ORX>1X:=X+1abcde使得判定中的每个条件获得各种可能的结果。应满足以下覆盖情况:判定一:A>1,A≤1,B=0,B≠0判定二:A=2,A≠2,X>1,X≤1选择用例:[(2,0,4),(2,0,3)][(1,1,1),(1,1,1)]NNYY2A≤1A≠20B=04X>11A>1A=21B≠01X≤1注意:[(1,0,3),(1,0,4)] [(2,1,1),(2,1,2)]满足条件覆盖,但不满足判定覆盖。354、判定/条件覆盖同时满足判断覆盖和条件覆盖。A>1ANDB=0X:=X/AA=2ORX>1X:=X+1abcde应满足以下覆盖情况:条件:A>1,A≤1,B=0,B≠0 A=2,A≠2,X>1,X≤1应执行路径ace∧abd 或:acd∧abe选择用例:[(2,0,4),(2,0,3)](ace)[(1,1,1),(1,1,1)](abd)YYNN365、条件组合覆盖使得每个判定中条件的各种可能组合都至少出现一次。A>1X:=X/AA=2X:=X+1abcdeB=0X>1YNYNYNYN编译系统下的执行情况:部分路径未被执行。满足以下覆盖情况:①A>1,B=0②A>1,B≠0③A≤1,B=0

④A≤1,B≠0⑤A=2,X>1

⑥A=2,X≤1

⑦A≠2,X>1

⑧A≠2,X≤1选择用例:[(2,0,4),(2,0,3)]①⑤ace[(2,1,1),(2,1,2)]②⑥abe[(1,0,3),(1,0,4)]③⑦abd[(1,1,1),(1,1,1)]④⑧abe376、路径覆盖覆盖程序中所有可能的路径A>1ANDB=0X:=X/AA=2ORX>1X:=X+1abcdeYYNNABX覆盖路径203101211301aceabdabeacd38语句覆盖判定覆盖

条件覆盖判定-条件覆盖

条件组合覆盖路径覆盖用例覆盖程度用例设计容易度39等价分类法边值分析法错误推测法因果图法3.3.7黑盒测试用例设计黑盒测试不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。判定表法场景法401、等价分类法基本思想:根据程序的I/O特性,将程序的定义域划分为有限个等价区段—“等价类”,从等价类中选择出的用例,具有“代表性”。等价类分为:

有效等价类—对于程序的规格说明是合理的、有意义的输入数据构成的集合。

无效等价类—对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。41等价分类法步骤应按照输入条件(如输入值的范围,值的个数,值的集合,输入条件必须如何)划分为有效等价类和无效等价类。例如:每个学生可选修1-3门课程可以划分一个有效等价类:选修1-3门课程。可以划分两个无效等价类:未选修课,选修课超过3门。又如:标识符的第一个字符必须是字母。可以划分为一个有效等价类:第一个字符是字母。可以划分一个无效等价类:第一个字符不是字母。①划分“等价类”

A、为每个等价类编号;B、使一个测试用例尽可能覆盖多个有效等价类C、特别要注意的是:一个测试用例只能覆盖一个无效等价类。②选择测试用例等价分类法步骤422、边值分析法

基本思想:选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。

分析步骤:A、先划分等价类。

B、选择测试用例,测试等价类边界。

边界选择原则:A、按照输入值范围的边界。B、按照输入/输出值个数的边界。

C、输出值域的边界。

D、输入/输出有序集的边界。43

A、按照输入值范围的边界。例如:输入值的范围是-1.0至1.0,则可选择用例–1.0、1.0、-1.001、1.001。

B、按照输入/输出值个数的边界。例如:输入文件可有1-255个记录,则设计用例:文件的记录数为0个、1个、255个、256个。

C、输出值域的边界。例如:检索文献摘要,最多4篇。设计用例:可检索0篇、1篇、4篇,和5篇(错误)。

D、输入/输出有序集(如顺序文件、线性表)的边界。应选择第一个元素和最后一个元素。边值分析法举例边界值分析的基本思想❀

边界值分析的基本思想是: 使用在最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量值;每个边界都要作为测试条件。边界值分析方法选择测试用例原则(1)如果输入条件规定了值的范围,则应该取上点、离点、内点作为输入数据。1.2m1.4m边界值–离点、上点、内点❀

内点:域内得任意点都是内点。❀

上点:就是指得边界上得点,无论此时得域是开区间还是闭区间,上点就是域的上限与下限值。❀

离点:指得就是离上点最近的点,这里就跟是闭区间还是开区间就有关系了,如果是开区间,那么离点就在域内,如果是闭区间,那么离点就在域外。(开内闭外)[1,10]上点110离点内点(1,10)上点110离点内点[1,10)上点110离点内点练习[5,30)上点530离点内点51黑盒法应用实例(一)[例]某FORTRAN编译系统的设计和程序编写工作已经完成,现需对DIMENSION语句的实现设计测试用例。已知DIMENSION语句的语法规则是:DIMENSION语句用以规定数组的维数。形式为:DIMENSIONAD[;AD]…其中,AD是数组描述符,其形式为

n(d[,d]…)其中,n是数组名,由1-6个字母或数字组成。为首的必须是字母;d是维数说明符,数组维数最大为7,最小为1,它的形式为[lb:]ub lb和ub分别表示数组下界和上界,均为-65534至65535之间的整数,也可是整型变量名(但不可是数组元素名)。若未规定lb,则认为其值为1,且ub>=lb。若已规定了lb,则它可为负数、零或正数。DIMENSION语句也和其他语句一样,可连续写多行。(以上规则中,[]内为任选项,小写字母代表语法单位,…表示它前面的项可重复出现多次。)52FORTRAN语言的DIMENSION语句

AD

DIMENSIONALPHA(2:5,3:10), BETA(-4:4,1:7),…… n d d d=[lb:]ub 1~6 1~7 -65534~65535

字符数维数 界值53[解]第一步确定输入条件,列出等价类表输入条件有效等价类无效等价类数组描述符个数数组名长度数组名构成数组名以字母开头数组维数上界是整型变量名整型变量以字母开头上下界取值是否定义下界上界对下界关系下界定义为下界是语句多于一行1(1),>1(2)1~6(4)有字母(7),有数字(8)是(10)1~7(12)常数(15)整型变量(16)有字母(19)有数字(20)是(22)-65534~65535(24)是(27),否(28)>(29),=(30)负数(32),0(33),正数(34)常数(35),整型变量(36)是(39),不是(40)无数组描述符(3)0(5),>6(6)有其它字符(9)不是(11)0(13),>7(14)数组元素名(17),其它(18)其它(21)不是(23)<-65534(25),>65535(26)<(31)数组元素名(37)其它(38)54第二步确定测试用例先设计一个测试用例,使其覆盖一个或多个有效等价类。如:DIMENSIONA(2)能覆盖有效等价类1,4,7,10,12,15,24,28,29和40。为覆盖其它有效等价类,需设计另外的测试用例。如:

DIMENSIONA12345(I,9,J4XXXX,65535,1,KLM,100),

BBB(-65534:100,0:1000,10:10,I:65535)它可覆盖其余的有效等价类。再设计其它测试用例,使每个只覆盖一个无效等价类,直至覆盖完为止。这些测试用例是(下面各行左端括号内的数字为等价类号):(3) DIMENSION(5) DIMENSION(10)(6) DIMENSIONA234567(2)(9) DIMENSIONA.1(2)(11) DIMENSION1A(10)55(13)

DIMENSIONB(14) DIMENSIONB(4,4,4,4,4,4,4,4)

(17) DIMENSIONB(4,A(2))(18) DIMENSIONB(4,,7)(21) DIMENSIONC(I.,10)(23) DIMENSIONC(10,1J)(25) DIMENSIOND(-65535:1)(26) DIMENSIOND(65536)(31) DIMENSIOND(4:3)(37) DIMENSIOND(4(2):4)(38) DIMENSIOND(.:4)连同前面两个共计18个测试用例,他们覆盖了全部等价类。第二步确定测试用例56黑盒法应用实例(二)保险费率计算某保险公司承担人寿保险已有多年历史,该公司保费计算方式为投保额*保险率,保险率又依点数不同而有别,10点以上费率为0.6%,10点以下费率为0.1%:57输入数据说明。58一、分析输入数据形式年龄:一或两位数字。性别:以英文[Male]、[Female]、[M]、[F]表示。婚姻:[已婚]、[未婚]。抚养人数:空白或一位数字。保险费率:10点以上,10点以下。59二、划分输入数据

6061三、设计输入数据6263四、设计测试用例:64653、错误推测法 凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测试用例。把输入条件视为“因”,把输出条件视为“果”,将黑盒看成是从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。根据这种关系可选择高效的测试用例。因果图是一种形式化语言,是一种组合逻辑网络图。4、因果图法66一、因果图方法概述4、因果图法

一种黑盒测试方法方法的依据:需求规格说明中的因果关系67二、因果图符号恒等c1=1e1=1c1=0e1=0非c1c2c3c1e1c1e1e1∨c1c2e1∧c1=1e1=0c1=0e1=1c1=1或c2=1或c3=1e1=1e1=0否则c1=1且c2=1e1=1e1=0否则或与68a输入条件的约束bEacIbabOE约束(互斥):a,b中至多有一个可能为1即a和b不能同时为1I约束(包含):a,b和c中至少有一个

必须是1,即a、b和c不能同时为0O约束(唯一):a和b中必须有一个

且仅有一个为169abRR约束(要求):a是1时,b必须是1

即不可能a是1时b为0输出条件的约束abMM约束(强制):若结果a是1时,

则结果b强制为070分析规范,即将问题分为若干可工作的步骤。标识出规范中的原因与结果。原因—输入条件结果—输出或系统变换分析规范语义、内容,转换为因果图。将因果图转换为判定表。将判定表的每一列,转换为一个测试用例。

三、因果图法的步骤71四、因果图方法举例某程序要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下对文件进行修改。但第一列字符不正确,则给出信息L;若第二列字符不是一个数字,则给出信息M。分析原因1——第一列字符是A2——第一列字符是B3——第二列字符是一个数字结果21——修改文件22——给出信息L23——给出信息M72因果图21232223111∨∧E转换成判定表条件桩。列出了问题的所有条件动作桩。列出了问题规定可能采取的操作条件项。列出针对左列条件的取值动作项。列出在条件项的各种取值情况下应该采取的动作73判定表的建立步骤确定规则的个数列出所有条件桩和动作桩填入条件项填入动作项,得到初始判定表简化、合并相似规则7475解判定表和测试用例12345678111100001100110010101010111100000011101000010101测试用例A3A8ABA?B5B4BNB!C2X6SDP$条件(原因)动作(结果)12311222123判定表法判定表法经常和因果图法一起使用,先进行因果图分析,再结合判定表,最后完成测试用例。条件和动作之间的逻辑关系是明确的,可以直接使用判定表法;如果条件和动作关系不明确,则要先使用因果图法。76条件桩条件项动作桩动作项判定表举例:订购单的检查。如果金额超过500元,又未过期,则发出批准单和提货单;如果金额超过500元,但过期了,则不发批准单;如果金额低于500元,则不论是否过期都发出批准单和提货单。在过期的情况下还需要发出通知单。将这段需求进行判定表分析。7778金额>500>500<=500<=500状态未过期已过期未过期已过期发出批准单√√√发出提货单√√√发出通知单√订购单的检查79金额>500<=500状态未过期已过期已过期发出批准单√√发出提货单√√发出通知单√简化判定表80测试用例编号TC_001测试项目订购单的检查测试标题状态为未过期重要级别高预置条件无输入499操作步骤输入金额:499选择未过期单击确定按钮预期输出发出批准单和提货单测试用例181测试用例编号TC_002测试项目订购单的检查测试标题金额>500,状态为已过期重要级别中预置条件无输入501操作步骤输入金额:501选择已过期单击确定按钮预期输出批准单、提货单和通知单都不发出测试用例282测试用例编号TC_003测试项目订购单的检查测试标题金额<=500,状态为已过期重要级别中预置条件无输入499操作步骤输入金额:499选择已过期单击确定按钮预期输出发出批准单、提货单和通知单测试用例3场景法••••我们申请一个项目,需先提交审批单据,再由部门经理审批,审核通过后由总经理来最终审批,如果部门经理审核不通过,就直接退回.每个事件触发时的情景便形成了场景。而同一事件不同的触发顺序和处理结果形成事件流。通过运用场景来对系统的功能点或业务流程进行描述,从而提高测试效果。场景法一般包含基本流和备选流,从一个流程开始,通过描述经过的路径来确定过程,经过遍历所有的基本流和备选流来完成整个场景。

3相关概念••基本流:采用直黑线表示,是经过用例的最简单的路径(无任何差错,程序从开始直接执行到结束)备选流:用不同的彩色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和备选流3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和备选流4)。4场景法场景如下:场景1:基本流;场景2:基本流,备选流1;场景3:基本流,备选流1,备选流2;场景4:基本流,备选流3;场景5:基本流,备选流3,备选流1;场景6:基本流,备选流3,备选流1,备选流2;场景7:基本流,备选流4;场景8:基本流,备选流3,备选流4;5例如银行ATM的取款操作,一般的使用场景:用户插入有效银行卡输入正确密码输入取款金额ATM机吐钱退卡8687基本流输入银行卡号,输入密码,输入取款金额,ATM机吐钱,退卡备选流1银行卡号无效备选流2密码错误备选流3银行卡账户余额不足备选流4ATM机内现金不足ATM机取款模块的业务流88场景1:成功提款基本流场景2:账户不存在/账户信息有误基本流备选流1场景3:密码输入有误(还有输入机会)基本流备选流2场景4:密码输入有误(没有输入机会)基本流备选流2场景5:账户余额不足基本流备选流3场景6:ATM机内现金不足基本流备选流4ATM机取款模块的测试场景89ID场景/条件帐号密码输入金额账面金额ATM机内金额预期结果1场景1:成功提款VVVVV成功提款,账户余额被更新为400元2场景2:帐号不存在/账户信息有误In/an/an/an/a提示银行卡账户错误,操作终止3场景3:密码输入错误(还有输入机会)VIn/an/an/a提示密码错误,请重新输入4场景4:密码输入错误(没有输入机会)VIn/an/an/a提示密码连续输入错误,ATM机吞卡5场景5:用户帐号余额不足VVVIV提示取款账面金额不足,重新输入取款金额6场景6:ATM机内现金不足VVVVI提示ATM机内金额不足,重新输入取款金额ATM机取款模块的测试用例90ID

温馨提示

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

评论

0/150

提交评论