背景

在《程序媛的人生观》这篇文章中,一些朋友提出了自己的疑问:“看起来静儿的发版上线很不规范,为什么一个大公司会允许这样的事情呢?”这是个很好的问题,值得我好好总结分享一下。

在考虑上线标准之前,先考虑这么一个问题,你处于哪个通道?

通道

前端通道、系统通道和后台通道的发版上线流程差别会很大。

前端通道:用户体验、视觉效果会占很大比重,一般来说需要依赖专业人员进行人工测试。

系统通道:产品流程的理解和把控是其中的一个关键点。自动化测试基础上还需要人工测试进一步验证。

后台通道:也是静儿所在的通道。业界有一个比较流行的理念:“开发人员应该测试自己的代码。”

我们团队中经常在说的一句话叫:“你不可能既当运动员又当裁判。”那怎么来解决这个冲突呢?

自动化测试。基础架构这边有专门的QA。他们大部分时间都在收集测试用例,开发自动化测试工具。

开发人员需要自己写单体测试,单体测试是在设计阶段,对功能进行建模阶段就写好的。所以对一个后台开发来说,完全可以在几分钟之内完成一套完整的上线前验收。

能否在几分钟之内就可以进行一套完整的上线前验收也和公司、部门或者团队的策略有关系。

策略

不知道有的朋友有没有注意到这个问题:有的公司虽然是大公司,但是门槛并不高。面试的时候着重考察面试者的理解力、沟通能力。如果背景不错,不会太卡技术这一块。当然,一般来讲这种公司给的待遇也比较一般。

这并不是说这个公司不够好,相反,正是因为公司有非常完善的流程把控,所以才摆脱了对成员个人能力的重度依赖。然而,一般来讲,流程是用来保证底线的。一个注重成员成长的团队希望的是能够激发成员的上限。

所以静儿所在的团队有这么一种策略:如果成员对自己的流程把握足够好,不出问题,上级会逐渐放宽对成员的监督。如果把控的不好,就会天天被盯流程。

这样的好处:做的好的成员的创造性可以充分得到发挥。对于上级自身,也可以抽身出来cover更大的事情。

在《程序媛的人生观》这篇文章中,静儿用了一个很不专业的词:「临时决定」。从另一个角度来看这个问题,什么事情是可以临时决定的?

定性

静儿之所以可以临时决定给序列化和反序列化接口新添加一个实现。这里面包含了两点信息:

1.这是添加实现,最最坏的情况下,实现出问题了,是可以开关切换切换回原来的实现的。

2.这不改变完成的功能,就是说这是一个重构。

在开发的时候「忍不住觉得之前的代码写的太烂了需要重构」是一个工程师的基本素养。如果回过头看觉得原来的代码写的不错,这是一个信号:同学,你该看书学习了。

所以,对于新功能,静儿团队中是需要开会一起做DEMO验收演示的。但是对于重构,开发人员完全有权利自己决定何时重构。因为功能不变,之前已有的自动化测试流程无需任何更改,完全可以覆盖重构后的场景。

背后的技术支撑

「技术强就是任性。」这句话不错的,但是技术强不是指静儿个人的技术能力。而是我司的整套基础设施。这里就不谈我们强大的DevOps这些东西。我们就说《程序媛的人生观》这篇文章中,静儿提到终于用了整个晚上,到凌晨5点完成上线,静儿最后把线上到哪里了呢?

上到了线下环境。这里线下环境是什么概念呢。静儿所在的团队负责的是容器的生命周期管理。容器有给广大用户直接访问的线上环境。还有一个环境,业务部门是我们的用户,他们用来测试、开发的容器,对我们来说是正式环境。如果线下环境出了问题,会影响我们的用户满意度。

一般来说,我们的代码想上到线上环境,至少要经常两天的线下环境观察。这个观察是什么意思呢?

发版前写好发版checklist,在一定范围内周知说我要发版了,如果有问题请及时联系我。

然后采用灰度发布,每发版一组机器就要进行整个流程的检验,如果有问题最快的解决方法是将有问题的机器禁用。每组发版之间有强制的时间间隔,在间隔内不能发版下一组。

发布完成后QA那边的自动化工具又一次起了作用,它会自动模拟用户完成所有分支的操作。然后给出报告。

各方面都OK之后,周知说发版完成符合预期。第二天一大早起来业务巡查,看看是否一切正常。

一天的午高峰和晚高峰监控数据是一定要看的。CAT、OCTO、业务大盘、监控大盘……

最重要的是及时看看是否有业务反馈问题。这都是在线下环境做的。

《程序媛的人生观》这篇文章中提到的那次发版,由于质量好。上周四发版线下,上到线上环境是这周一晚上9点后开始操作。

从「技术好就是任性」这个再延伸一下,为什么《程序媛的人生观》这篇文章中看起来编码很随意?这是因为设计架构做的好。临时决定给序列化和反序列化接口新添加一个实现。实现加在哪里了呢?每个产品至少有两个服务组成:核心服务和非核心服务。我们的MQ都是用来数据预处理用的,都是在非核心链路上。出问题了,半夜临时挂一下,就算有和静儿一样的程序员在半夜扩容测试机器。服务产生的最坏影响是数据反应有延迟?

总结

昂贵的工具不一定能制作出更好的设计。--《程序员修炼之道》

相关阅读     

《程序常用的设计技巧》

《引入服务网格》

《到底多大才算高并发?》

《美团分布式服务通信框架及服务治理系统OCTO》

《学会用数据说话-分布式锁究竟可以多少并发?》

《大话高可用》

《业务开发转基础开发,这三种「高可用」架构你会么?》


以下是几个朋友的技术公众号推荐:

云加社区

▲长按图片识别二维码关注

腾讯云官方社区公众号,汇聚技术开发者群体,分享技术干货,打造技术影响力交流社区。

编程珠玑

▲长按图片识别二维码关注

专注但不限于分享计算机编程基础,Linux,C/C++,Python,数据结构与算法,工具,资源网站等相关【纯原创】技术文章,专注【计算机内功修炼】,知其然更知其所以然。号内包含大量经典电子书和视频学习资源免费获取,回复相关关键字即可获取。另外还有不定期送书福利奥。

果汁简历

▲长按图片识别二维码关注

小编是一枚开发,先后经历创业公司、外企和BAT,面试经历丰富,深知求职过程的艰辛,所以立志做一个收集、整理和原创求职干货和职业发展相关文章的订阅号,旨在尽微薄之力帮助准备求职和正在求职的你。关注「果汁简历」,每日收新。

无敌码农

▲长按图片识别二维码关注

一线互联网公司资深码农一枚,主要专注于互联网系统设计、技术细节经验交流、工程管理、前沿技术发展等方向。在这里作者将结合自身的技术成长经历与思考,并借鉴其他优秀朋友的经验,为大家呈现精彩的技术内容,欢迎关注交流。

程序员的成长之路

▲长按图片识别二维码关注

每天分享Java干货,路虽远,行则必至。

编程一生

▲长按图片识别二维码关注

作者是一个有美国、日本工作经验,十二年坚持编程的程序媛,坚持原创文章

达到什么标准就可以上线了?相关推荐

  1. 准入标准、测试通过标准、上线标准

    曾经,在星球「软件测试圈」,问了4个问题: 1. 你所在公司,是否有研发自测环节 ? 2. 这个自测范围和内容谁提供 ?每个提测版本,研发都自测哪些内容 ? 3. 测试准入标准是什么 ?自测未通过的, ...

  2. CRMEB单商户标准版上线了!

    独立客服系统,让咨询更便捷 客服系统是一个商城最基础,也是最重要的功能,直接关系到用户是否能第一时间快速的联系到商家,从品牌层面首先就会给用户一种品牌效应,从而增强信任感.从服务层面这就比如是一个商场 ...

  3. 专访快手传输算法负责人周超博士:LAS标准的推出离不开信念感

    6月21日,快手正式对外发布基于流式的直播多码率自适应标准LAS(Live Adaptive Streaming),用于提供低延迟.平滑.流畅的直播多码率体验.LAS的端到端解决方案同时开源,包括服务 ...

  4. 敏捷开发用户故事系列之八:验收标准

    这是用户故事系列的第八篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九) 要想不在评审会上得到"惊喜",Product Owner最好提前约定好用户故事的验收标准,而且每 ...

  5. 你测试OK了吗——浅谈测试通过标准

    背景 通常究竟要不要马上上线的两种常见场景: 场景1: 当你面前还有一些问题修复后,没有验证,而你正"焦头烂额"忙于测试时 产品人员/开发人员: 什么时候可以上线 你是不是回答:还 ...

  6. SCORM标准课件制作

    SCORM标准课件的制作       关于SCORM标准,最主流的两个版本就是SCORM 1.2 和SCORM 2004(又称SCORM1.3).现在SCORM 1.2更多一点.但下面介绍的制作工具都 ...

  7. 学python多久能上线部署网站_从开发到上线,实战持续交付

    「开发者最佳实践日」是由七牛云存储发起并联合各方小伙伴为开发者举办的系列技术沙龙,关注开发者在实际应用中可能遇到的技术问题.致力于为勇于创新的开发者们提供行业内最前沿最热门的技术干货,以技术驱动应用创 ...

  8. 上线前一个小时,dubbo这个问题可把我折腾惨了

    来自:猿天地 前因 那是一个月黑风高的夜晚,不管有没有圆圆的月亮,都无法解救要加班的我.这就是苦涩的人生啊! 那天正好是春节回家的日子,定了晚上的票,然后还是上线的日子. 测试在做回归测试的时候,发现 ...

  9. cgi标准面试php,PHP面试:简述CGI、FastCGI和PHP

    CGI CGI:通用网关接口(Common Gateway Interface),是Web 服务器和请求处理程序之间传输数据的一种标准或协议,只要遵循这个标准就可以用任何动态语言实现处理程序. 通常所 ...

最新文章

  1. 谷歌扔下芯片核弹:开源全球首个可制造的PDK,免费帮有缘人实现造芯梦想
  2. oracle:集合查询
  3. 59、crontab用法简介
  4. 星载计算机西北工业大学,星载计算机SRAM加固可靠性的研究与设计
  5. mysql用户变量递归_MYSQL递归树查询的实现
  6. ES6-18:class类及其继承
  7. Gateway WebSSH
  8. 中南大学 科学计算和MATLAB 初级语言学习
  9. 3.PHP核心技术与最佳实践 --- PHP网络技术及应用(cURL,socket,SMTP,WebService,Cookie,Session,localStorage)
  10. oracle 自增字段设置
  11. adb 黑域app_黑域ADB报错解决方法
  12. Chang-Xiao Li Machine Learning 2019 Task10
  13. android 下的 WATCHDOG(2)
  14. 异常:Mapper method 'com.***.delByNumber' has an unsupported return type: class java.lang.String
  15. windows10许可证即将过期怎么办_Windows 7 时代即将终结!
  16. Android USB系统(一)
  17. ROS项目库依赖库 CMakeLists.txt中添加第三方库路径
  18. R 语言怎么保存工作目录到当前路径_第一讲 R基本介绍及安装
  19. 浏览器交响曲 (一)浏览器中的js执行机制
  20. 【MySQL】数据库介绍以及MySQL数据库

热门文章

  1. 巧用img的width和height属性进行缩图,使图片不变形
  2. wallhaven壁纸下载-selenium版本
  3. WIN8.1添加中文美式键盘并改成默认输入
  4. 老师教我们用计算机画画,年级“课文”阅读要求的层级序列与教学.ppt
  5. web安全-上传漏洞-fck编辑器利用
  6. Scratch编自创5五4将棋(1)5五4将棋规则
  7. mybatis oracle两种方式批量插入数据(带序号)
  8. 一条有意思的SQL语句分析
  9. nginx转发ArcServer地图服务器出现的http://localhost:6080/arcgis/rest/info?f=json跨域问题
  10. 三种人工智能软件工具的应用场景和特点