个人对敏捷的认识

1.敏捷是一种测试的模式

2.什么是敏捷测试:

1、强调从客户的角度,即是从使用系统的用户的角度,来测试系统。

2、重点关注持续迭代的测试新开发的功能,而不再强调传统测试过程中严格的测试阶段(传统的测试是指在需求分析,开发设计,编码完成后,也就是V模型中的测试阶段才开始),持续交付测试

3、建议尽早开始测试,一旦系统某个层面可测,比如提供了模块功能,就要开始模块层面的单元测试,同时随着测试深入,持续进行回归测试保证之前测试过内容的正确性。

4、注重快速反馈

5、过程的改进

6、与程序员密切合作,从开始阶段就参与测试,更关注用户价值

从开发和测试共同角度:

1、重视测试,开发专注设计工作,把质量方面的工作交给测试。测试承担自动化和测试的工作,做到持续迭代测试,尽早发现问题,测试的周期相对较长,测试贯穿在整个开发和测试的阶段

2、加快交流,加快缺陷的修复速度

3、 测试策略:长期的测试计划,不经常改变,轻量级
4、 测试计划:轻量级,关注风险,更灵活,随时调整

5、应该主要是响应快吧,更多的沟通交流,提高问题的解决效率

6、为敏捷测试是从需求分析就参与了,参与的时间早,测试周期长

 

一 敏捷开发:

   所谓敏捷开发,简言之就是是一种以人为核心、迭代、循序渐进的开发方法。敏捷方法强调以人为本,专注于交付对客户有价值的软件。在高度协作的开环境中,使用迭代式的方式进行增量开发,经常使用反馈 进行思考、反省和总结,不停的进行自我调整和完善。

二 敏捷开发者价值观:

1 个体与交互 胜于 过程与工具
2 可用的软件 胜于 复杂的文档
3 客户协作 胜于 客户谈判
4 响应变化 胜于 遵循计划

三 敏捷测试

   从上面敏捷开发的定义及敏捷开发者的价值观我们可以得到敏捷测试的定义:

   所谓敏捷测试是,测试拥抱敏捷的价值观参与到敏捷开发过程中的一种测试,通过持续的交付测试检查来验证软件质量,不断进行完善和优化的过程。

四 敏捷测试流程

  所谓敏捷测试流程,应是在敏捷开发中贯穿测试过程,在每个测试过程中有分析,计划,设计,实施,执行,评估等测试环节。

  以下为经典的Scrum框架,被众多敏捷爱好者采用,如下图所示:

五 敏捷测试对测试的要求有哪些?

1 早: 尽早测试,更体现在早期参与需求分析及评审,架构设计评审及Coding评审等,出发原则是避免缺陷产生;

2 快: 快速测试,快速反馈结果,评估其实现可行性,如:自动化测试快速回归等措施;

3 付: 持续交付,不间断的交付“可用”稳定的版本,要求具备相应的测试方法和技术,建立在一定的测试策略和方针上,“付”并非是做完就集成,而强调的是“有用”集成;

4 沟:有效沟通,是否进行过有效沟通与相关人员,定义出每个步骤的目标及评测方法;

 

六 敏捷测试实用方法

1 维护一套测试checkList,借鉴测试,有效梳理测试范围,减少常规测试思考;

2 测试用例划分等级,挑选合适的测试用例进行测试检查验证,快速进行检查验证;

3 敏捷测试,分层次进行测试,如:自动化回归测试,单元测试,Api对内对外测试,Bug大扫除测试等,把握一个原则,不同层次的测试针对发现缺陷的着力点不同;

4 增加探索性测试,检查测试的覆盖力度是否全面;

5 多利于Diff检查变更地方,进行重点测试检查过程;

6 多引进测试工具,提高效率,这里不多讲了;

 

敏捷测试介绍

 

敏捷测试介绍

敏捷测试当然不能简单地理解为测得更快,绝对不是比以前用更少时间进行测试,也不是将测试的范围缩小了或将质量降低减少测试任务。也有人说,只有敏捷开发,没有敏捷测试。下面我们将要讨论一下:

  • 什么是敏捷测试?
  • 敏捷测试有哪些流程改进?
  • 测试人员如何面对敏捷测试的挑战?
  • 在敏捷测试中如何制定相应的自动化测试策略?

什么是敏捷测试

假如将过去传统的测试流程和方法硬塞入敏捷开发流程中,测试工作可能会事倍功半,测试人员可能会天天加班,而不能发挥应有的作用。敏捷测试应该是适应敏捷方法而采用的新的测试流程、方法和实践,对传统的测试流程有所剪裁,有不同的侧重例如减少测试计划、测试用例设计等工作的比重,增加与产品设计人员、开发人员的交流和协作。在敏捷测试流程中,参与单元测试,关注持续迭代的新功能,针对这些新功能进行足够的验收测试,而对原有功能的回归测试则依赖于自动化测试。由于敏捷方法中迭代周期短,测试人员尽早开始测试,包括及时对需求、开发设计的评审,更重要的是能够及时、持续的对软件产品质量进行反馈。简单地说,敏捷测试就是持续地对软件质量问题进行及时地反馈

敏捷测试流程的优化

在敏捷方法中,需求变化比较快、产品开发周期很短,我们目前采用四周时间,也就是每个月发布一个新版本开发周期短,功能不断累加,给软件测试带来很大的挑战,软件测试流程要做相应的调整。例如,我们原有的测试规范明确规定,首先要建立项目的主测试计划书,然后再建立每个功能任务的测试计划书,测试计划书有严格的模板,而且需要和产品经理、开发人员讨论,并和测试团队其他人员(包括测试经理)讨论,最终得到大家的认可和签字才能通过,仅测试计划经过“起草、评审和签发一个完整的周期就需要一个月在敏捷方法中,不再要求写几十页的测试计划书,而是在每个迭代周期,写出一页纸的测试计划将测试要点(包括策略、特定方法、重点范围等)列出来就可以了。

在原有测试规范中,要求先用Excel写出测试用例,然后进行讨论、评审,评审通过以后再导入测试用例库(在线管理系统)中。在敏捷测试中,可能不需要测试用例,而是针对Use Case或User Story直接进行验证,并进行探索性测试。而节约出来的时间,用于开发原有功能的自动化测试脚本,为回归测试服务。自动化测试脚本将代替测试用例,成为软件组织的财富。原有测试规范还要求进行两轮回归测试,在敏捷测试中,只能进行一轮回归测试。综合这些考虑,敏捷测试的流程简单有效,如图2所示。

 

在敏捷测试流程中,如前所述,测试是一个持续的质量反馈过程,测试中发现的问题要及时反馈给产品经理和开发人员,而且某些关键方面也要得到我们足够的关注,主要有:

  • 测试人员不仅要全程参与需求、产品功能设计等讨论,而且要面对面地、充分地讨论(包括带语言、视频的即时通讯),仅仅通过邮件是不够的。
  • 参与代码复审(Code Review),并适当辅助开发人员进行单元测试。
  • 在流程中增加一个环节“产品走查(Product Walk-through)”DEMO——测试人员和产品经理、开发人员等在一起,从头到尾将新功能看一遍,可直观、快速地发现问题。

新功能的测试和回归测试策略

测试任务简单地可分为新功能测试回归测试。在敏捷方法中,针对这两部分的测试建立相应的策略,以提高测试的效率,最大限度地降低质量风险。新功能测试的策略主要有:

  • 不需要测试用例,直接基于用例和对需求的理解来完成新功能的验证。即使要写测试用例,只要保证各个功能点被覆盖,不要过于详细(大颗粒度)。
  • 持续地进行验证,一旦某块新代码完成(Code Drop),就开始验证,而不是等到所有代码完成后才开始测试。这也包括参与到单元测试和集成测试中。
  • 实施端到端(End-to-End)的测试,确保完整的业务流程的实现,同时,也容易发现业务逻辑不够清晰、不够合理等各方面的问题。
  • 阅读代码来发现问题,可以和开发人员工作保持同步,消除测试周期的压力。
  • 基于经验,可以实施更多的探索性测试、组合交互性(Interoperation)测试和用户场景(User Scenario)测试,更有效地发现埋藏较深的缺陷。

回归测试是敏捷测试中需要面对的难点。每次迭代都会增加新的功能,一个产品可能会经过十几次、甚至几十次迭代,回归测试范围在不断增大,而每次迭代周期没变,可能还是一个月。这样验收测试的时间非常有限,所以回归测试很大程度上依赖于自动化测试,因为很难将回归测试控制在非常有限的范围内。当然,还是有些办法可以帮助我们减少回归测试的范围,例如:

  • 通过执行Code Diff 来了解代码变动的所有地方,再做代码关联分析,就可以明确知道要进行哪些地方的回归测试,回归测试范围会大大缩小。
  • 基于风险和操作面分析来减少回归测试的范围,例如回归测试只是保证主要功能点没有问题,而忽视一些细节的问题。
  • 持续测试的过程,只要有时间,就进行测试,包括开发人员、产品设计人员都参与到日常的试用和测试中来。

自动化测试策略

由于开发周期短,需求、设计等方面沟通也需要花费很多时间,没有足够时间开发自动化测试脚本,至少对新功能的测试很难实现自动化测试。这时候,就需要正确的策略来提高自动化测试的效益,如图3所示,并说明如下。

  • 构建一个灵活的、开放的自动化测试框架,如基于关键字驱动的自动化框架,使测试脚本的开发简单易行,脚本维护也方便。
  • 针对稳定的产品特性开发自动化测试脚本,也就是针对前期完成的已有功能开发自动化测试的脚本,小部分主要功能自动化,而大部分新功能测试采用手工测试
  • 集中精力在单元层次上实现自动化测试,主要由开发人员实施,测试人员提供单元测试框架,并辅助完成一些所需的基础工作。
  • 在产品设计、编程时就很好地考虑了自动化测试的需求,使全面的、自动化的底层测试、接口测试成为可能,尽量避免用户界面(UI)的自动化测试。
  • 良好的IT基础设施,包括自动化构建软件包、自动化版本验证(BVT)、自动化部署、覆盖率自动产生等。

敏捷测试工具

自动化测试依赖于测试工具,所幸的是,目前已有很多敏捷测试工具。由于篇幅所限,这里只是简单地列出一些常用的敏捷测试工具,不再深入讨论了。

  • 单元测试工具:TestNG、xUnit家族(如JUnit、NUnit)、JMock、BizMock等。
  • 功能测试自动化:ThoughtWorks Twist。
  • Web功能测试(frontend):Selenium IDE/RC、WatiR、WatiN。
  • Web service测试工具(backend):soapUI。
  • 性能测试:JMeter+BadBoy。
  • 验收测试框架:Fitnesse、Tellurium。
  • 敏捷测试过程管理工具:微软的Visual Studio 2010,包括TFS 2010Scrum模板MS VS Scrum 1.0)、Test Manager 2010、Coded UI Test等。
  • 业务智能(BI)应用的测试框架:Oraylis BI.Quality (+ NUnit)。
  • 其他一些协作工具等,如TestLink、BugZilla、BugFreeWiki等。

测试人员在敏捷方法中的价值

在敏捷方法中,开发人员的主导作用更明显,系统设计、编程实现、单元测试、重构等看似关键的一些任务都落在开发人员身上,测试人员容易被边缘化。那么,在敏捷方法中,测试人员的价值又如何体现呢?

  • 在需求和功能设计讨论上,测试人员可以站在客户角度来阐述自己的观点,扮演“用户代表”角色,强调用户体验,真正体现测试人员和开发人员的互补作用。
  • 测试人员不仅扮演“用户代表”角色,而且通过需求讨论、代码复审等各种活动及时地提供质量反馈,包括代码质量、接口一致性等,保证在产品构造的整个过程中质量受到足够的关注,以提高质量改进的持续性和可视性。
  • 测试人员应积极参与单元测试,即使不参加单元测试,也应督促开发人员进行单元测试,确保单元测试达到80% 以上覆盖率,确保开发出具有良好可测试性的代码。
  • 在敏捷方法中,往往将一个大的系统开发分解成多个小的子系统(模块或组件),集成测试和端到端(End-to-End)测试显得更为重要,测试人员在这些测试上能发挥更大的作用。
  • 产品发布前,验收测试和回归测试依然不可缺少,这更是测试人员的用武之地。
  • 一个迭代周期结束后,对缺陷根本原因进行分析、总结规律,帮助开发人员建立良好的习惯,预防缺陷,从根本上提高产品质量。

理想情况下,测试人员掌握设计模式、具有很好的编程能力,可以和开发人员进行角色互换,如在当前版本开发中担任测试人员角色,在下一个版本开发中则担任开发人员角色。这样双方对不同角色的工作有着更深刻的认识,消除沟通的障碍,开发的效率和质量会有进一步的提高。

总结

根据上面的讨论和我们的实践,最后针对敏捷测试进行一个简单的总结,就是:

  • 敏捷测试就是持续测试、持续反馈,扮演“用户代表”角色,确保产品满足客户的需求。
  • 敏捷功能测试 = 新特性的手工测试(Use Case验证和探索性测试)+新功能的BVT测试(建议有) + 原有功能的自动化测试 (回归测试)。作为一个偷巧的办法,某些情况下,可以对代码进行diff 检查,比较代码改动的部分,让测试更有针对性。
  • 合理的利用自动化。自动化并不是越多越好。自动化可以保证已有功能的回归。对新增的功能,需要评估到底是自动化效率高还是手动测试效率高?我更倾向于对新增功能执行手动或者半自动化的测试,而在产品发布之后再补充完善自动化回归脚本。随着开发的进行,产品质量的提升,以及对产品了解程度的加深,对自动化测试进行持续改进,提供更大的覆盖,更好和更快速的验证。
  • 敏捷开发追求持续的集成,持续的进行单元测试和回归测试。我们计划与过程改进一起推进Check-In Test, BVT, daily regression test的自动化,让开发人员随时可以得到关于代码质量的反馈(例如,每一次的check-in是否break了build),帮助开发人员生产出具有良好可测试性的代码,进而提升测试的效率。帮助开发,就是帮助测试自己。
  • 通过自动化和测试报告,建立可见的质量度量体系,让产品和代码质量反馈持续可
  • 让测试用例更有效率避免在测试用例上面浪费太多的时间。测试用例不是越多越详细就好。太详细的测试用例会降低测试效率,增加维护成本,并且会限制测试执行人员的思维。如果你的Bug大部分是通过执行测试用例发现的,那说明有两个问题:你在测试用例上面浪费了太多的时间,或者你在测试经验上面比较欠缺。如何定义测试用例的粒度——从业务出发,测试用例只要覆盖所有的业务功能和逻辑就够了。而数据检查、边界条件的测试用例,就留给测试人员去执行探索性的测试吧,希望每个人都增强探索性测试的意识
  • 为各系统维护一套测试点的checklist,越精简越好。让负责测试的人员(尤其是新手)能在几分钟之内就知道有哪些测试点是被遗漏的、需要关注的。我们已经把部分的checklist放在在wiki上了(例如引擎测试),希望大家都能参与进来,不断补充完善。
  • 前端应用的测试:UI变更频繁,测试非常容易失效?是否可以考虑把测试重心向相对稳定的接口测试倾斜?大家可以一起来思考。
  • 开发和测试团队具有同样的质量目标和质量责任。开发人员有义务对产品的可测试性和可自动化负责。如果你有这方面的需求,一定要跟开发人员讲出来。
  • 敏捷测试人员和开发人员的区别越来越小,理想情况下,敏捷方法中,测试人员和开发人员在不同的迭代周期可以互换。
  • 敏捷测试流程依据不同的团队特点、不同产品的特点而不同,因地制宜,适合才是最好。

 

个人工作经历的一些经验,总结了以下几点:

1、测试人员尽可能早的进入产品或项目的相关工作(这里指的产品或项目,指的都是从头开始的),从产品的计划、需求调研、评审工作的开始测试人员就进行参与,这么做的目的有如下几点:

a.让测试人员尽可能多的了解需求、了解业务,积极的提出问题

b.在下一步系统架构和接口设计之后,测试人员可以进行尽早设计系统的接口测试用例

c.还可以为下一步编码工作的单元测试做一个良好的铺垫,在后期设计单元测试用例的同时,懂代码的测试人员可以直接的检查开发人员的代码逻辑和业务逻辑是否符合要求,这也就实现了用最少成本“双人编程”。

2、综合一些实际情况考虑:根据一些实际调研,一般开发与测试的比例在1:6--1:10左右,能达到1:6的已经很不容易了,暂时不去讨论这个比例问题,因为这个需要根据项目的实际情况来看,个人看来:一些大型的互联网公司是不差钱的,所以他们会尽可能的在测试方面多投入或者说投入较高的,还有一些公司是不愿意在测试方面多投入但是又想多做测试的,还有一些就是尽可能少投入的,其实这些都可以调整,调整的依据是两个方面:一是确保公司对这个项目的重视和公司是真正的做测试,如果没有领导的支持,准确的说没有大领导的支持,测试工作是很难有效推进的,二是有效的安排测试人员,就是在项目的不同阶段安排不同测试人员,在测试不是很多是时候,可以使用半个人或者更少的测试人员,实现这一点的方法就是让一个测试人员去服务多个项目即可,当然这个多个也是有数量限制的,因为一个人的精力也是有限。

3、从第前2条提出来的一个疑问:作者一直提倡让测试人员尽可能早的接触产品和项目,这样能让测试人员充分了解项目,那么如何让一个人服务于多个测试项目?首先:明确一点,不是测试人员不从项目的开始就介入,测试人员就不能了解需求、不会测试。对于一个有经验的测试人员来说,快速的熟悉项目的需求并不是一件难事,如果说项目的各种逻辑真的是很复杂,项目经理也可以根据用户故事或者进行一些更为细致的安排来让这些协调过来的测试人员开展测试工作。一人服务于多个项目,这种事情在国内应该是屡见不鲜的。

4、如何安排人员也是一个如何花钱的问题:这种体会最深的就应该是外包公司,是先花钱还是后花钱还是超支还是项目失败,想必外包公司对这方面算的是最细的了。早期发现问题早解决问题,后面的压力就会小,不能早期的发现的问题,后面的团队压力就会像滚雪球一下越来越大。早期的测试投入看成一份成本的话,用这一份成本,来提早的发现问题的降低风险,后期才开始投入测试的话,也算是用一份成本,但是如果发现问题,开发人员就追踪、修改的成本是要远远大于初期的,项目的庞大和不稳定是让开发人员准确定位问题最大的困扰,还有测试人员做测试验证、回归测试、自动化脚本的修改这一切成本。

5、在项目的中后期如何做好自动化测试工作?在项目中期的时候,问题会逐渐积累,测试的东西也会越来越多,开发和维护的东西越来越多,维护是指测试人员测试出来的bug需要修复,但是又不能因为修复bug就停止项目开发工作。随着项目的推进,测试的效率保证是一个关键问题,这个时候自动化的推进和效率却成了一个矛盾的问题。原因有三:1.自动化代码需要编写和调试 2.自动化代码测试结果需要和手动测试结果进行比对 (自动化测试结果和手动测试结果不一致会有发生)3.自动化测试代码需要维护,尤其是在需求变更和设计变更的时候,手动测试只需要肉眼对比,而自动化测试可能会将代码进行较大改动。这三个问题大大降低了测试效率,这是手动测试必须成为项目的主导。解决这一问题的办法就是在项目测试集中的阶段调整手动和自动测试人员的比例,自动化人员测试的范围需要有一个合理的规划,必须定时的提交自动化测试代码,在手动测试完成后必须尽快的补充自动化测试代码,在完成测试工作的同时也自然的与手动测试的结果进行了比较,相当于进行了1次回归测试。也就说还是全部由手动测试人员进行第一轮全面覆盖的测试。

6、在“敏捷”开发过程中,自动化工程师先对哪一部分功能进行优先的用例实现:可以从以下几个方面进行考虑:1.优先考虑数据对比类型的功能,这种功能人工操作比较费眼力和时间 2.优先考虑已经测试出问题的功能,这样可以有效的对bug的功能进行回归检查 3.用户使用比较频繁的功能 4.项目优先级比较高,比较核心的功能

7.强调一点:手动测试和自动化测试对于项目来说同等重要,不存在自动化测试人员高级于手动测试人员。如果说一定要说哪个最重要的话,只能是看项目的不同阶段,在项目前中期的时候的时候,手动测试占据了核心地位,在后期的时候,自动化的全面覆盖保证了回归测试的有效进行。

8.总结:关于敏捷开发和敏捷测试的一点心得:敏捷现在已经被推向了一个高潮,何为敏捷?太多人有不同的见解,说到最后与敏捷最分不开的一词就应该是“实践”,敏捷是实践出来的,不是效仿出来的,现在太多的公司和团队在盲目的追求敏捷,拿scrum来说,有多少公司在做的只是scrum最最表象的一些东西,安排站会,制定sprint,总结会等等,但是这些真的给你的团队带来了改善了吗?想必答案只有他们自己清楚。我心中的敏捷:敏捷---敏-结,敏就是敏捷,简单的说就是要一个高效率,结:是指项目团队的协作和内部团结,这一点非常重要。看那些成功实施敏捷的团队和诸多的最佳实践团队他们都是团结一心的,整个项目团队都有一个共同的目标和追求,而不是每天项目经理在驱使着大家在前进,每个人都积极上进学习,遇到不懂的问题去总结、去学习,去突破,再去分享,而不是说,“这个问题太难了,这个技术太难了,这个。。。我可做不了”,如果每个成员都采用这种排斥的心里,那么这个团队就永远都敏捷不起来,还有就是在需要协作的时候,两个项目组不要互相“踢皮球”,而是要勇于承担责任,最普遍的现象就是项目出现了问题,然后大家在会上开始掐架。这时候有人会问,自己出来担责任不是傻吗?其实不然,一个明智的老板当然看的懂到底是谁的责任,是否真正的需要人来承担责任。如果这都做不到,证明这个老板也就。。。再谈实践,笔者看来,很难有一个很细致的又可以公用的敏捷方法,即使现在最流行的scrum,也是一个非常抽象的概念,所以才有诸多屡实施又不见成效的团队,最好的推进敏捷的方法就是实践,只有实践才能发现问题,才能解决问题,最好找到一个适合自己的敏捷方法。

 

 

敏捷项目的软件测试

谈谈在敏捷的项目里如何实行测试的工作。

敏捷的项目对测试的影响

  • 文档少,因此难以只是依赖文档来设计测试。
  • 短迭代,需要更短的时间完成测试的工作。
  • 频繁的变化,需要测试更具有探索性和适应性。

敏捷项目的正确测试观念

  • 项目是以结果为导向的,所以测试同样是结果导向。
  • 不以发现缺陷多少为目标。
  • 以不断提高软件质量为目标。
  • 测试人员的作用是帮助开发人员不断提高软件的质量,是协助性的。
  • 测试人员不是批判性的。
  • 测试人员能够尽可能的做能够做的工作,尽可能的早工作。
  • “等待”在敏捷开发、敏捷测试范畴里已是一种错误概念。

敏捷测试的管理

  • 敏捷项目的测试没有严格的角色。人人都是测试。
  • 以测试任务为导向。测试任务即可以是开发来做,也可以是测试人员来做。
  • 相同的质量目标。开发和测试有着同一个质量目标,因此也承担着同样的责任。
  • 关注质量的提升,测试周期与开发同步。
  • 要有全局观,不只是专注于发现缺陷。
  • 为回滚做准备,本次迭代发布失败,可安全回滚至旧版本。
  • 分享测试知识。
  • 建立缺陷库,指导开发人员避免再次发生同样缺陷。

敏捷测试的执行

  • 关注和推动单元测试。
  • 持续改进自动化测试(因为软件的变化,已经对产品的深入了解)
  • 短文档(测试用例可以不写,测试计划列测试点,测试类型,质量标准即可)。
  • 对新增的或者引起变化的地方(可询问开发人员协助)采取探索性测试。
  • 对稳定的部分添加自动化测试。

我们的项目之前的测试开发比例是1比5,质量基本达到客户的要求,为什么1比5可以,因为我说过,开发人员是可以做测试的工作的。现在觉得唯一有不足的地方是对稳定的地方进行自动化的回归测试。还有,我希望在自动化的探索性测试上有所进步。

最后,我还说一点是,我看到很多项目靠加班,不会休息的团队是不健康的团队。其实,项目往往不是短期行为,通常一个产品的至少需要半年努力和投入,长

时间的超负荷运转会使得工作效率低,身体透支等严重后果。项目中后期往往强度会比前期更大,这个时候,人员倒下和效率低不是一件好事情。所以,如果你的项目还要长期发展,应该帮助团队认识到轻松的团队氛围,张弛有度的工作安排是项目成功的最好方式。

当然,不加班,不代表上班时间不好好干。我们要求就是8小时以内,每周40小时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值