作者TonyQ (得理饶人)
看板Soft_Job
标题Re: [讨论] 工作上写单元测试的比例
时间Thu May 2 11:32:05 2024
※ 引述《ko27tye (好滋好滋)》之铭言:
: 我想补一个情境
: 当到新公司或转到新单位时
: 发现没有在做unit test
: 此时身经百战写过上千次unit test的你
: 会选择凭一己之力
: 引入测试框架及补完所有模组的单元测试吗?
: 当然这也代表那些高耦合的模组你要想办法拆分
: 其中改坏了算你的锅,改好没人在乎
: 而且高机率你得自己维护测试code
: 还是选择打不赢就加入?
: 我很好奇
: 大家可以分享一下吗
: 我自己是选择不改啦
底下这是比较「野性」」的作法,算是实务专案的经验:
其实我觉得你到一个完全没有测试的专案,要分两个策略:
1. 补重要主线的 integration test 反正哪边常被报修就补哪边。
如果一开始补不上去就先做下一点,理论上常被报修的地方会一直出现在下一点,
累积多了就可以变成1了。
2. 假设自己是维护历史功能,提昇自己维护部分的可测试性。
举实际案例好了,假设我今天再做一个算金流手续费的专案,
发现过去算手续费假设有11个地方写了11次好了,所谓的高耦合不外乎如此。
我会先写个 util 把输入跟输出「去状态化」,然後针对这个 util 写,
然後这个 util 的单位以「去状态化」成本可控,可在手边开发时间允许的范围进行。
白话文:我横竖都得手动测试,那就把手动测试的部分,
尽可能的透过 test code 来进行。
如果不想接着维护的话也很单纯,任务结束後把 test code comment 掉或移除就行。
题外话,11个地方,我会选择先取代一个地方,
然後等其他10个地方有需求变更时,一个个整并,补强测试条件。
很多人会说,那为什麽不一次改11个,理由是你的开发时间跟成本允不允许。
更重要的是你的QA资源够不够,因为写正常的Test最累的是准备测试情境,
这真的是会花掉比写test更多的时间。
如果列不出完整场景,贸然修改既有的code只是在裸奔。
有需求的部分是被迫裸奔,但没需求的部分不用主动当暴露狂,
等待验证过再慢慢统一。
大原则就是:你横竖都是要测试的,只是手测还是写程式测,除了跟 gui 有关的东西,
多数的情况下写程式测试都还是比较省时间的。
更棒的地方是,在这种策略下,你往往可以用比同事少30% 的时间完成任务,
而且因为你的测试成本比较低,所以品质也会比较好,出问题的时候也更容易对焦。
然後我通常是会跟同事说我写了几个 test case,
他们愿意看就看,不愿意看我就放着。不会勉强他们加入。
如果你做不到可以用比不写测试更短的时间来完成任务,
那你学的测试根本性的就有问题,不写也罢。XD
3. 极端情况: 如果都没被报bug,需求也都很小?
那你操心他干嘛 XD
--
I have a dream, it's silly but beautiful.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.163.94.23 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1714620727.A.F6B.html
※ 编辑: TonyQ (1.163.94.23 台湾), 05/02/2024 11:34:23
※ 编辑: TonyQ (1.163.94.23 台湾), 05/02/2024 11:36:03
※ 编辑: TonyQ (1.163.94.23 台湾), 05/02/2024 11:36:27
1F:推 Litfal: 但这个去状态化常常是个大工程,要解耦合重构半天欸QQ 05/02 12:15
通常是只抽出关键计算,重要的不是完整的流程,而是会出错的流程。
真的不幸无法去状态,stub or mock 一样可以帮助你简化状态。
※ 编辑: TonyQ (42.79.169.118 台湾), 05/02/2024 12:26:12
2F:→ TonyQ: 我没碰过要解藕大半天才能写的测试,都是范围问题。越小的 05/02 12:27
3F:→ TonyQ: 范围成本越低。 05/02 12:27
4F:推 WrongHole: 05/02 12:34
5F:推 KeyFSN: +1 写的好 05/02 12:56
6F:推 yangs0618: 滚动式重构 有需要加功能或是修bug的地方再改成新版本 05/02 13:06
7F:→ yangs0618: 一起提测 05/02 13:06
8F:推 ck237: 同感 写测试开发还比较慢,测试应该有误 05/02 19:50
9F:→ viper9709: 推这篇正解 05/02 21:05
10F:推 k7ji91ab5m: 要准备很多才能测试真的让人很不想测试 嘿 05/02 21:06
11F:→ k7ji91ab5m: 另一方面来说花时间研究这个很能增进写好code功力 05/02 21:08