写点什么

从 TikTok“重 QA 轻测试”来看中美软件开发之间的差异

  • 2022-02-23
  • 本文字数:3168 字

    阅读完需:约 10 分钟

从TikTok“重QA轻测试”来看中美软件开发之间的差异

在一个十万人的企业里,没有单元测试也没有代码审查,仅依赖于 QA,但这却是“有效”的方式!


中国众多的出海企业正在国外快速占领市场。比如在 2021 年 TikTok 就成为了全球访问量最大的互联网网站,超越原来的领头羊、美国 Alphabet 旗下的谷歌。


中国人创造的互联网平台,超越向来雄霸全球的美国平台,这是一个很具实质和象征意义的发展。


同时,随着中国科技企业的影响力日益提升,很多人对中国企业的工作文化充满了好奇,想了解到底是什么造就了这种成功。


最近,一位曾在一家在美中企(TikTok)工作了一年多的华裔(之前任职于 Snapchat 和 Facebook),在 YouTube 上发布了一个视频“5 crazy things about working for Tiktok(why we quit our PM and engineering jobs)”,从五个方面总结了他从中国企业里学到的经验。



YouTube 地址:https://www.youtube.com/watch?v=RNUrZFkHXlo


他的观点在 Twitter 上吸引了大批对中美或中国科技感兴趣的人,网友认为该帖子很准确地描述了中美工程文化差异,我们将这些观点翻译了出来:


第一点:很多西方企业都会写单元测试,每个人都知道这是非常基本的事情。但这里的中国工程师们不需要编写单元测试!每项代码提交都指望 QA 部门的手动测试,团队在提交之前手动测试每个 code commit 提交。

你可能认为这完全是疯了,为什么不写单元测试?利用 QA 进行测试,实际上是希望工程师们关注于功能,并快速启动,写测试就完全交给了 QA。

而且让人震惊的另一件事情是,代码合并请求也不需要批准。在一个十万人的企业里(这不是一个小型初创企业),没有单元测试也没有代码审查,仅依赖于 QA,但这却是“有效”的方式!也没有发生过重大宕机事件。


中国企业的产品团队往往人员更多,也更倾向于依靠运营团队推动业务增长;这一点与美国被动加数据驱动的增长思路不太一样。我注意到中美科技企业之间的主要差异,是中国企业对人力的依赖性更高,这个优势也是中国企业得以迅速占领新市场的核心原因。

第二点:在中国企业,很少见到一对一式的会议,因为扩展性太差了。各个团队内部很少进一步细分,所以需要跟更多同事开展交互。经常见到那种典型的、自上而下的会议,一开就是 90 多分钟,期间 60 多人同时参会。大多数情况下,都是 1 个人在前面讲、剩下的人在翻看会议资料。很少有欧美公司里常见的那种畅谈会或者讨论会。


第三点:为了防止猎头挖人,这里并不公布明确的组织结构体系。组织结构高度扁平,某些工程经理需要接手 200 多份绩效评估报告(未经划分!),有些报告提交者甚至不知道自己的顶头上司长什么样子。

第四点:从流程与执行上来说,中国企业里的屁事不多,大家都在低头忙工作,很少会去传闲话或者搞道德评判。另一方面,中国企业在流程设计上还不够成熟。文档与改进团队的同事们无论做得多好,但很难得到激励。也没人审查工程师们的代码。


第五点:从工作与生活的平衡上来说,美国团队不需要 996,但要求必须适应中国时区。这真挺难的,也是造成人员流失的主要原因,我接触过的所有 PM 都在工作一年后离职了。

中国的 STEM(科学、技术、工程与数学)专业博士是美国的四倍,但技术岗位反而比美国更少,所以这里的竞争烈度要高于美国,大家把这种状况称为“内卷”。中国的同事们很怕自己失去技术优势并被社会的发展甩在身后,所以他们才能迸发出巨大的工作能量。


从人力 QA 说开去


可以说近年来中美在科技和互联网创新领域已经并驾齐驱,中国出海企业能顺利抢占到市场,起码能说明在竞争中具有一定的优势。


然而我们也可以进一步从 Lucas 的描述中看到中美软件开发流程上的一些差异。比如美国公司在软件开发中会非常注重技术文档和使用文档的细致规范,注重代码提交和审核流程,也特别注重单元测试,不是依靠人力,而是依靠开发过程来保证最后的质量。


互联网企业的崛起改变了许多软件设计、开发和发布的模式。


以单元测试来讲,在传统开发流程中,一般来说,QA (Quality assurance) 负责对程序进行黑盒测试,调用接口时传确定的参数,再校验接口响应值符合某种预期。而单元测试是一种白盒测试,要求测试人员了解被测程序的构造,从而构造测试用例校验程序各个分支逻辑。


显然,后者更具有挑战性,不可能像黑盒测试那样能依靠堆积人力的方式快速地完成工作,所以单元测试会导致交付变慢。为了加快发布周期,我们在实践中的分工也逐渐有了改变,开发人员专注于功能创建,而业务领导者则专注于交付,开发人员的测试工作就被忽略了。


开发和 QA 测试是一个长期受关注的经典话题。不同公司有不同的办法,在这一点上,中美软件开发团队的差异较大。Google 算是其中一个典型,其测试总监 James Whittaker 于 2011 年曾表示 Google 没有一个“庞大”的测试部门,相反,部分测试工作委派给了开发人员。在“Google 是如何进行测试”的文章中,James 写道:


“测试和开发同时进行。编写一些代码,马上进行测试和构建。接着,编写更多的代码,继续测试。更好的是,在你编码的时候或者编码之前,就计划好你的测试。测试不是一个独立分开的过程,它是开发的一部分。质量不等同于测试;要想有高质量的产品,就要把开发和测试紧密捆绑在一起,直到不分彼此。质量来自开发,而不是测试。”


在 Google,测试人员主要是“确保开发人员有自动框架和相关流程”进行测试即可。解决开发人员依赖他人的问题的关键思路是,不在团队中配备数量众多的测试人员。十多年前,Google 开发和测试的配比是 10:1,其后甚至喊出了“去 QA”的口号。在文章“ QA 部门消亡日”中,Google 专家甚至认为单元测试是 QA 杀手:


单元测试是一种测试特定代码片段的方法,它可以确保该代码段可以正常运行并且契合软件拼图。有证据表明,借助单元测试,你可以检查超过 90% 的代码,而且,和 QA 的手动测试工具不同,恰当构建、可以自动测试的单元测试可以随着代码库一起演化,实时测试代码。


Google 认为,当将测试职责转移到开发人员身上时,开发人员将会写出更干净的代码,构建出缺陷更少、质量更高的软件。这一切都取决于公司如何组织,以便在不降低质量的情况下降低成本。


到了 2017 年,Google 宣布取消举办了十年的测试技术会议 GTAC,Google 的理由是“相比自动化测试技术,他们更关心工程效能的提升”。工程效能在实践中的落地通常就体现在“开发人员完成开发工作的基础上,还需要承担测试、上线和运维的全部工作”,为开发人员的“一条龙”工作提供所有必要的全链路工具链支持。


但 Google 之前提倡的这一套完全依靠开发保证质量的方法,似乎和 Lucas 提到的“依赖 QA”正好相反。


国内互联网企业近年来快速崛起,2018 年初 Mary Meeker 的年度互联网报告里面,Top 20 市值 / 估值的互联网公司中国占了一半。国内互联网企业强调在业务模式上的创新,在软件开发流程上,和传统软件相比开始有了一些变化。比如迭代速度比不出问题更重要,如果出了问题,能尽快定位,快速修补,减少影响;用户反馈比按期交付更重要,用最快的迭代速度开发,再收集用户的反馈,来确定这个产品的功能要不要或怎么改;舍弃比较可能导致延期交付的“测试”环节…


只是我们也很难说清楚,这种技术优势是一种进步,还是需要大家逐渐去改变的地方。也许能结合欧美软件行业中先进的管理方法和技巧,充分发挥中国开发人员的优势和特长,才能更好地提高整体软件开发水平。


相关链接:


https://threadreaderapp.com/thread/1493408428626100226.html


https://testing.googleblog.com/2011/01/how-google-tests-software.html


https://www.infoq.com/articles/day-qa-dept-died/


今日好文推荐


Rust拖慢开发速度?2021年Rust调查报告出炉


出道即巅峰,十年后却“泯然众人矣”,苹果拿什么拯救 Siri?


滴滴裁员涉及几乎全线业务;传微信有部门试行 1065 工作制:6 点准时下班、双休;曝英特尔将开放x86内核授权 | Q资讯


来自谷歌的开发心得:所有SQL和代码,都没必要藏着掖着


2022-02-23 16:3719406

评论 13 条评论

发布
用户头像
30% 的时间写单元测试,但只有20%的提交内容在需要重构之前就被抛弃掉,或者变成了“能跑勿动”的风干屎。
2022-05-20 14:10
回复
30% 的时间写单元测试,但只有不到 20% 的提交内容能够避免在需要重构之前就可以抛弃的命运,其中还有一部分会变成“能跑勿动”的风干屎。
2022-05-20 14:13
回复
用户头像
从工程师的角度来讲,代码质量与工程交付速度是一致的。产品快速上线不是烂代码的借口,写代码之前做概设计,解耦各个模块,写一些单元测试,做code review,这些简单的工作就能极大的减轻QA成本,极大的降低维护成本。写代码是工程师的手艺活儿,自己对自己负责吧。
2022-03-11 10:38
回复
用户头像
30% 的时间写 UT,这个成本可观了,但是智能单测是一个持续探索的方向,可以这样理解,更好的帮助 RD 发现问题,更好指的是节省时间,问题定为清晰
2022-03-02 23:19
回复
用户头像
成本是一个问题,历史是另一个问题,中国软件业从一开始大量的从业人员和业务就是从外包、信息化系统定制等发展出来的,的确 UT 可以提高代码质量,对开发人员的成长大有好处,可是对于在红海厮杀的中国企业来说却是不合算的。

1. 你跟我提代码质量,提 UT, 所以一个功能要3天,可是甲方爸爸说你不要骗我,这个功能没那么复杂啊,一天不够吗?
2. 你跟我提不要积累代码屎山,要考虑长远,可是花了大价钱上的系统,也许5年不到,就用新领导说要与时俱进,要上新系统,以前的要逐步替换。不说这些定制的,你就是看阿里腾讯,现在的 QQ 跟以前的 QQ 是一回事吗?现在的淘宝跟以前的淘宝有多大关系?

老板说了,搞 UT 那一套,搞好了,成长受益的是软件工程师,是行业,关我们这些沙滩上被拍死的前浪有啥关系……

UT这种事情,个人经验来看,靠企业从结构和制度上驱动在中国多少有点水土不服,更多的还是依靠企业里面的文化,尽量宽松鼓励工程师自己去积极的提升和交流,也许很难立竿见影,但是终究还是有价值的,不说滴水穿石,至少也是勤能补拙吧。
展开
2022-03-02 11:48
回复
用户头像
我们也没有单元测试
2022-03-01 13:47
回复
用户头像
假的 我们明确要求单测覆盖率70%
2022-02-28 14:30
回复
贵企业是?
2022-03-01 12:42
回复
用户头像
可能还是个经济问题,在(测试)人力更便宜的情况下,尽量节省昂贵的开发人员写测试代码的时间?
2022-02-28 02:59
回复
也许吧,但有个问题是: QA只能保证功能正常, 代码质量还是shit; UT不仅能保证功能正常, 代码质量还能大幅提升。
质量差的代码是活不长远的, 因为到后边没人能改得了; 这也许就是为啥经常要重写项目的根源。
2022-03-02 01:39
回复
用户头像
更像是技术的落后靠人力来补充...
2022-02-26 11:47
回复
用户头像
席卷全球
2022-02-26 09:11
回复
用户头像
开始卷外国人
2022-02-23 21:50
回复
没有更多了
发现更多内容

华秋电子受邀参加产业高峰论坛,探讨电子行业新商机

华秋电子

软件测试 |全局变量和局部变量有什么区别?

测吧(北京)科技有限公司

测试

数据采集&流批一体化处理使用指南

大河

批处理 ETL 流处理 bboss 流批一体化

软件测试/测试开发丨app自动化测试之设备交互API详解

测试人

软件测试 自动化测试 测试开发 appium

为研发效能度量找到合适的参照系

思码逸研发效能

研发效能 效能度量

3 天交付新需求?极狐GitLab APP 「极限编程 XP」实践

极狐GitLab

DevOps 敏捷开发 CI/CD 极限编程 极狐GitLab

测试同学职场成长的关键要素

老张

团队管理 个人成长

LP流动性挖矿代币分红模式dapp系统开发原理

开发微hkkf5566

裸辞底气!GitHub飙升“java面试笔记2023” 了解下八股文天花板

三十而立

Java 互联网 面试 IT java面试

让Web和App无缝链接的移动深度链接方案

MobTech袤博科技

熟悉的测试用例设计方法都有哪些?

测吧(北京)科技有限公司

测试

4.0 功能抢先看 | 读懂一个项目的研发效能 之 项目交付效率

思码逸研发效能

研发效能

分享:ODC 如何精准展现 SQL 执行的耗时?

OceanBase 数据库

数据库 oceanbase

自学黑客/网络渗透,一般人我劝你还是算了

网络安全学海

黑客 网络安全 安全 信息安全 渗透测试

注意!2023,你需要了解这些IT趋势

引迈信息

人工智能 程序员 网络安全 低代码

对话数十位学术合作代表:如何提升前沿技术在商业领域的落地应用?

阿里技术

前沿技术

EasyExcel 带格式多线程导出百万数据

三十而立

Java 互联网 IT

开源工具系列6:Grype

HummerCloud

谈谈低代码的安全问题,一文全给你解决喽

加入高科技仿生人

软件开发 低代码 信息安全 低代码开发

HarmonyOS 联合绿盟发布折叠屏软件规范,携HUAWEI Mate X3带来创新折叠体验

科技汇

9000字,通俗易懂的讲解下Java注解

Java你猿哥

Java ssm 实战 Java工程师

软件缺陷是什么?

测吧(北京)科技有限公司

测试

测试策略与测试手段

测吧(北京)科技有限公司

测试

软件测试 | 白盒的测试方法

测吧(北京)科技有限公司

测试

Apache HugeGraph1.0.0 版本正式发布!

百度安全

Springboot 撞上 NebulaGraph——NGbatis 初体验

NebulaGraph

Java ORM 图数据库

EasyExcel 带格式多线程导出百万数据(亲测牛逼)

三十而立

Java 互联网 IT 程序猿

集成化、小型化、大势所趋,模块电源优势明显

华秋电子

面试造火箭?GitHub飙升“2023(Java 岗)面试真题汇总”转载40万

三十而立

Java 互联网 IT java面试

3D模型分割新方法解放双手!不用人工标注,只需一次训练,未标注类别也能识别|港大&字节

Openlab_cosmoplat

模型 开源社区

ChatGPT王炸更新!能联网获取新知识,可与5000+个应用交互,网友:太疯狂了

Openlab_cosmoplat

工业互联网 开源社区 智能制造 ChatGPT

从TikTok“重QA轻测试”来看中美软件开发之间的差异_语言 & 开发_Tina_InfoQ精选文章