这篇文章主要总结了我对于敏捷项目中总体测试策略的理解,主要来自于工作上的实践和思考。
先看下维基百科上关于 test strategy 的定义
归纳上面的定义,我们可以得出测试策略的最终目的是通过定义项目会采用的测试活动,尽可能得暴露和消除产品缺陷,减轻产品风险。除此之外,由于软件开发时常伴有交付压力,测试的时间和资源都是无法保证甚至可能被压缩的,所以测试策略还会从最低成本揭露产品质量风险出发,选择出最合理的测试方法和测试过程。
基于上面的定义,可见测试策略解决了两个大问题:
在详细点就是:
要说不同,先看定义上的不同。
由上可见,其实测试策略的内容已经被包含在测试计划里面了。测试策略定义应该做什么样的测试而测试计划包含所有关于测试策略该如何执行的信息,这些信息在测试计划里面被很好的组织起来。
一个公式可以进一步说明他们的关系 test plan = test strategy + test logistics 。所以test strategy可以被看做是test plan的一部分。 Test logistics 是指测试环境设置以及人力资源等等。
在James Bach的博客 A Question About Test Strategy 中,他把三者描述如下
让我们先来看下QA在敏捷项目中的主要工作,如下图所示
那你可能问“咦,怎么没有测试策略相关内容呢”。其实,整个开发测试流程就体现了测试策略的内容。上图所示的迭代开发流程里面包含了"Automated Acceptance Tests" & “Story Testing” & “System Testing”这些测试活动,那么为什么项目需要这些测试活动?这些活动如何具体如何开展?分别在哪一个项目阶段进行?这些问题都属于测试策略的范畴,是由测试策略定义和落地的。
敏捷开发模型下,迭代式的开发具有周期短和交付压力大的特点,对于如何快速响应新需求,保障新需求的质量以及已实现需求的回归测试都将是测试的挑战。如果没有一个匹配项目上下文,合理规划了测试活动的测试策略,这些挑战就会持续困扰着团队,所以标题的答案是当然需要。测试策略在敏捷开发模型下,通过详细定义项目的测试活动,能够更加合理地利用测试资源和统一项目对测试的认知。
此外,测试策略也是敏捷项目质量保障体系中重要的一节。
在传统瀑布开发模式下,测试计划test plan被认为是项目测试流程的关键部分,因为它指导着整个测试活动的开展,既然被认为是项目中的一个must have,于是有人会花很多时间很多精力去把测试计划给写好写完整。那么我们真的在敏捷开发模式的项目里需要一份测试计划吗?这真的能给项目质量带来价值吗?
敏捷宣言说过:
在敏捷项目中,产品范围也就是发布内容在spring进行之前就被讨论,所以QA们对于测试对象和测试范围一直都是清楚的,不需要特别地花时间去写一个详细的文档来阐述。同样地,agile ceremony会让QA们清楚地知道测试对象是什么,范围是什么,重点是什么,测试环境是什么而不需要一个单独的文档来进行详细的描述。甚至,所有关于测试的信息还可以被记录被故事卡中。在开发进行编码实现功能的时候,QA们会进行测试用例设计以及自动化测试编写,因为时间的紧迫,QA除了这两项测试活动,再去写一个详细测试计划是不经济的且价值不大,这两项测试活动才是敏捷项目中价值最高的,况且随着迭代的进行,测试计划的维护还需要时间精力。
综上所述,在敏捷项目中因为时间紧迫和避免重复劳动,价值不高的测试计划不是一个must have,个人甚至认为也不是一个nice to have。但是这并不是代表我们不需要"planning",而是不是需要"document planning","planning"的实施发生在迭代中的各类活动。
最终我们还是需要一个“计划”来指导迭代中的测试流程和方法,这就是测试策略是一个must have的原因。在敏捷项目中,“小而精”的测试策略比起“大而全”的测试计划而言,最大的优势就是测试策略定义的内容(“怎么测”)是不会轻易受影响改变的,并且在迭代中没有类似的重复活动。
具体到项目里,测试策略推荐在项目刚启动的时候制定。测试策略需要在项目早期就制定下来,用来指导项目的测试活动和方法,从而确定需要的测试资源和保证质量体系的建立。但也不能在产品和技术都还没有确定的时候就制定,因为只有在产品需求范围,技术架构和交付计划大致确认的情况,测试策略才能更加准确,从而减少维护成本。
因为测试策略会涉及到很多具体的测试技术和方法,也会要求制定人员具有对质量和测试非常深的理解,所以QA在敏捷团队中应该承担制定测试策略的主要责任,但是这并不意味“只有”QA来编写制定测试策略,测试策略的制定是一个团队活动,QA需要从不同角色收集到不同的信息
从多方收集信息能够保证业务、技术和质量三者对齐,避免误解和冲突,共同发挥最大的作用。
当测试策略制定完成以后,还需要给项目团队进行讲解,确保团队所有相关人员对项目中的测试活动和测试方法有着一致的理解,这样才能保证实施阶段的顺利。
接下来会涉及到QA制定测试策略的具体活动及流程。总的来说,大体流程可以如下
上面提到了QA可以从不同角色收集到不同的信息,除此之外,使用启发式测试计划语境模型 Heuristic Test Planning Context Model和启发式测试策略模型 Heuristic Test Strategy Model也是一个有效的渠道。具体如何使用这两个模型,请参考 htsm 和 htcpm 。
通过分析 htsm 中“项目环境”和“产品元素”的关键词和启发式问题,QA可以了解关于产品和项目的各类信息来帮助制定测试策略。 htcpm 也提供了大量的关键词来启发QA去分析了解产品需求、项目环境、测试小组和测试资源。
可以收集的信息大致可分类如下
只有从不同的维度收集到足够的项目信息并且很好的理解这些信息对项目质量和测试活动的影响,才能帮助我们少走弯路,制定出适合项目和团队的测试策略。
在具体思考“怎么测”之前,我们需要确定项目的质量目标。这个质量目标会对齐项目所有相关人员对于项目质量的理解和期望,明确质量范围也就是测试策略会覆盖的范围。同时,质量目标也要与产品目标对齐,因为质量的最终目的也是保证产品的成功。根据产品在不同阶段都有不一样的目标,质量目标有会随之变化。
那质量目标如何设定?主要是参考软件质量特征列表和软件质量模型,建立符合项目上下文的产品质量模型,从而确定项目质量目标
要建立项目产品的质量模型首先就需要先知道一个软件产品的质量属性或特征分别有什么,对应的质量模型是什么样的。幸运的是现在已经有很多可以参考的模型了
ISO/IEC_25010的质量模型大致如下:
从上面的质量特征列表或是模型可以看出,一个软件产品的质量由多个质量特征或标准组成,每个质量特征又可以进一步分解为子特征。通过这些已有的质量模型来启发哪些质量特征是对项目产品重要的,哪些质量标准适用于本项目产品,最后得出符合项目上下文的产品质量模型。
比如 我们创建的产品质量模型可以包含以下粗粒度特征:
上面的质量模型定义了产品质量特征和标准,而这些特征和标准就是我们应该完成的目标!除了上面说到的质量模型,一些具体的metrics也可以被引入来保证项目质量,成为项目质量目标的一部分。举个例子
上面提到的标准都是可以通过集成到持续集成流水线的质量工具或测试框架来实现。
此外,还有团队也会使用测试策略目标宣言来打造团队文化。
有了质量目标,接下来我们要考虑要怎么达成这个目标了!也就是说,我们应该有哪些测试类型来覆盖每一个质量目标?
测试类型按照不同维度可以有很多种分类,比如说
当然,上面只是列出了一部分。
此外,HTSM中的 Test Techniques 提供了九种通用的九种测试技术来启发对可应用的测试类型的思考。敏捷测试四象限也提供了敏捷项目可以参考的测试类型,这个测试技术分类系统可以帮助我们快速定位某测试类型在软件开发中的位置,根据项目产品情况选择合适的测试类型。
就以我们上面假设的质量目标为例,我们来看看可以应用哪些测试类型
值得注意的是,并不是每一个项目都需要覆盖上面所列出的测试类型。我们应该根据产品的目标和特点以及其他实际情况选择与之对应的测试覆盖类型,也就是说,不同项目根据测试类型的不同,测试广度是不一样的。同事,根据测试的难点和重点,测试深度也是不同的。所以,一切都要基于项目的上下文来思考和制定。
自动化测试金字塔用来指导敏捷项目中自动化测试的策略。
根据金字塔理论,项目应该在底层的单元测试和集成测试(API测试)投入更多的精力。
自动化测试项目会被集成在持续集成流水线里面,由上游项目自动触发。为了减少持续集成的反馈时间,一个普遍的做法是把庞大的自动化测试套件集依据重要性优先级放在不同的流水线里面,可以被上游项目触发也可以定时触发,下面描述了一个比较好的实践:
确定测试类型之后,我们就知道了整个项目的测试活动会有哪些。对于某些测试类型,特别是自动化相关的测试,我们需要对应的测试工具或是框架来支撑我们的测试。所以我们需要对每一个测试类型都去思考下如何进行测试,是否需要相应的测试工具和框架的支持。
拿一个web程序来举例
这个环节我们需要确定在项目开发生命周期的每个阶段做什么样的测试,使得测试类型与项目的开发流程充分结合,这样就能最大发挥所有测试活动的效果来达到我们的质量目标。因此,我们可以做出类似下面这样的表格来表现每个阶段的测试类型及其实施方法。
至此,测试策略解决的两个问题“测什么”和“怎么测”都可以找到大致答案了。
那如何衡量测试策略的有效性呢?质量度量可以告诉我们产品的质量情况和用户满意度,从而反应出测试策略是否有效和高效。
软件质量的度量没有什么最佳实践,也没有最准确和科学的度量,有的只是项目上积累的成功经验;但是这些成功经验又由于项目差异化太大而变得复用性很差。所以根据项目的上下文,我们需要制定出自己的质量度量标准。结合本文敏捷项目的背景,我们可以大致使用下面常用的度量:
同时,实例化的质量目标也是很好的项目质量的工具。对于质量模型,我们可以看下每一个质量元素我们是否做到;对于具体的指标metrics,要随时监控反馈。
一旦测试策略被确定,一般来讲不会经常变化,因为测试策略设置了一些测试标准。如果测试标准频繁地变动,这会让具体计划的执行变得困难,同时带来更多的资源浪费,最终影响了项目的质量。
在项目中我们会经常遇到“变化”:比如说
这些变化对测试的影响是被测对象的范围以及项目资源的调配。对于项目的质量目标、测试类型、测试阶段影响不大。所以,测试策略一旦被制定出来,变化不会太大。
不过这不代表测试策略的一成不变和缺乏改进,QA需要在每个迭代中观察测试策略实施的效果来决定当前的测试类型和实施手段是否满足项目需求。比如当项目集成测试(API Testing)经常fail,且协调工作耗时费力,QA可以考虑采用契约测试来代替现有的集成测试,提高整个项目组的生产率和质量;比如发现Internet Edge突然用户量增多且有关于Internet Edge的production bug被raise,QA需要把Internet Edge加到兼容性测试中,并且设置相关的测试环境;比如测试进度落后,交付压力增大,QA需要及时调整测试范围和测试重点,进行风险分析。
在实际项目中,往往会出现各种各样的问题来阻碍测试策略的顺利落地和执行。这些问题有些是测试策略自身的问题,但也有项目带来的问题。这时候,风险分析显得格外重要。
对于测试策略的风险分析,这个是应该贯穿整个测试策略制定周期里面的,我们需要通过项目风险清单提前识别项目中可能阻塞测试的风险,并通过风险优先级(风险暴露的概率风险暴露的损失)来评估风险,最终基于风险调整测试策略,把测试重点放到风险高优先级高的地方。
测试策略是影响质量的重要因素,但不是全部,下面列出了部分会影响质量的因素作为参考,在此文中不会展开来讲
上面详细阐述了我如何理解敏捷项目中的测试策略以及制定测试策略的具体步骤。由于IT项目的多样性和复杂性,这个总结不可能适用于有着不同上下文的项目,因地制宜地制定测试策略才能保证测试策略在项目中的可用性和合理性。
项目管理九大知识体系 质量管理
文章来源: 文章作者: 发布时间:2006-05-26 字体: [大 中 小]
提起如今的IT项目,软件工程倍受关注。而软件的质量更是众人关注的焦点,因为目前还没有一套完善的评估标准。甚至有人提出,现在的软件开发根本提不上是“工程”,因为它太稚嫩了,还没有一套成熟的标准来比照;因而软件项目极易出现失败或失误。大量实践证明,软件工程项目的成败,通常是因为管理问题(协同工作的能力),而不是技术上的问题。要想做一盘“完美”的软件大餐,质量管理的作用是不言而喻的。 在实际的项目质量管理中,质量管理总是围绕着质量保证(QualityAssurance)过程和质量控制(QualityControl)过程两方面。这两个过程相互作用,在实际应用中还可能会发生交叉。正如引言所述,关于软件的质量,很难下一个非常明确的定义。本文主要针对软件工程中的质量管理来进行讨论。 做软件“大餐”的工序 软件质量保证(SoftwareQualityAssurance,以下简称SQA)的目的是验证在软件开发过程中是否遵循了合适的过程和标准。软件质量保证过程一般包含以下几项活动: 首先是建立SQA组;其次是选择和确定SQA活动,即选择SQA组所要进行的质量保证活动,这些SQA活动将作为SQA计划的输入;然后是制定和维护SQA计划,这个计划明确了SQA活动与整个软件开发生命周期中各个阶段的关系;还有执行SQA计划、对相关人员进行培训、选择与整个软件工程环境相适应的质量保证工具;最后是不断完善质量保证过程活动中存在的不足,改进项目的质量保证过程。 独立的SQA组是衡量软件开发活动优劣与否的尺度之一。SQA组的这一独立性,使其享有一项关键权利——“越级上报”。当SQA组发现产品质量出现危机时,它有权向项目组的上级机构直接报告这一危机。这无疑对项目组起到相当的“威慑”作用,也可以看成是促使项目组重视软件开发质量的一种激励。这一形式使许多问题在组内得以解决,提高了软件开发的质量和效率。 选择和确定SQA活动这一过程的目的是策划在整个项目开发过程中所需要进行的质量保证活动。质量保证活动应与整个项目的开发计划和配置管理计划相一致。一般把该活动分为以下五类: 1)评审软件产品、工具与设施 软件产品常被称为“无形”的产品。评审时难度更大。在此要注意的一点是:在评审时不能只对最终的软件代码进行评审,还要对软件开发计划、标准、过程、软件需求、软件设计、数据库、手册以及测试信息等进行评审。评估软件工具主要是为了保证项目组采用合适的技术和工具。评估项目设施的目的是保证项目组有充足设备和资源进行软件开发工作。这也为规划今后软件项目的设备购置、资源扩充、资源共享等提供依据。 2)SQA活动审查的软件开发过程 SQA活动审查的软件开发过程主要有:软件产品的评审过程、项目的计划和跟踪过程、软件需求分析过程、软件设计过程、软件实现和单元测试过程、集成和系统测试过程、项目交付过程、子承包商控制过程、配置管理过程。特别要强调的是,为保证软件质量,应赋予SQA阻止交付某些不符合项目需求和标准产品的权利。 3)参与技术和管理评审 参与技术和管理评审的目的是为了保证此类评审满足项目要求,便于监督问题的解决。 4)做SQA报告 SQA活动的一个重要内容就是报告对软件产品或软件过程评估的结果,并提出改进建议。SQA应将其评估的结果文档化 5)做SQA度量 SQA度量是记录花费在SQA活动上时间、人力等数据。通过大量数据的积累、分析,可以使企业领导对质量管理的重要性有定量的认识,利于质量管理活动的进一步开展。 要说明的是,并不是每个项目的质量保证过程都必须包含上述这些活动或仅限于这些活动,要根据项目的具体情况来定。 SQA计划中必须明确定义在软件开发的各个阶段是如何进行质量保证活动的。它通常包含以下内容:质量目标;定义每个开发阶段的开始和结束边界;详细策划要进行的质量保证活动;明确质量活动的职责;SQA组的职责和权限;SQA组的资源需求,包括人员、工具和设施;定义由SQA组执行的评估;定义由SQA组负责组织的评审;SQA组进行评审和检查时所参见的项目标准和过程;需由SQA组产生的文档。 选择合适的SQA工具并不是试图通过选择SQA工具来保证软件产品的质量,而是用以支持SQA的活动。选定SQA工具时,首先需要明确质量保证目标。根据目标制定选择SQA工具的需求并文档化,包括对平台、 *** 作系统以及SQA工具与软件工程平台接口的要求等。 如何使白壁“无瑕” 按工序去做也不一定能得到一盘完美的“大餐”,因为火侯等因素实在很难掌握。万一掌握不好怎么办?软件质量控制主要就是发现和消除软件产品的缺陷。对于高质量的软件来讲,最终产品应该尽可能达到零缺陷。而软件开发是一个以人为中心的活动,所以出现缺陷是不可避免的。因此,要想交付一个高质量的软件,消除缺陷的活动就变得很重要。缺陷消除是通过“评审”和“测试”这类质量控制活动来实现的。 缺陷在软件开发的任何阶段都可能会被引入。项目质量管理过程包含了许多可以识别缺陷、消除缺陷的过程。“识别缺陷”和“消除缺陷”本来是两个不同的过程,但在这里为了简便统一用“消除”来代表它们。潜在的缺陷越大,用来消除它所花的费用越高。因此成熟的软件开发过程在每一个可能会引入潜在缺陷的阶段完成之后都会开展质量控制活动。这些为了消除缺陷的活动包括:需求评审、设计评审、代码走查、单元测试、集成测试、系统测试以及验收测试等。 质量控制的任务就是策划可行的质量管理活动,然后正确地执行和控制这些活动以保证绝大多数的缺陷可以在开发过程中被发现。 正如前面提到的,在进行评审和测试时可检测到缺陷。评审是面向人的过程,测试是运行软件(或部分软件)以便发现缺陷。在一个项目里,评审和测试活动是预先策划好的(计划书中确定执行哪些质量控制活动和何时执行这些活动)。在执行过程中,根据已定义好的过程来执行这些活动。通过执行这些活动来识别缺陷,然后消除这些缺陷。例如,系统测试过程一般包括制定测试计划,测试计划中应列出在测试执行过程中所有的测试用例,评审测试计划,并且最终执行测试计划。
IT项目管理的风险有哪些
项目风险是一种不确定事件或状况,一旦发生,会对至少一个项目目标,如进度、成本、范围或质量目标产生积极或消极影响。那么IT项目管理的风险有哪些呢?一起来了解下吧:
(1)技术风险。
核心系统升级引入了外包厂商的最新产品,使用了很多新技术,行内研发人员熟悉这些技术需要一定的时间,而在项目过程中却不可避免地会遇到一些技术问题。如何能快速解决这些棘手的技术问题我们的做法是:第一,指定行内外包厂商接头人,由接头人负责和外包厂商的技术人员进行沟通,同时该接头人也是行内对厂商产品最熟悉的人,一般性的小问题基本上此人就可以解决,比较复杂的问题才提交给厂商解决,这样比起全部问题都去找厂商解决,节省了时间。第二,购买厂商的人力进行技术支持,请厂商的研发人员来到开发现场和我们一块研发。第三,预约厂商在系统上线期间到现场待命,以应对紧急问题发生,对可能出现的问题进行第一时间的响应。
(2)沟通风险。
参与项目的外包厂商有多个,沟通渠道多,沟通成本大,而且容易出现理解不一致的情况。所以,项目组成立了专门的PMO,负责制定相应的沟通计划,为每个厂商指定行内的接头人,对内部人员实行分级管理,组织定期例会解决项目过程中出现的问题,防范由于对需求理解不一致造成的项目延误,充分利用已有的邮件、会议、电话和短信等沟通工具,并推广使用某即时通讯工具以作为主要的工作沟通工具。
(3)需求变更风险。
针对IT软件项目中不可避免的需求变更活动,在项目开始后,我部就停止了除政策性需求以外的所有规模超过20人/天的新业务需求,同时制定了需求变更流程:所有业务需求的变更必须由业务方的代表统一提出,变更必须有书面记录,开发人员仔细评估是否接受,最后由总管变更的领导(CCB)复审,总管领导具有一票否决权,从而精简了一些不合理的需求变更。在项目中期引入了IBM的配置管理工具CCCQ来管理代码和缺陷,所有Bug都进行了分类,并录入CQ系统,防止重复修改和修改后无记录等情况的发生。迁移演练之后的缺陷都由各个系统的负责人统一对缺陷进行分析评审,消除Bug修复可能导致的系统关联问题。
(4)进度风险。
项目进行核心升级,引起了客户面数据结构和一些外部接口的变化,同时前端业务平台也做了很大的调整,如开发了新的权限系统、迁移主机老权限系统上的权限数据到微机、替换传输协议XML为JSON、改造微机调用主机框架等。主机平台和开放平台开发工作量巨大,需要留有足够的ST、UAT测试时间,项目开发时间有限,为了应对可能造成的进度延误,我们采用了以下应对方法:一是制定详细的进度计划,明确每个人的任务,各项目组每周定期检视项目进度,如出现偏差及时纠正;二是与外包公司合作,引入外包人力,为项目临时增派了多名生力军;三是强制加班;四是并行化详细设计和编码同时加强代码评审,在加快进度的同时减少返工。
(5)数据迁移风险。
项目涉及的系统多达上百个,系统集成环境复杂,需要迁移的数据量庞大,而且数据迁移对数据的准确性和完整性有着很高的要求。项目制定了分阶段集成和多次迁移演练的策略:将迁移工作进行提前预演,模拟真实上线迁移场景。经过多次演练以后,问题大大减少,减轻了系统上线的数据迁移风险。
(6)人力资源风险。
项目建设周期长,历时两年,大范围人员流动可能会造成项目延误。针对这一风险,应对的方法是:做两手准备,尽力挽留要走的人员,晓之以理,动之以情,请求公司人力资源部提升员工待遇;同时加紧社会招聘,在重要的岗位上安排备份,防止由于成员生病、离职等意外造成的减员。最终这个风险没有成为问题。
在项目升级项目中,我负责两个子系统的开放部分,由于高层对风险管理的重视,我在执行的时候也特别重视对风险的控制。项目组有四个人,沟通成本比较低,所以我们每隔一周进行一次代码评审,解决遇到的一些技术难题和编码规范问题,在实际开发中使用Checkstyle进行代码规范检视,及早扼杀了可能出现的Bug和不规范的代码;制定组员每周报告进度制度,防范进度偏差;面对前端最可能出现的需求变更——UI变更,我尝试在设计初期使用原型方法和业务进行有效沟通,大大减少了后期UAT阶段UI变更需求。回想刚进公司时我做过的某个项目,由于没有考虑到UI类需求变更风险,前期没有进行UI设计的交流,导致UAT阶段大量返工,使项目延误了一个多月,并且浪费了不少人力资源。设想如果当时识别了这类风险,在早期就把风险发生的概率降低,那么项目可能会顺利得多。
由于前期风险控制得当,一直到迁移演练前我负责的项目都很顺利,但是在迁移演练过程中出现了一些问题,其中一个问题是导库程序不能正常执行,并多次发生。我和同事花了很多时间研究问题,最后找到的原因是某个配置参数的问题,研发人员使用了错误的配置参数,ST、UAT期间导库的数据量比真实演练期间的数据量小太多,所以没有被发现,修改配置后再演练环境导库成功。还有一些问题是没有有效沟通导致的。例如,在演练的时候用户反映某个查询交易很慢,经排查,后台人员说前台调错了交易,前台人员提出异议:为什么ST环境查询很快原来后台人员写了多个查询交易,新交易确实能提升查询速度,但是没有在正式的文档上注明前台应使用新交易替换老交易,也没有通过别的途径告知前台,这样前台调用的还是老交易,导致了查询性能问题。由于ST、UAT环境和生产环境的差异性,上述两类问题很难暴露,试想如果没有进行迁移演练,这个问题恐怕要在生产上出现了。迁移演练提前暴露了ST、UAT所不能测出的系统缺陷,使得研发人员能有充分的时间去排查问题和修复缺陷,有效降低了系统上线风险。
经过这次核心升级项目的洗礼,我深深认识到风险管理在IT项目中的重要性,正因为对风险管理足够重视,提前制定了风险应对计划,我们才得以如庖丁解牛般化解项目中遇到的各种风险,并最终取得了上线的胜利。任何项目都不能回避风险问题,风险的存在导致几乎每个项目都不可能顺风顺水地完成项目目标,良好的风险管理技能将帮助项目经理处理好项目中的不确定因素,保证项目的顺利进行。
;以上就是关于敏捷团队中的测试策略全部的内容,包括:敏捷团队中的测试策略、质量管理九大知识体系、IT项目管理的风险有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)