收藏 分享(赏)

软件测试总复习(九).ppt

上传人:hskm5268 文档编号:4301824 上传时间:2018-12-21 格式:PPT 页数:78 大小:845KB
下载 相关 举报
软件测试总复习(九).ppt_第1页
第1页 / 共78页
软件测试总复习(九).ppt_第2页
第2页 / 共78页
软件测试总复习(九).ppt_第3页
第3页 / 共78页
软件测试总复习(九).ppt_第4页
第4页 / 共78页
软件测试总复习(九).ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

1、学习内容 (1),软件测试的基础理论 软件测试定义与目的 三个观念,八项原则 软件测试的关键问题 Who:软件测试工程师的素质和性格 What:软件测试的对象 When:软件测试与软件开发各阶段的关系、模型 How:软件测试的5个过程 软件测试的信息流,学习内容 (2),软件测试的方法与过程 软件测试的分类 软件测试5个阶段 软件测试技术 黑盒测试、白盒测试 自动化测试工具 WinRunner、LoadRunner和Junit 测试工具软件,软件测试基础理论,1. 1 软件测试的定义,软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设

2、计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。 简单地说,软件测试是“探测”,在“探测”中发现软件的毛病。,1.2 软件测试的根本目的,软件测试的根本目的: 保证软件质量 软件质量的定义 (P 6) 软件质量的内涵 软件测试的范围,换言之,测试的目的是:以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。,1.2 软件测试的目的,1.3 软件测试的3个重要观点,G. j

3、. Myers 有关测试的3个重要观点1、测试是为证明程序有错,而不是证明程序无错; 2、一个好的测试用例在于发现至今未发现的错误; 3、一个成功的测试是发现了至尽未发现的错误的测试; 软件质量的判断不只限于程序本身,而是整个软件研制过程。,1.3 软件测试的8大原则,1. 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。 2. 测试用例应由测试输入数据和对应的预期输出结果这两部分组成。 3.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。,5. 充分注意测试中的群集现象。 经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。 6. 严格执行测试计划,排

4、除测试的随意性。 7. 应当对每一个测试结果做全面检查。 8. 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。 (三大纪律,八项注意),1.3 软件测试的原则,软件测试的关键问题 (P7, P9),1.4 好的测试工程师应具备的素质(WHO),1、沟通能力2、移情能力3、技术能力4、自信心5、外交能力6、幽默感7、很强的记忆力8、耐心9、怀疑精神10、自我督促11、洞察力,九型人格中较适合测试工程师的型号:1号:完美型6号:警觉型5号:理智型九型人格中不太适合测试工程师的型号:2号:助人型9号:平和型,1.4 九型人格的应用 (WHO),1.5 .软件测试的对象 (WHA

5、T),需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。,1.6软件测试与软件开发各阶段的关系(WHEN),单元测试 集成测试 确认测试 系统测试 验收测试 软件测试应贯穿于软件定义与开发的整个期间。,1.6软件测试与软件开发各阶段的关系(WHEN),1.6 软件测试模型 (WHEN),V模型示意图,W模型示意图,1.6 软件测试模型 (WHEN),1.6 软件测试模型 (WHEN),其他模型 除上述常见模型外,业界还流传着其他几种模型,例如H模型、X模型等。 X模型提出针对单独的程序片段进行相

6、互分离的编码和测试,此后通过频繁的交接,通过集成最终合成为可执行的程序。 H模型中, 软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行,某个测试点准备就绪时,就可以从测试准备阶段进行到测试执行阶段。,1.6 软件测试模型 (WHEN),X模型示意图,1.6 软件测试模型 (WHEN),H模型示意图,1.6 软件测试模型 (WHEN),V模型强调了在整个软件项目开发中需要经历的若干个测试级别,而且每一个级别都与一个开发级别相对应,但它忽略了测试的对象不应该仅仅包括程序,或者说它没有明确地指出应该对软件的需求、设计进行测试,而这一点在W模型中得到了补充。 W模型强调了测试计划等

7、工作的先行和对系统需求和系统设计的测试,但W模型和V模型一样也没有专门对软件测试流程予以说明,因为事实上,随着软件质量要求越来越为大家所重视,软件测试也逐步发展成为一个独立于软件开发的一系列活动,就每一个软件测试的细节而言,它都有一个独立的操作流程。比如,现在的第三方测试,就包含了从测试计划和测试用例编写,到测试实施以及测试报告编写的全过程,这个过程在H模型中得到了相应的体现,表现为测试是独立的。也就是说,只要测试前提具备了,就可以开始进行测试了。因此,在实际的工作中,我们要灵活地运用各种模型的优点,在W模型的框架下,运用H模型的思想进行独立的测试,并同时将测试与开发紧密结合,寻找恰当的就绪点

8、开始测试并反复迭代测试,最终保证按期完成预定目标。,1.7 软件测试的5个过程,测试计划,测试设计,测试开发,测试执行,测试评估,1.8 .测试信息流,软件配置:软件需求规格说明、软件设计规格说明、源代码等 测试配置:测试计划、测试用例、测试程序等 测试工具:测试数据自动生成程序、测试结果分析程序等等,1.8 .测试信息流,2. 1 软件测试的分类,软件测试是一项复杂的系统工程,从不同的角度考虑可以有不同的划分方法1、按执行测试的划主体分:人工测试 自动化测试 2、按测试技术划分:白盒测试 黑盒测试 灰盒测试3、按照是否执行程序划分:静态测试、动态测试,2. 1 软件测试的分类,4、按开发阶段

9、划分: 单元测试 集成测试 确认测试 系统测试 验收测试5、按照测试实施组织划分:开发方测试(a测试)、用户测试(测试)、第三方测试。6、按测试对象划分:面向开发的单元测试 WEB应用测试 C/JAVA应用测试 数据库测试 负载性能测试,2.1.1 静态测试与动态测试,1、静态测试 静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估。 静态测试包括代码检查 、静态结构分析、代码质量度量 等。它可以由人工进行,也可以借助软件工具自动进行。 静态测试方法也可利用计算机作为对被测程序进行特性分析的工具,但与人工测试方式有着根本区别。另一方面,因它并不真正运行被测程序,只进行特性分析,

10、这又与动态方法不同。所以,静态方法常常称为“分析”,静态测试是对被测程序进行特性分析方法的总称。,静态测试与动态测试(续),2、动态测试 动态方法的主要特征是:计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况即输入与输出的对应关系进行分析,以达到检测的目的。 动态测试包括:(1)功能确认与接口测试(2)覆盖率分析(3)性能分析(4)内存分析,2.1.2 黑盒测试和白盒测试,若测试规划是基于产品的功能,目的是检查程序各个功能是否能够实现,并检查其中的功能错误,则这种测试方法称为黑盒测试(Black-box Testing)方法。 黑盒测试又称为功能测试、数据驱动测试和基于规格说明的

11、测试。它是一种从用户观点出发的测试,一般被用来确认软件功能的正确性和可操作性。 若测试规划基于产品的内部结构进行测试,检查内部操作是否按规定执行,软件各个部分功能是否得到充分使用,则这种测试方法称为白盒测试(White-box Testing)方法。白盒测试又称为结构测试、逻辑驱动测试或基于程序的测试,一般用来分析程序的内部结构。,2.1.3 人工测试与自动化测试,人工测试: 方法: 代码走查、桌面检查、代码审查 软件开发各阶段的审查、评审 可发现 30% - 70% 的逻辑设计和编码错位 自动化测试: 利用测试工具解决测试中的繁重性、重复性 提高效率,2.2 软件测试的5个过程,图2-2 软

12、件测试的过程流程,2.2 软件测试的5个过程,单元测试:针对每个单元的测试, 以确保每个模块能正常工作为目标。 集成测试:对已测试过的模块进行组装,进行集成测试。目的在于检验与软件设计相关的程序结构问题。 确认(有效性)测试:是检验所开发的软件能否满足所有功能和性能需求的最后手段。 系统测试:检验软件产品能否与系统的其他部分(比如,硬件、数据库及操作人员)协调工作。 验收(用户)测试:检验软件产品质量的最后一道工序。主要突出用户的作用,同时软件开发人员也应有一定程度的参与。,软件测试技术,3.1 黑盒测试法概述,3.2 边界值测试,任何程序都可以看成是一个函数 程序的输入构成函数的定义域 程序

13、的输出构成函数的值域 基本原理 错误更可能出现在输入变量的极值附近 例如:程序把误写成了 基本思想是测试时输入变量取 最小值(min) 略高于最小值(min+) 正常值(nom) 略低于最大值(max-) 最大值(max),边界值分析设计测试用例的获得 通过使所有变量取正常值,只使一个变量按边界值基本思想循环取值。 例如:两变量函数的边界值分析测试用例为:(P42 图3.2) (X1nom,X2nom) (X1nom,X2min) (X1nom,X2min+) (X1nom,X2max-) (X1nom,X2max) (X1min,X2nom) (X1min+,X2nom) (X1max-,X

14、2nom) (X1max,X2nom) 对于一个n变量函数,测试用例数为4n+1个,3.2 边界值测试,健壮性测试 是边界值分析的一种简单扩展,用于观察例外处理情况 基本思想是测试时输入变量取 (P42 图3.3) 最小值(min) 略高于最小值(min+) 正常值(nom) 略低于最大值(max-) 最大值(max) 略超过最大值(max+) 略低于最小值(min-),3.2 边界值测试,最坏情况测试 考虑多个变量取极值的情况 最坏情况测试用例的获得 所有变量均可取最小值(min)、略高于最小值(min+)、正常值(nom)、略低于最大值(max-)、最大值(max) 这五个元素中的任何一个

15、。 测试用例为五个集合的笛卡儿乘积 N变量的最坏情况测试会产生5n个测试用例 健壮最坏情况测试 N变量的健壮最坏情况测试会产生7n个测试用例,3.2 边界值测试,案例分析一 :三角形问题,三角形问题接受三个整数a、b、c作为输入,代表三角形的三条边。a,b,c必须满足以下条件: C1.1a 200 C2.1 b 200 C3.1 c 200 C4.ab+c C5.ba+c C6.ca+b 程序的输出是由这三条边确定的三角形类型 等边三角形 等腰三角形 不等边三角形 非三角形,三角形问题的测试用例-边界值分析 (p43 表 3.2),等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑

16、程序的内部结构,只依据程序的规格说明来设计测试用例。 等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。,3.3 等价类测试, 划分经验 当规定了输入范围时:,当规定了输入的一组值,且对不同值做不同处理时:例:教工分房方案中,按教授、副教授、讲师、助教分别计分 有效类4个;无效类1个,3.3 等价类测试, 设计步骤 设计一个新方案以尽可能多地覆盖尚未被覆盖的有效等价类;重复这一步骤直到所有有效类都被覆盖为止。 设计一个新方案以覆盖一个且仅一个尚未被覆盖的无效等价类;重复这一步骤直到所有无效类都被覆盖为止。(通常程序执行一个错误

17、后即不继续检测其它错误,故每次只测一个无效类),3.3 等价类测试,案例分析-三角形问题的等价类测试用例,使用输出确定等价类 R1=等边三角形 R2=等腰三角形 R3=不等边三角形 R4=不构成三角形 弱一般等价类测试用例(强一般等价类),弱健壮等价类测试用例(考虑a,b,c的无效值),案例分析-三角形问题的等价类测试用例,强健壮等价类测试用例(以下为额外测试用例三维立方的一个角),案例分析-三角形问题的等价类测试用例,另:使用输入确定等价类 D1=a=b=c D2=a=b,ac D3=a=c,a b D4=b=c,b a D5=a b,a c,b c D6=a b+c D7=ba+c D8=

18、ca+b 同学们可自己设计等价类测试用例,案例分析-三角形问题的等价类测试用例,白盒测试的常用方法,4.2 测试方法,逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。它要求测试人员十分清楚程序的逻辑结构,考虑的是测试用例对程序内部逻辑覆盖的程度。,4.2.1 逻辑覆盖,语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖,50,测试覆盖总结,覆盖标准从低到高分别是: 语句覆盖:是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。它是最弱的逻辑覆盖,效果有限,必须与其它方法交互使用。 判定覆盖(也称为分支覆盖):执行足

19、够的测试用例,使得程序中的每一个分支至少都通过一次。判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。,51,测试覆盖总结,条件覆盖:执行足够的测试用例,使程序中每个判断的每个条件的每个可能取值至少执行一次; 条件覆盖深入到判定中的每个条件,但可能不能满足判定覆盖的要求。 判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。 判定/条件覆盖有缺陷。从表面上来看,它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏

20、某些条件取值错误的情况。为彻底地检查所有条件的取值,需要将判定语句中给出的复合条件表达式进行分解,形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。,52,测试覆盖总结,条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。 这是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏掉。测试还不完全。 路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。,53,测试覆盖总结,4.3 基本(独立)路径测试,基本(独立)路径测试方法把覆盖的

21、路径数压缩到一定限度内,程序中的循环体最多只执行一次。 它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出独立可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个独立可执行路径至少要执行一次。,55,控制流图,56,基本路径测试,第一步:画出控制流图流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个流程图的处理方框序列和一个菱形决测框可被映射为一个流图结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使

22、该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。,基本路径测试,57,基本路径测试,例4:有下面的C函数,用基本路径测试法进行测试void Sort(int iRecordNum,int iType) int x=0;int y=0;while (iRecordNum- 0)if(0= =iType) x=y+2; break;elseif (1= =iType)x=y+10;elsex=y+20;,基本路径测试,58,基本路径测试,画出其程序流程图和对应的控制流图如下,59,基本路径测试 - 计算圈复杂度,第二步:计算

23、圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。,基本路径测试,60,基本路径测试 - 计算圈复杂度,有以下三种方法计算圈复杂度: 流图中区域的数量对应于环型的复杂性; 给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量; 给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。 (包含条件的节点被称为判定节点,也叫谓词节点),基本路径测试,61,基本路径测试 - 计算圈复杂度,

24、对应上面图中的圈复杂度,计算如下: 流图中有四个区域; V(G)=10条边-8结点+2=4; V(G)=3个判定结点+1=4。,基本路径测试,62,基本路径测试 - 导出测试用例,第三步:导出测试用例 根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。) 路径1:4-14 路径2:4-6-7-14 路径3:4-6-9-10-13-4-14 路径4:4-6-9-12-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。,63,基本路径测试 - 准备

25、测试用例,第四步:准备测试用例为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:,基本路径测试,64,基本路径测试 - 准备测试用例,路径1:4-14 输入数据:iRecordNum=0,或者取iRecordNum0的某一个值 预期结果:x=0 路径2:4-6-7-14 输入数据:iRecordNum=1,iType=0 预期结果:x2 路径3:4-6-9-10-13-4-14 输入数据:iRecordNum=1,iType=1 预期结果:x10 路径4:4-6-9-12-13-4-14 输入数据:i

26、RecordNum=1,iType=2 预期结果:x20,void Sort(int iRecordNum,int iType) int x=0;int y=0;while (iRecordNum- 0)if(0= =iType)x=y+2; break;elseif(1= =iType)x=y+10;elsex=y+20;,基本路径测试,最少测试用例数计算( N-S图),对于一般的、更为复杂的问题,估算最少测试用例个数的原则也是同样的: 如果在N-S图(由美国人 I.Nassi和B.Shneiderman共同提出的 )中存在有并列的层次A1、A2,A1和A2的最少测试用例个数分别为a1、a2

27、,则由 A1、A2 两层所组合的 N-S图对应的最少测试用例数为a1a2。 如果在N-S图中不存在有并列的层次,则对应的最少测试用例数由并列的操作数决定,即N-S图中除谓词之外的操作框的个数。,65,最少测试用例数计算( N-S图),例:如下图所示的两个N-S图,至少需要多少个测试用例完成逻辑覆盖?,对于第一个N-S图: 由于图中并不存在并列的层次,最少测试用例数由并列的操作数决定,即为1+1+1=3。对于第二个N-S图: 由于图中没有包含并列的层次,最少测试用例数仍由并列的操作数决定,即为1+1+1+1+1=5。,66,最少测试用例数计算( N-S图),例:如下图所示的N-S图,至少需要多少

28、个测试用例完成逻辑覆盖?,分析该N-S图: 图中的2345和67是并列的两层。其中,2345层对应的最少测试用例数为1+1+1+1+1=5,67层对应的测试用例数为1+1+1=3,2345和67这两层组合后对应的测试用例数为53=15。最后,由于两层组合后的部分是不满足谓词1时所要做的操作,还要加上满足谓词1要做的操作,因此整个程序所需测试用例数为15+1=16。,67,自动化测试的定义 自动化测试就是使用软件工具来代替手工进行的一系列动作。它具有良好的可操作性、可重复性和高效率等特点。 自动化测试的目的是减轻手工测试的工作量,以达到节约资源(包括人力、物力等),保证软件质量,缩短测试周期的效

29、果。 通常是使用脚本或者其他代码驱动应用程序。这一切可以通过可视用户界面(如浏览器)完成,也可以通过直接命令(从客户端发向服务器,以模仿浏览器发送的命令)完成自动化测试。 自动化测试大都属于回归测试的范畴。,5.1软件测试自动化基础,自动化测试优点 提高测试效率 降低对软件新版本进行回归测试的开销 完成手工测试不能或难以完成的测试 具有一致性和可重复性 更好地利用资源 降低风险,增加软件信任度,5.1软件测试自动化基础,自动化测试的局限性 不能完全取代手工测试和手工测试工程师 软件自动化测试可能降低测试的效率 测试人员期望自动测试发现大量的新错误 如果缺乏测试经验,测试的组织差、文档少或不一致

30、,则自动测试的效果比较差 软件自动化测试工具本身的问题,5.1软件测试自动化基础,WR的测试过程分为以下六个阶段: 创建GUI map 创建测试 调试测试 执行测试 查看测试结果 报告发现的错误,5.2、WINRUNNER的测试过程,创建GUI map 使用 RapidTest Script wizard(快速测试脚本指南)回顾软件用户界面,并系统地把每个GUI 对象的描述添加到 GUI map 中。 测试人员也可以在录制测试的时候,通过点击对象把对单个对象的描述添加到 GUI map 中。 注意:当使用 GUI map per test 模式时,测试人员可以跳过这一步骤。,5.2 WINRU

31、NNER的测试过程,创建测试 测试人员可以通过录制、编程或两者同时使用的方式创建测试脚本。 录制测试时,在测试人员需要检查软件反应的地方插入检查点(Checkpoint)。测试人员可以插入检查点来检查 GUI 对象,位图(Bitmap)和数据库。 在这个过程中,WR 捕捉数据并作为期望结果(被测软件的期望反应)储存下来。,5.2 WINRUNNER的测试过程,调试测试 测试人员可以先在调试模式(Debug mode)下运行脚本。测试人员也可以设置中断点(Breakpoint),监测变量,控制WR识别和隔离错误。调试结果被保存在调试文件夹(Debug folder),一旦调试结束就可以删除。 执

32、行测试 测试人员在检验模式(Verify mode)下测试被测软件。WR在脚本运行中遇到检查点后,就把当前数据和前期捕捉的期望值进行比较。如果发现有不符合,就记录下来作为实测结果。,5.2 WINRUNNER的测试过程,查看测试结果 测试是否成功由测试者来认定。每次测试结束,WR会把结果显示在报告中。报告会详述测试执行过程中发生的所有主要事件,如检查点、错误信息、系统信息或用户信息。 如果在检查点有不符合被发现,测试者可以在 Test Results(测试结果)窗口查看预期结果和实测结果。如果是位图不符合,测试人员也可以查看用于显示预期值和实测结果之间差异的位图。,5.2 WINRUNNER的

33、测试过程,报告发现的错误 如果由于测试中发现错误而造成测试运行失败,测试人员可以直接从测试结果(Test Results) 窗口报告有关错误的信息。这些信息通过 EMAIL 发送给测试经理(QA Manager),用来跟踪这个错误直到被修复。,5.2 WINRUNNER的测试过程,5.3 使用 LoadRunner 进行负载/压力测试,图 7.1 LoadRunner测试过程图,使用LoadRunner 完成测试一般分为四个步骤:1)Vitrual User Generator 创建脚本创建脚本,选择协议录制脚本编辑脚本检查修改脚本是否有误2)中央控制器(Controller)来调度虚拟用户创建Scenario,选择脚本设置机器虚拟用户数设置Schedule如果模拟多机测试,设置Ip Spoofer3)运行脚本分析scenario4)分析测试结果,5.3 使用 LoadRunner 进行负载/压力测试,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 软件测试

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报