01 食之无味,弃之可惜

在企业级应用的季度或月度发布被认为是领域最佳实践的时候,应用部署到生产环境之前维护一个完整的环境进行集成测试是非常必要的。但是,集成测试环境和集成测试本身有着如下的问题:

  • 环境本身脆弱,而且通常存在手动配置部分,环境维护成本很高;
  • 环境因素导致集成测试不稳定、不可靠、反馈慢,测试失败不易定位问题,同时还会重复测试隔离组件已经测过的功能。

集成测试成为了持续交付的瓶颈,犹如鸡肋。因此,最新一期(2017年第16期)ThoughtWorks技术雷达建议企业暂缓搭建企业级集成测试环境,而是采用增量的方式发布关键组件到生产环境。增量发布涉及到一些重要的技术包括契约测试、将发布与部署解耦、专注于平均恢复时间和生产环境下的QA 。

02 断舍离之技术可行性

下面分别介绍技术雷达建议的这四项技术,以及在没有集成测试的情况下如何保证应用的质量、如何帮助企业做到独立增量发布。

1. 消费端驱动的契约测试

消费端驱动的契约测试是微服务测试的重要组成部分,主要用来覆盖两两服务之间的契约关系,下面举个例子来说明什么是契约测试以及契约测试与API测试的区别。

家里有个插座,买电器的时候需要考虑插头跟插座是能配对的,也就是说插座和插头之间需要有契约。

这里的契约测试就是插座跟插头的配套性测试,包括

  • 三相/三头还是两相/两头的;
  • 电压是220V还是 110V;
  • 插孔的形状:英式?中式?
  • 等等

API测试:对于插座本身功能的测试,需要覆盖

  • 插座能够正常通电;
  • 电压是预期的220v;
  • 接地的插孔真的能够接地
  • 等等

也就是说API测试需要测试API本身功能的各个方面,而契约测试重点在覆盖API调用的格式、参数数量、参数类型等,不一定需要涉及API本身的功能和具体的数据。

更多关于消费端驱动的契约测试,请参看文章《Consumer-Driven Contracts: A Service Evolution Patter》。

2. 发布与部署解耦

部署,就是把组件或者基础设施部署到生产环境,不对用户可见,不会影响业务和用户的使用。发布,则是将部署的组件让用户可见,对业务会产生影响。可以通过采用Feature toggle的方式实现部署与发布的解耦,做到持续部署和可控制的发布,减少组件改变带来的风险。这样,产品经理可以根据业务需求灵活控制发布给最终用户的功能组件,帮助企业业务价值最大化。

3. 关注平均恢复时间

先看这样两种情况,思考哪种更好:

1)系统宕机次数很少,可能每年也就一到两次次,但是恢复能力很弱,一旦宕机,得花至少24个小时恢复正常;
2)系统宕机频率较高,不过每次宕机都能快速恢复,用户甚至感觉不到。

对于第一种,平均失败间隔很长,但是一旦失败对用户的影响不言而喻;第二种虽然有频繁的失败,但是平均恢复时间很短,用户体验不受影响,当然是第二种更好。

传统的Ops团队比较关注失败发生的频率,随着持续交付和监控技术的发展,快速恢复成为可能。不用担心错误、失败的发生,而是利用对这些错误和失败的监控和分析,让系统做到快速恢复,可以省掉一些复杂的集成测试,也可以减少无处不在的安全攻击的影响。

4. 生产环境下的QA

生产环境是真实用户使用的环境,通常都不能跟测试环境那样可以在上面直接测试产品的功能,不能简单的把测试环境所用的的QA技术直接后延到生产环境,而其中一项在生产环境使用的技术就是监控。采用监控技术来获取生产环境的信息,对其进行分析,然后优化开发、测试过程,同时优化企业业务。更多关于生产环境下QA的内容,请参看文章《生产环境下的QA》

对上面四种技术的解释,我们可以看到:契约测试是对持续独立部署有帮助的,监控技术则是缩短平均恢复时间和做好生产环境下的QA共同的关键技术之一。接下来主要分享项目在围绕契约测试和日志监控这两块所做的实践,一起来看系统级集成测试的断舍离该如何实现。

03 断舍离之项目实践

项目是一个开发了七八年的老项目,团队对集成测试也是进行了多次的调整,经历了“七年之痒”后依然觉得是鸡肋:

  • pipeline上执行非常不稳定,总是“随机挂”,不能真实反映问题;
  • 系统复杂,集成测试自然也不简单,每次顺利执行的时间都需要半个小时以上,何况还有很不稳定的情况,最严重的时候导致QA超过一周拿不到包部署;
  • 通过集成测试发现的应用程序的缺陷半年也难得出现一个;
  • 随着系统逐渐变得复杂,集成测试维护的成本也不断增加。

可以看出,集成测试已经严重阻碍了项目持续交付的进行,不得不对其断舍离了。

1. 测试策略调整

断舍离的第一个部分是从集成测试本身入手,调整测试策略。步骤如下:

1)不再添加新的功能层面的自动化测试,原有的集成测试部分能用底层的UT、API测试覆盖的尽量下移;
2)UT和API测试不能cover的服务间的契约关系通过增加契约测试来保证;
3)从CI上摘掉原来的集成测试,加速pipeline出包,然后添加Smoke测试到QA环境执行;
4)不管是在测试环境还是生产环境发现缺陷,则添加对应的测试。

整体策略调整思路是根据测试金字塔的结构进行调整,把测试尽量往下层移,但并没有全部去掉集成测试,只是缩减到非常关键的路径覆盖,最终测试结构调整如下图所示:

2. 日志监控、分析和优化

没有了Pipeline上的集成测试,直接上到QA或者prod环境,那么加强日志监控变得尤其重要。因此,断舍离的第二个部分是日志的监控、分析和优化。

日志数据采集

项目使用的日志分析工具是Splunk,使用该工具从下面几个方面来着手采集日志数据:

1)在Splunk上设置日志监控的Dashboard,主要用来监控API的请求失败、错误的日志,还有API执行时间等性能相关内容。如下图所示:

2)设置预警邮件提醒:对于一些存在严重性能问题的API请求,通过邮件的方式进行预警提醒,如下图:

3)主动查找错误日志:对于一些生产环境用户反馈回来的问题,通过主动查找错误日志的方式去定位。
4)前面的几个机制同样应用于QA和Staging等测试环境,以通过日志分析尽量提前发现问题。

日志数据利用

利用前面几种方式采集到的日志数据,从下面几个方面进行分析和优化:

1)发现和定位系统功能问题,分析系统用户的行为习惯,优化业务;
2)发现和定位安全、性能等非功能问题,进行修复和优化;
3)发现和分析日志记录本身的不足,规范日志记录,从而进一步增强日志给问题诊断带来的帮助,形成良性循环。规范日志记录主要涉及这些点:统一日志输出路径、统一日志记录格式、清晰定义日志级别,并且把添加必要日志作为story开发流程的一部分,QA会参与日志评审。下图是Splunk里看到的项目最新优化的日志记录格式:

项目对集成测试断舍离才刚刚开始,正在不断摸索着前进,目前能看到的最直接的影响是pipeline出包明显加快,由以前的好几天出不来一个包变成一天能出好几个包。最让人振奋人心的是本周刚刚发生的事情:前一天下班前报的bug,第二天上午就已经修复出包可以测试了。

04 写在最后

系统级集成测试虽然有各种问题,不一定会因为集成测试挂掉而发现很多问题,前面也讨论了断舍离的可行性,分析了项目断舍离的实践,但集成测试并不是用来发现问题的,而是一道对质量把关的屏障,关键路径的必要测试是不可替代的。因此,我们提倡减少集成测试的数量,合理调整各层测试的比例。

系统级集成测试的断舍离需要团队有持续、递进、稳定的交付能力,需要保证用户不会受此影响,企业业务能够正常运转。系统级集成测试的断舍离过程不是一蹴而就的,凝结在集成测试上的心血也不是那么容易放弃的,需要很多的平衡和取舍,并在整个过程中要不断的关注系统的质量和风险,及时作出相应的调整。

系统级集成测试的断舍离相关推荐

  1. 导图解书-经典(04)断舍离

    断舍离:通过收拾物品来了解自己,整理自己内心的混沌,让人生更舒适的行为技术. 何为断:断绝想要进入自己家的不需要的东西. 何为舍:舍弃家里到处泛滥的破烂. 何为离:脱离对物质的执念,处于游刃有余的自在 ...

  2. BLE蓝牙5.2-PHY6222系统级芯片(SoC)智能手表/手环

    PHY6222蓝牙5.2 PHY6222是一款支持BLE 5.2功能和IEEE 802.15.4通信协议的系统级芯片(SoC),集成了超低功耗的高性能多模射频收发机,搭载32-bit ARM?Cort ...

  3. 百度广告产品系统级测试技术演进

    背景 根据典型的测试金字塔结构,一个产品的测试可分为三个层级.第一层是单元测试,主要对程序函数进行测试.第二层是集成测试,在百度内部是大家常理解的模块测试.第三层是系统级测试,对产品整体进行的测试.这 ...

  4. 易灵思发力系统级封装SiP,探索FPGA新玩法

    易灵思发力系统级封装SiP,探索FPGA新玩法 随着半导体工艺技术的演进,传统的工艺缩进技术遇到了很大的挑战,一方面是随着芯片制程节点越来越先进,从10nm.7nm.5nm到3nm,1nm,芯片研发生 ...

  5. 这样“断舍离”,你会活得更高级

    来源:慈怀读书会 断舍离,是近年来比较流行的说法,它提醒我们舍弃那些无意识中膨胀的物欲,呼吁人们扔掉那些不必要的,不再让人怦然心动的东西,留下重要的东西,过简单的生活. 其实,膨胀的何止是物欲,该扔掉 ...

  6. windowopen怎么不打开新网页_断舍离!闲置物品怎么办?带你打开泰国二手世界新大门!...

    原标题:断舍离!闲置物品怎么办?带你打开泰国二手世界新大门! 编辑/Sunny 据说觉得运势不顺的时候改动身边的东西能引起磁场变化从而改变风水带来好运,最近城主热衷倒腾家装,换了一波家里的家具感觉心情 ...

  7. 这一年,信息技术领域上演的“断舍离”

    来源:中国科学报 摘要:刚刚踏入2018年,信息技术产业领域就被"熔断""幽灵"这两个几乎波及全行业的芯片漏洞所笼罩.孰料,该领域接下来上演的剧情--从美国断然 ...

  8. 性能调优之Java系统级性能监控及优化

    性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化Ap ...

  9. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04 + Kernel:4.4.0-31 apt-get install linux-source cd /usr/src/tools/perf make &&am ...

最新文章

  1. 38.linux集合
  2. Python 把较长的一行代码分成多行的技巧
  3. HDU - 6601 Keen On Everything But Triangle(主席树)
  4. 基于React开发一个音乐播放器
  5. python爬虫代码-Python爬虫入门(01) -- 10行代码实现一个爬虫
  6. 小米虚拟键透明方法_小米 6 用户该换机了!小米 6 Pro 曝光
  7. CentOS hgfs中没有共享文件夹
  8. 用Excel进行数据分析练习(一)
  9. UltraEdit 26 总是偶尔提示运行的是试用模式
  10. MATLAB安装 C盘空间不足问题解决
  11. keil接收别人发的工程打不开_PPT转成PDF发你以后还能转回来编辑吗?
  12. unity游戏破解 修改粒子材质
  13. linux pwm控制蜂鸣器 滴滴_第七章----pwm蜂鸣器
  14. ZT213LEEA.PDF_CSDN下载
  15. java加法的底层_常见开发语言加减乘除底层是如何做到的?
  16. 百度联盟广告代码php,Javascript 实现广告后加载 可加载百度谷歌联盟广告[原创]_javascript技巧...
  17. 《三、企业级知识管理系统:Confluence配置邮箱服务》
  18. 学计算机买电脑看什么,学长学姐很后悔,当初买电脑时就该看看这篇攻略!
  19. 极客公园创新大会十周年首日看点:前沿思考论坛
  20. idea strus html项目创建,搭建struts2 项目开发环境——(使用Intellij IDEA+Maven+struts2 )...

热门文章

  1. 等势线matlab仿真
  2. 大哥無極的币圈沉浮史:从负债1亿到身家10亿
  3. FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】
  4. 手撸一款第三方链克钱包
  5. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测
  6. AES.CBC 解密,python通用模板
  7. 机顶盒联机调试的方法
  8. 九安医疗上半年净利152亿:同比增27728% 李志毅减持
  9. Particle for alexa smart home skill (3)
  10. 《MongoDB》 数组操作