关于“开发把时间都花在编码上,还要写测试么?”的讨论 | IDCF

IDCF

image.png

前 言

“如何保证在开发进度很紧张的情况下,开发人员投入足够的时间写测试用例,而不是把时间都花在编码上呢?” 这个问题是一位同事问的。

我一开始的反应如同正文中某位小伙伴的回答一样“你怎么知道是在编码,还是在写BUG?”。但是仔细想想,这应该属于比较普遍的问题,所以拿出来发在IDCF的群以及朋友圈。一时引发了众多讨论,看来这也是大家比较关注的共性问题。

讨论很热闹,内容也都特别好,基本各类型各方面的观点也都比较全了,简单整理总结如下,我们先看小伙伴们的讨论,然后再发表自己的看法。

这不是单点的问题,有必要耐心的把各方面的论点都看一下。同样的,每个单点的回复都不会完整,也没必要针对个别论点纠缠。

本人就不做过多评论了,欢迎大家留言进一步探讨~

从开发测试分工入手

(按开发做测试的程度排序)

  • 开发进度很紧张,不把时间用在代码上,还考虑测试的工作,是不是不太好?开发把测试活儿干了,那测试干啥?写代码么?
  • 测试负责质量监查。
  • 为啥一定要开发写测试用例呢?
  • 先人工自测下,后补doc不行么?
  • 不管进度是否紧张,开发都需要调试代码,都需要花时间定位缺陷,以及修复缺陷,和验证缺陷是否真的修复了。恰当的单元测试,可以很大程度上改善以上的时间。
  • 单元测试就是开发的一部分,排除出来算进度本身就是错误的。
  • 开发先自测,写不完换测试。
  • 聪明的孩子都会把编程的一部分时间用来做单元测试。
  • 测试用例要看是什么测试用例吧,例如单元测试就是开发写的,其他则是由测试人员编写的。
  • 单元测试不是开发写谁写,让测试把开发代码看完理解了再写么?
  • “据书上说,测试前移能极大缩短修复BUG时间,要不咱试试?”
  • TDD不是标准答案吗?
  • 结对编程,一个写功能,一个写测试。
  • 测试覆盖不到,CI挂掉,提不了PR。
  • 代码评审的时候必须提供对应的测试用例,否则代码不予合并到发布分支。
  • 没有测试用例,如何及时反馈代码的正确性?代码要的是数量,还是质量?
  • 如何保证开发人员投入足够的时间写功能,而不是把时间花在写BUG上呢?
  • 这样不可能做到高质量,这种问题,提问的人自己也很清楚,不必搭理。

以上建议很多都与测试的实践相关,包括门禁等,不过执行的是否到位,放一张茹炳晟老师分享的材料供自检~

image.png

从组织和流程入手

  • 产品生命周期阶段而定,如果早期,或者产品本身生命周期就很短的,其实是不是不一定要写那么多单测。开发能保证冒烟测试全通过,我觉得就OK;可以考核开发的一次性提测通过率。冒烟之后,就是提测,测试同学测出bug,开发修!如果Bug可控,其实ok;如果Bug太多,增加冒烟比例。
  • 如何在业务和时间紧张的情况下,进行测试的安排。要分两个维度来看,第一个是看产品的性质。如果产品本身是快速迭代的例如2C端的,那么我们就做快速交付,可以通过灰度来做。换句话讲,让客户帮我们做2C端的测试,就算有问题,对整个的影响和风险是可控范围的;如果有问题,可以通过快速上线新版本进行修复的。还有一种,是类似金融、航空航天、医疗等,对人的生命安全或金融安全有重大影响的,这种就不适用了,尽可能在研发环境里把问题找出来,要把资源和时间做一个平衡。如果有风险,要在产品、测试、研发以及老板之间把这个风险暴露出来,发版的责任大家共担。
  • 时间紧是伪命题,不信你看看大家每天依旧有时间聊微信、刷微博。所以问题的核心在于:开发人员为什么非要写测试用例?对他们有什么好处?不写有什么损失?大家有这样的痛点和诉求吗?如果不能解答这个问题,那就没必要写,即使以政治任务强压,只能让大家怨气加深,各种糊弄,当形式主义去完成。
  • 鸡贼点:或者可以在DevOps平台上增加一个类似门限提交的卡点,去尝试用工具改变一下大家的行为作为尝试,看看效果再做决定。把怨气引到工具上,让工具唱红脸,人唱白脸,加以引导,去探索适合的“平衡点”。
  • 如果存在甩锅,说明动到一方的利益了,那么就要反问实施方,你知道大家的核心KPI是什么么?各方做此事的利益共同点在哪里?不然为什么大家“浪费时间”陪你玩?搞不定这个问题,最后实施者自己就会变成“众矢之的”的瓶颈点。
  • 什么工具都打不通“部门墙”,唯有“人”!这个“人”要有足够的信息量,了解各角色、各部门的核心KPI,当然获取信息的途径可以多方面,比如在酒桌、闲聊、八卦等各种方式。用“信息差”创造“影响力”,谁信息多,谁有主导权,然后找大家“利益共同点”去引导大家共识,让做这件事的每个人都能从中收获实打实的好处,如此才能跨角色或跨BU的把大家凝聚在一起。

从需求和时间入手

  • 把测试也写在需求里面。
  • 应该要解决需求方的焦虑,老板也有压力。如果工具、资源、流程不行那还好说,增加资源、改进工具和流程。作为执行方要控制老板的预期。
  • 如果不能delay的话,就减scope。
  • 凭什么啊!减需求啊!
  • 让开发进度别那么紧张。
  • 我一直觉得敏捷就是用来管理一些过于贪心的老板或甲方的好工具。
  • 双周迭代的话,开发编码时间都紧凑,没时间写用例,除非人员很充足。
  • 进度紧张,又要有足够时间写测试?本身两个就是相悖的,看写代码人的个人能力了。
  • 如果不能为开发团队争取来足够的时间,又不愿意砍功能,那就做完项目优先级最高,功能交付了再说。
  • 需求人员说:啊,都急着要产量了,还测什么~

从系统和绩效入手

  • 我司没有测试人员,在敏捷的模式下BA能及时赶出下个冲刺的需求就很nice了,开发人员需要承担测试的工作,但是没写测试用例,会先对着需求验收标准写开发思路,然后开发自己冒烟后让BA进入测试,BA会小本本记录SIT阶段有多少bug,UAT阶段有多少bug,以及上线后是否出现生产环境bug。考核的时候,以单个冲刺间开发人员的bug率进行交付质量打分。“打分是矮子里选高个儿么”?有一个红线SIT:多少个bug以内,UAT多少个bug以内。触碰红线的绩效就别想多好啦。
  • 被其他人测出千行代码的BUG数目,直接和开发的奖金成反比,有点邪恶~
  • 如果时间线往前延伸,方案多。如果只是基于当前时间点,这个好难,放弃在测试用例上投过多时间是一种选择,只关注核心、频发业务。另外,尝试把测试引入救急,转变下原有方式。这样不是最佳方案,只是应急措施。
  • 拉长时间线,把上线回滚风险和单位上线时长做个回归分析,应该可以算出来花多少精力实现测试AI化。
  • 体会过单元测试的会主动去写,但也是覆盖部分关键方法;提升覆盖率还是要靠绩效辅助。
  • 如果一个公司一直属于紧急状态。那这个公司估计也活不长久了。
  • 向领导反馈,如果说现阶段软件质量要求不太高,反而交付时间是最重要的情况下,可以暂且牺牲质量,后面再还债。
  • 如果测试用例是交付物中必须的,那会有人写,毕竟是上线必须的条件,加班也得写啊。往往就是因为可有可无,反正不写也不影响系统上线,那肯定先紧着上线要做的事情完成啊,其他等以后再做,然后上线后觉得反正都上完了,其他做不做都一样。
  • 就是纯粹为了让开发写的话,不如就故意找他们麻烦,开发完代码之后鸡蛋挑骨头全算BUG,博弈一下很快估计就写了...这个开发写,本质上类似编写完成的定义。
  • 讲个故事,没过生产跳伞包的厂家合格率永远无法到100%,后来每次跳伞都带上几个厂家生产人员,然后,结果大家都知道了,合格率马上100%。
  • 架构足够优秀,这测试代码的时间就不会花太多。业务代码也是一样,花太多时间写业务代码,说明架构优化还不够。
  • 功能精简,构思好代码逻辑再动手。

从能力和认知入手

  • 如果大家都认可写测试用例的价值,时间紧张的时候,问题就变为如何高效写测试用例,否则是不是不宜在进度紧张的时候做强要求?
  • 不是不给写测试的时间,而是不给学习测试的时间。
  • 从后续发现的缺陷看他们交给测试人员时的代码质量,怎么保证质量他们自己决定。特性团队内部小范围沟通,应该还好,比较真正的目标就在眼么前儿。另外,判断什么时候该写,该怎么写测试用例,这个能力本身的培养也很重要。有些时候觉得没用所以不愿意写,其实是因为不会写胡写才没用。

总 结

这是一个系统性问题,任何单点的优化,都无法解决全局的问题。

“如何保证在开发进度很紧张的情况下,开发人员投入足够的时间写测试用例,而不是把时间都花在编码上呢?” 的问题,提问者也未必是不提倡开发写测试用例,问题所处的背景需要进一步讨论,才有可能给出相关建议。

  • “开发进度很紧张”:为什么会紧张?哪些时候不紧张?如何可以不紧张?
  • “投入足够的时间写测试用例”:目前投入多少时间?都写哪些测试用例?你认为多少是合理的足够时间?如果有足够的时间,你觉得开发人员写哪些测试用例?为什么?
  • “把时间都花在编码上”:代码质量如何?如何衡量?出现过哪些质量问题?回溯来看可以做哪些改进?
  • 其他相关的问题:系统是什么类型?缺陷目前如何分布的?上线出现缺陷如何修复?会有哪些影响?

如此相关的问题之后,结合大伙的讨论,大概答案也就呼之欲出了。

你有什么话题特别想讨论的?留言给冬哥,2021年,我们一同精进。

image

作者:IDCF社区 冬哥
阅读 270
22 声望
5 粉丝
0 条评论
你知道吗?

22 声望
5 粉丝
宣传栏