腾讯互联网测试实践腾讯互联网测试实践腾讯互联网测试实践腾讯互联网测试实践腾讯公司------------吴凯华2011-072011-072011-072011-07目录目录目录目录1111测试管理体系建设测试管理体系建设测试管理体系建设测试管理体系建设2222工具工具工具工具////平台建设平台建设平台建设平台建设3333持续集成建设持续集成建设持续集成建设持续集成建设4444未来拓展方向未来拓展方向未来拓展方向未来拓展方向被测产品被测产品被测产品被测产品QQQQQQQQ会员腾讯视频朋友拍拍QQQQQQQQ秀QQQQQQQQ音乐泛电商QQQQQQQQ空间开放平台腾讯互联网产品线一些测试数据腾讯互联网产品线一些测试数据腾讯互联网产品线一些测试数据腾讯互联网产品线一些测试数据�SNS社交产品过去半年测试情况(25周)约200080特性个数502免测发布502紧急测试1004扩容测试35014日常测试105042版本测试半年数据半年数据半年数据半年数据平均每周发布平均每周发布平均每周发布平均每周发布发布数据发布数据发布数据发布数据测试类型测试类型测试类型测试类型运营质量情况:�几亿活跃用户服务支持下,月投诉量不断下降�测试漏测不断降低,基本可忽略不计所有这些在不到所有这些在不到所有这些在不到所有这些在不到30303030个测试人力支撑下实现个测试人力支撑下实现个测试人力支撑下实现个测试人力支撑下实现整体研发整体研发整体研发整体研发////测试测试测试测试////运营状况运营状况运营状况运营状况�发布节奏非常快◦每周一个测试人员发布2-5次�SNS社交产品有效测试用例近2.5万个�越来越复杂的技术架构�庞大数量的外网运营服务器台数想持续保持高质量、高速度,测试团队要如何应对?想持续保持高质量、高速度,测试团队要如何应对?想持续保持高质量、高速度,测试团队要如何应对?想持续保持高质量、高速度,测试团队要如何应对?研发研发研发研发////测试管理体系建设成果测试管理体系建设成果测试管理体系建设成果测试管理体系建设成果�自动化+全方位电子流管理体系�全研发流程闭环�完善的计划、任务、用例、需求、度量统计等管理�效率提升的基础支撑体系�合作沟通保障的基础支撑体系全体系流程化、自动化全体系流程化、自动化全体系流程化、自动化全体系流程化、自动化�测试用例管理:◦用例电子化管理--》电子化自动评审--》自动汇总建议和报告反馈需求管理需求管理需求管理需求管理缺陷管理缺陷管理缺陷管理缺陷管理测试管理测试管理测试管理测试管理问题投诉管理问题投诉管理问题投诉管理问题投诉管理功能支持功能支持功能支持功能支持�测试用例管理◦增删改查、版本控制�用例电子化评审�测试计划自动化管理�周计划/任务自动化管理�完善统计度量系统支持�资源管理(号码、环境、测试接口等)�自动化测试平台融合来自对开源来自对开源来自对开源来自对开源TestLinkTestLinkTestLinkTestLink的改造!的改造!的改造!的改造!互联网测试管理系统互联网测试管理系统互联网测试管理系统互联网测试管理系统用例编写、评审流程用例编写、评审流程用例编写、评审流程用例编写、评审流程结合截屏功能支持,让用例内容可以更加灵活和丰富完善的测试度量统计完善的测试度量统计完善的测试度量统计完善的测试度量统计测试管理方向测试管理方向测试管理方向测试管理方向�关注质量效率平衡�重视ROI�开展全方位多维度自动化测试�聚焦可量化的度量体系建设目录目录目录目录1111测试管理体系建设测试管理体系建设测试管理体系建设测试管理体系建设2222工具工具工具工具////平台建设平台建设平台建设平台建设3333持续集成建设持续集成建设持续集成建设持续集成建设4444未来拓展方向未来拓展方向未来拓展方向未来拓展方向UITestToolUITestToolUITestToolUITestTool�JavaScript为脚本语言�可hook住当前IE进程,可随意加载个性化JS代码到当前IEsession�一个完整的测试框架型工具◦用例管理、数据管理、API管理、自动化脚本录制、X-Path模式的对象库管理UITestToolUITestToolUITestToolUITestTool简单展示简单展示简单展示简单展示项目、测试套、测试用例JS语法的主体脚本APIAPIAPIAPI库库库库录制录制录制录制测试报告测试报告测试报告测试报告与与与与QTPQTPQTPQTP等工具对比等工具对比等工具对比等工具对比�JavaScriptVSVBScript�产品JS函数可直接调用、测试执行更加稳定和可控�使用者需要对JavaScript非常熟悉或精通◦对产品测试质量把关是极大帮助�任意扩展◦JSCoverage支持、Diff支持(后面介绍)◦网络抓包、参数组合测试、安全测试可并行测试开展◦结合JS/CSS等兼容性特征,自动分析识别浏览器兼容性问题�黑盒级浏览器兼容性测试请停止!!其他工具其他工具其他工具其他工具////平台平台平台平台�静态开源测试工具二次改造和封装�自动化测试平台�测试桩框架�前台性能优化测试�SDL建设�C/S测试自动化◦Hook技术的利用◦Detours技术的利用�。。。。。。目录目录目录目录1111测试管理体系建设测试管理体系建设测试管理体系建设测试管理体系建设2222工具工具工具工具////平台建设平台建设平台建设平台建设3333持续集成建设持续集成建设持续集成建设持续集成建设4444未来拓展方向未来拓展方向未来拓展方向未来拓展方向敏捷研发三驾马车敏捷研发三驾马车敏捷研发三驾马车敏捷研发三驾马车�单元测试单元测试单元测试单元测试+codereview++codereview++codereview++codereview+持续集成持续集成持续集成持续集成�单元测试:看起来很美,但推动异常艰难�Codereview开展一直没有体现真正价值�持续集成可以控制在测试团队手中◦可控、可量化、可行性高为何要开发自己的为何要开发自己的为何要开发自己的为何要开发自己的CICICICI平台平台平台平台�Hudson、CruiseControl都是很不错的CI工具框架◦有些偏Java技术和工程�当前持续集成需求里有太多个性化需求�问题展示、统计度量、个性化工具接入越来越复杂当前持续集成的成果当前持续集成的成果当前持续集成的成果当前持续集成的成果�两个方向建设中:◦各类工具接入中,变成CI体系里内嵌的即用型插件�代码静动态测试工具�Dailybuild、自动化安装�Regressionautomation�SVN规范性检测工具�。。。。。。◦团队/项目纬度的持续执行和统计度量,以及问题发现和改进推动简单演示简单演示简单演示简单演示目录目录目录目录1111测试管理体系建设测试管理体系建设测试管理体系建设测试管理体系建设2222工具工具工具工具////平台建设平台建设平台建设平台建设3333持续集成建设持续集成建设持续集成建设持续集成建设4444未来拓展方向未来拓展方向未来拓展方向未来拓展方向测试团队未来工作分层测试方向测试团队未来工作分层测试方向测试团队未来工作分层测试方向测试团队未来工作分层测试方向�测试分析和评估也是一种测试�让所有重复性和已存在功能纳入自动化里30%30%30%30%:测试分析设计和评估20%20%20%20%:测试执行和验证50%50%50%50%:各类测试自动化、工具建设和持续集成未来工作重点未来工作重点未来工作重点未来工作重点�Diff+coverage精确评估分析◦自动化工具开发支持�性能、安全、架构、兼容性、健壮性、容灾/容错、异常等等评估分析测试�产品测试接口分析、工具和自动化需求提炼�自动化测试、工具开发和持续集成测试执行和手工验证外包测试执行和手工验证外包测试执行和手工验证外包测试执行和手工验证外包�把所有手工的执行和功能确认验证外包合作开展�把黑盒级的测试行为转变为自动化代码覆盖度的精确测试代码覆盖率工具的不足代码覆盖率工具的不足代码覆盖率工具的不足代码覆盖率工具的不足�大部分必须要修改源代码,并且要人工介入�必须要自动化测试用例覆盖度足够高,否则价值意义不大�代码的注入对被测对象带来潜在性能和稳定性的影响和潜在测试质量隐患更好利用更好利用更好利用更好利用gcov/lcovgcov/lcovgcov/lcovgcov/lcov测试测试测试测试C/C++C/C++C/C++C/C++代码代码代码代码�把两个版本代码的变更结合代码覆盖度开展精确测试设计!30%30%30%30%已覆盖70%70%70%70%未覆盖老版本老版本老版本老版本28%28%28%28%已覆盖72%72%72%72%未覆盖30%30%30%30%已覆盖70%70%70%70%未覆盖新加代码新版本新版本新版本新版本精细化提取和梳理函数调用关系精细化提取和梳理函数调用关系精细化提取和梳理函数调用关系精细化提取和梳理函数调用关系�借助GCC里instrument-functions编译选项,借助反汇编分析函数调用关系机制◦结合工具addr2line、pvtrace、dot工具动态梳理函数调用关系�精确监控和分析变更代码的影响范畴并开展测试JavascriptJavascriptJavascriptJavascript代码覆盖度测试代码覆盖度测试代码覆盖度测试代码覆盖度测试�JSCoverage工具使用:◦JS代码做代码插入方式◦JSCoverage做WebServer◦Proxy代理方式(自动修改源代码,无需人工介入)�JSCoverage存在问题:�代理性能差•jscoverage自带的代理只是个简单的server,性能不高。有并发请求时性能尤其低下。�统计结果存储方式不当•每个页面的统计数据,是存在当前页面的top中的,在测试过程中关闭页面的话,会导致部分统计数据丢失。严重时甚至会导致页面卡死。�统计性能低下•统计逻辑,纯用js实现,数据量大时性能低。效果演示效果演示效果演示效果演示最好测试方法是在里面而不是外表最好测试方法是在里面而不是外表最好测试方法是在里面而不是外表最好测试方法是在里面而不是外表东进!东进!东进!东进!东进!东进!东进!东进!深入代码层测试!深入代码层测试!深入代码层测试!深入代码层测试!箴语箴语::::::::技术决定未来、没有技术没有未来技术决定未来、没有技术没有未来