Re: [讨论] 前人的code 后人翻写的机率高吗?

楼主: thefattiger (LT)   2018-09-26 20:15:37
这位前辈你好,小弟有些不同的意见
※ 引述《accessdenied (存取违规)》之铭言:
: 单元测试有时候反而破坏程式码的易读性和维护性
: 因为要做到单元测试,就得断开所有的相依性
就算没有单元测试,"高内聚,低耦合"的原则,也应该是适用的
所谓断开相依性更准确地说应该是"相依于抽象而非具体类别"
Design Pattern有80%以上的pattern都是在做这件事
: 而对抗相依性,作法就是引入 DI。但是 DI 就会增加代码阅读和维护的复杂度。
: 举例来说,如果代码内有时间上的相依性,例如用了 DateTime 物件取得现在时间做某些
: 判断,原本可以很简单的写出易于阅读和维护的逻辑:
: If (DateTime.Now > 12:00:00) then return “PM” else return “AM”;
: 为了让单元测试可以控制验证条件,只能
: Interface IDateProvider { virtual GetNow(); }
: Class DateMock : IDateProvider { GetNow() { return 13:00 }
: IDateProvider dateProvider = container.Build(....);
: If (dateProvider.GetNow > 12:00:00) then return “PM” else return “AM”;
: 然后再搞个 config 想办法让程式吃到你写的 DateMock 类别....
: 上面是sudo code 就不用讨论语法细节
以您提的DateTime为例,若If那行出问题,没有单元测试的情况下
我们可能没法马上知道错的是DateTime,还是比较的逻辑(可能是>写成<)
小弟以为单元测试的好处就是在测某个功能时,可以用Mock确保其他东西都是正常的
这样有错误才好抓出来
多加一个IDateProvider有另一个好处是可以应付DateTime不只一种的状况
例如TaiwanDateTime和USDateTime
: 这就是单元测试的代价!程式真的会比较容易阅读吗?
"理想上"的状况是测试程式本身就能明确表达出需求
让人能够只看测试程式而不用去trace又臭又长的商业逻辑就能大概知道整只程式在干嘛
: 单元测试要花在切除相依性的条件花费的成本时间远高于撰写production code
: 而且你的 production code 能不能赚钱还不知道咧?
: 到底需不需要单元测试和 clean code ? 先搞清楚写的用途和目的,你写的东西有没有
: 真正的商业价值再说吧。
商业价值跟有没有单元测试或clean code,应该是没有相关的
总不是说一个本来会赚钱的专案因为写了单元测试就不赚钱了吧?
况且单元测试本身就是为了减少开发与维护成本所出现的东西
: 不要把 clean code 和 TDD 无限上纲了
: 工程师最容易自嗨就是这样,还会自以为“这是专业”?
: 乞丐的乞讨专业比我们强也不会产生“价值”。
就我遇到的状况都是"我们不要搞那些了,程式能动就好"
倒还没听说过因为用TDD,测试程式写太多拖累整个专案的事情...
写出易读、易维护的程式码也是软件工程师的职责之一吧!
作者: senjor (哞哞)   2018-09-26 20:17:00
其实我大概知道为什么这么多人讨厌clean code跟TDD了...因为他们不懂所以讨厌,无法理解所以误解,因为误解而厌恶
作者: Killercat (杀人猫™)   2018-09-26 20:23:00
TDD其实不是一开始就走TDD的话 碰壁是天经地义的事这本来就是一个适合从零开始的方法
作者: accessdenied (存取违规)   2018-09-26 20:29:00
不是因为写太多测试案例而拖累专案,而是维护太多测试案例而拖累专案。测试案例本身也是程式码,也可能有bug,再来就是你的商业策略转弯的时候,大量已存的测试案例要跟着全改就是包袱了但是那些因为商业逻辑变动而不适用的测试案例,要嘛一支支改,不然就是抛弃不用,未来也不会拿来再跑偏偏商业逻辑是变动最快的决策之一
作者: landlord (91)   2018-09-26 20:34:00
维护测试成本过高,要嘛测试品质很差,要嘛代码设计烂
作者: sharku (明珠求瑕)   2018-09-26 20:35:00
测试个案也是需要clean code的好吗
作者: Killercat (杀人猫™)   2018-09-26 20:36:00
这也是一种说法,所以才会有robot framework跟小黄瓜这种接近自然语言的东西 请QA/QE来写这些壁其实前人都碰过 不然机器人小黄瓜不会红起来
作者: sarafciel (Cattuz)   2018-09-26 20:40:00
如果改code要测试全翻 那可能是你的程式基础架构拆的不
作者: accessdenied (存取违规)   2018-09-26 20:40:00
感谢楼上大大指点,这两个关键字我去研究一下。我一直以为小黄瓜是女性用品,原来是工程师的良药
作者: sarafciel (Cattuz)   2018-09-26 20:41:00
够细 不过我是没有碰过商业逻辑改到要几乎全翻的情况XD
作者: alihue (wanda wanda)   2018-09-26 20:48:00
.net 也有 spec flow,不过 .net core 不知道有没有要支援
作者: Killercat (杀人猫™)   2018-09-26 20:48:00
其实我觉得这发言情有可原 因为一开始就长歪的 要能CI跟test driven是的极度痛苦的流程,有偏见也难免这一开始就要写的不要太歪 才不致于以后无法收拾
作者: accessdenied (存取违规)   2018-09-26 20:51:00
也许我没见过楼上说的方法,以前看到的景象都让我皱眉头,既然时代有进步了,那我再多了解看看
作者: landlord (91)   2018-09-26 21:04:00
时代的眼泪跟可怕的测试,看了跟维护起来真的很吓人的。@alihue,非验收测试或跟需求方双向交流,cucumber非必要
作者: clarkman (凉雨)   2018-09-26 21:22:00
以前满常翻code的,但重写自己就要有认知新的bug要自己吞下,不过重构后的code稳定很多,省了后期的debug时间
作者: rollr (衛生紙的心情)   2018-09-26 23:09:00
讲的很好耶

Links booklink

Contact Us: admin [ a t ] ucptt.com