速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

2012.5.6 微博热报:单元测试覆盖率、雅虎管理结构改革

  • 2012-05-06
  • 本文字数:3564 字

    阅读完需:约 12 分钟

@姚若舟在实际的工作中发现,刚开始写单元测试同事的代码中有不少行为都没有被单元测试覆盖,他因此在微博上提出,想了解大家的意见。@程墨 Morgan 在与雅虎前同事聊天时得知,雅虎的 CEO 在力推 Scrum 开发流程和扁平的管理结构,从而将这家老牌的企业变回创业公司的模式。针对两条微博,大家展开了深入讨论。

姚若舟微博上提到实际工作中的一件事#单元测试# 上周和同事讨论时,我发现他的代码有不少行为都没有被单元测试覆盖。他的解释是那些代码属于一些极端情况的出错处理,用单元测试去覆盖不值得(需要额外的隔离)。我问他为什么不删除这些代码,他的回答是删了代码评审过不了。我不认同,不过考虑他刚开始写单元测试,就忍了。大家怎么看?

大家针对这个问题给出了各自的意见:

吴穹 adam :不一定所有行为都必须在单测覆盖的 这个要看分层测试的规划是什么。

Robin 圈:1. 首先,要清楚,在该极端情况下,应不应该出异常。有时候出异常才是期望结果。之后,我们才能决定评审的标准。2. 是否测试是根据价值来分割的,而非事件发生的频率。比如站点初始化,极少发生,却很有测试必要。极端情况,类比分析。

Ethan 苏于登:想问下总体关键,价值在哪里?如果那段代码无价值,就跟若舟想法一样,或许可以删掉。如果代码审核流程不能合适体现价值,应该考虑修改?如果那段代码确实有价值,因为边缘状况确实有可能出现,那加单元测试覆盖其实是很有价值的。

林曙湧:黑盒测试有一种技术基于风险的测试(RBT),其思想也许可以借用到白盒测试。其基本思想是测试不可能控制全部风险,所以必须面对风险作出抉择,合理安排你的测试投入。其基本公式是 风险 = 问题发生时的破坏性×问题发生的可能性。所以不能只考虑风险的单个因子。

steedhorse :如果能用 20% 的付出获得 80% 的测试覆盖率,我觉得这是好事,而不是坏事。相对于不写单元测试,这也已经是不折不扣的“质的飞跃”了。然后,哪 20% 是可以牺牲的呢?我觉得错误处理就属于可以牺牲的。很多时候错误处理的目标仅仅是 fail fast,即让程序当场死掉,而不是带着错误继续运行,然后在其它地方莫名其妙地死掉。fail fast 更多只是一种对待错误的策略,并不强求程序有确定的行为。所以我觉得在单元测试中这属于可以牺牲的部分。

姚若舟针对实际的情况,对以上微博做出回复:

姚若舟:回复 @吴穹 adam : 就我提到的案例,代码行为我觉得比较适合在单元测试中覆盖,而且也比较高效。不知道分层测试的规划主要是指哪些方面?

姚若舟:回复 @Robin 圈: 就我的案例来说,我觉得所谓添加测试价值不高更像是一种托词和惰性吧。其实,那些代码被使用的机会不是很极端,但是加测试需要做一些隔离,甚至是一些代码抽象,所以就不愿意了。我很赞同 TDD 的观点,就是没有失败的测试,就不应该写出任何多余的代码来。

姚若舟:回复 @Ethan 苏于登: 我很认同。不过,这些改变或许要慢慢来吧。

姚若舟:回复 @林曙湧: 我在写单元测试的时候,不会考虑加或不加某个测试的风险和危害有多大的。想到有必要的测试就加了,反正单元测试都很简单直接而且运行很快。如果不加,一般都是被测试代码不需要的行为。如果单元测试充分的话,会使集成测试的数量大大减少。那时,根据风险评估来考虑如何添加测试,也许不再重要了。

姚若舟:回复 @steedhorse : 刚开始这样做,我可以理解。不过复杂的遗留代码系统中,大概没有什么错误处理的是可以 fail fast。以后,还是应该尽量用测试来覆盖这些代码吧,不过牺牲他们了。

大家对这个话题进一步讨论:

吴穹 adam :测试金字塔我认同的,单元测试应该多写,但还是要以风险为依据针对正确的单元来写出可维护的单元测试。

杭州李云:作为专业的软件开发工程师,那些边边角角一定要覆盖到,否则将大大降低单元测试的效果。这容易形成错误的推理:“单元测试因为边角不覆盖,所以测试效果不好;测试效果不好,所以单元测试效果不好;测试效果不好,所以单元测试不要那么认真。”

@不许说话: 另外,按理说,单元测试是敏捷方法必备实践。而 ACRD 推行的 scrum 是敏捷方法的一种,自然必须首先符合敏捷的实践,然后才谈得上 scrum。现在,scrum 也几年了,敏捷实践呢?如果不能先一般性的敏捷实践,再 scrum,我看着邪路就回不了头了。

程墨 Morgan 在微博上提到关于雅虎管理结构改革的话题:和雅虎前同事聊天,得知新 CEO 在力推 Scrum 开发流程和扁平的管理结构,其实就是把一堆中层管理者推到需要处理技术问题的地位。很自然,在官僚体系中已经丧失技术能力的管理者日子不好过,估计很多人只能离开。CEO 这招够狠,把雅虎变回创业公司的模式,这才是改头换面。引起大家热议。

agile123 #Scrum-FAQ# Scrum 适合哪些企业?对犯有大企业病,需要二次创业的企业 Scrum 是一剂猛药。坚持透明,取消项目经理和外部官僚干涉,让研发主导权更多向一线研发骨干(而非不能增值的官僚)倾斜,正如此例 // 新 CEO 在力推 Scrum 开发流程和扁平的管理结构,其实就是把一堆中层管理者推到需要处理技术问题的地位。

TingyiWu :我五年前面试一位从雅虎美国回国的应聘者时,就听说雅虎在搞 scrum。五年过去了,旧瓶装旧酒? 文化的变革不是靠搞掉一帮人做一场革命就能解决的。光是术的变化,只是看起来热闹。

水木玉弓:互联网时代可以辗平一切臃肿和低效,包括政府和企业的官僚组织,只是个时间问题,此事提醒所有人时刻保持自己的竞争力。

胡德民PeterHu :多数管理者干久了,脑袋里只有"控制"两个字。只有回到前线,才知道啥叫做"解决问题"。当一个企业"控制流程"的复杂度逐渐超过"解决问题"的灵活度,就差不多要走下坡了。// @王忠杰 rainy : 这是好招。学校里,也该把教授们逼回课堂讲台,把导师们逼回写程序做实验,总之得跟学生们一道摸爬滚打。

皮皮的一天:这点上思路不错,但动作有点快了 太多 reorg 导致最底层的技术人员怨声载道啊 最搞笑的是在北京被 layoff 掉的都是打拼在一线的屌丝苦逼们,其中有很多很有实力或潜质的童鞋。

晁晓娟:管理者一定要和团队一起下水,否则在岸上就失去自己价值,在创业公司干部太多是非常可怕的!

火星人陈勇:很多人在公司做久了,都希望走官僚体系的道路,不必再费心投入到产品、市场、技术这些事情上去。实际上,离开了这些,人会越来越醉心于官僚体系,最后变成对公司实际上没有用处的人。看看乔布斯在苹果的回归就知道,如果乔布斯当年也是一个官僚体制中人,苹果多么危难都不会邀请他再回来。

大卫张33 :回复 @程墨 Morgan : 看来你挺有信心的,我不反对走这一步,应对当前的困境这可能是好办法。公司就像生命,长得不能太快,太快了是癌症;也不能停下来,停下来面对的就是衰老死亡。具体如何,拭目以待!

徐毅 -Kaveri :雅虎应该是挺早就在做 scrum 的,可能以前做的范围有限吧。大公司都有政治,scrum 的问题在于它需要也会把一些人的座椅给拆了,可是在已经有很深厚政治根基的大企业里,交锋数百回合后,拆掉的到底是码农的椅子还是某些更大牌更贵重的椅子,就是见成败的关键点了。

蓝色流星 SH :不管用什么办法目的都为完成产品,做到早发现早治理,经可能缩短产品周期。不同公司环境不同,实施方式不同,scrum 框架值得借鉴,困难是难免的,主要看管理层的推行力度,执行者更需要目标明确。

agile123 :这个好!大势所趋。管理扁平化思想传入中国好像已经十多年了,国内 IT 企业去浮躁还需时日 // @拉尔夫沈: 扁平化是淘宝技术部推行了两年多的管理思路,如今大淘宝技术团队大多扁平化,尽量取消 10 人以内脱产的技术主管,扭转工程师三五年就脱产搞管理的浮躁心态,这是让公司和个人都发展更长远的双赢策略。

崔昊 Niky :技术公司,管理层要学学技术;媒体报社,管理层要写写稿子;公关公司,管理层要搞搞客户。是这个意思吧?我觉得这是挺对的事儿,怕就怕,人家觉得你这么做,是不务正业。ps:希望 yahoo 更好!

搜狗郭昂:让一个公司保持活力的方法是永远都有做不完的事情并且每个人都在做着实际有效的事情。而不关注技术和产品的中层会拖慢整个公司的效率。

互联网猎头 judy-deng :这个的确是狠招!不过作为软件技术的人才,首先得把技术做深了,达到资深架构师的能力,再慢慢转到管理,这对未来的技术管理的职业生涯会好些,走得稳些。

RayChase :雅虎的改革也进行好些年了,雅虎对互联网的影响至今仍然非常大。一个扁平化、一个技术管理者,希望这次可以靠谱。无论怎么说,雅虎在我们这代人中还是有特殊的身份,好歹我们是听着杨致远的牛逼故事长大的。

你对单元测试以及雅虎的管理结构改革有何意见,欢迎参与到讨论之中。

推荐微博 @姚若舟

推荐理由:拥有十多年的软件开发经验和多年的项目管理经验,目前任职于欧特克(Autodesk)中国研发中心担任项目经理,提供内部团队敏捷实践的指导和培训。


欢迎读者关注 @InfoQ 官方微博,推荐热门话题,可私信 @InfoQ ,同时请您说明推荐理由。

2012-05-06 09:091794
用户头像

发布了 340 篇内容, 共 130.2 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

特权账号管理之权限划分篇

尚思卓越

运维 网络安全 权限管理

多屏幕媒体播放软件:ProVideoPlayer 3 Mac 激活版下载

iMac小白

准「AI 时代」下,如何衡量程序员的工作效率和生产力?

LigaAI

人工智能 研发管理 研发度量 AIGC 研发效能管理

让家人饮水不再瞎凑合 A.O.史密斯冷热即饮净水机健康又便利

科技热闻

全方位探索:思维导图能在这些地方派上用场!

职场工具箱

思维导图 工具库

深度长文:全面探讨流程图的应用,打开你的新视野

职场工具箱

流程图绘制工具

告别繁琐,ModelArts一键解决车牌号识别难题

华为云开发者联盟

人工智能 华为云 华为云ModelArts 华为云开发者联盟

多GPU训练大型模型:资源分配与优化技巧 | 英伟达将推出面向中国的改良芯片HGX H20、L20 PCIe、L2 PCIe

GPU算力

AI创新下的生成式人工智能——Amazon Bedrock

淼.

苹果系统下载:macOS 12 Monterey v12.7.1正式版

加油,小妞!

苹果系统下载 macOS 12 Monterey

NFTScan 正式上线 Viction NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT\ NFTScan nft工具

Util应用框架开发环境搭建(八)- 安装 Seq

何镇汐

开源 后端 软件开发 .net core

YOLO 施工安全帽目标检测模型

3D建模设计

目标检测 YOLO模型 安全帽模型

蓝易云:高防IP如何防止爬虫和Web攻击?

百度搜索:蓝易云

云计算 Linux 运维 Web IP

SideNotes for Mac(即时笔记工具)

展初云

Mac 笔记软件 SideNotes

软件测试/人工智能丨知识图谱与模型驱动测试的软件测试进化

测试人

人工智能 软件测试

sublime text Mac前端代码编辑工具 支持M1

加油,小妞!

Sublime Text 4下载 Sublime Text 4注册版

TextSoap for Mac(文本格式清理工具) v9.4.1永久激活版

mac

苹果mac Windows软件 TextSoap 文本格式清理工具

2023开源产业生态大会OpenHarmony生态分论坛开幕在即

新消费日报

WorkPlus即时通讯app支持多种信创环境组合运行

WorkPlus

用Puppeteer优化项目本地开发流程:一键获取登录Token

陇锦

Vue 前端 Node puppeteer

PON网络是什么?

小魏写代码

媒体行业的3D建模:在影视中创造特效纹理

3D建模设计

AI纹理 影视视觉特效 3D特效

Codewhisperer 使用评价

亚马逊云科技 (Amazon Web Services)

Python 人工智能 云上探索实验室 Amazon CodeWhisperer Amazon Cloud9

Util应用框架开发环境搭建(九)- 安装 Exceptionless

何镇汐

开源 后端 .net core

2012.5.6微博热报:单元测试覆盖率、雅虎管理结构改革_Scrum_侯伯薇_InfoQ精选文章