×

Loading...

@Vancouver

Topic

This topic has been archived. It cannot be replied.
  • 工作学习 / 学科技术 / 你们觉得Unit Test有用吗?我对它们一点信任感都没有,顶多只能避免一点低级错误,完全不值得费那力气去写。只有做完Integration test后心里才踏实点。 +2
    • Unit test属于开发,码工自己做的,确实应该只能纠正低级的程序错误。理念是好的,做起来有点麻烦,除非部门有强制要求,否则真没见过有人主动去做。
    • 有用。把unit里所有该走的逻辑和路径都走一遍。可以提高很多效率,少很多bug。 +3
      • 你们要求覆盖率100%?这是多大的浪费啊。
        • 这2个if else难道不用去都走至少一次,就扔给QA做黑盒?QA的劳动力成本自然得大幅提高。另外,bug越早发现并修复,成本越低。 +1
          if one
          else two
          if three
          else four
          • 问题是这些逻辑你联合测试也得做,联合测试不用做的,UT也一般犯不着做。
            • SIT测试的时候,基本上都是黑盒,里面的code是看不到的。根本不知道你有几个if then。否则就不叫黑盒了,叫白盒。
      • 赞, Unit Test是必须的,否则做Integrated Test会很费时费力,这个顺序必须走,以提高效率
        • Unit test不是自动生成的吗
      • +1
    • DCUT的每一步都是软件开发必须,没有UNIT test,后面的integration test 就会变得毫无意义 +1
      • Unit test不过是软件开发里比较新近的事物,以前的开发测试都无意义?
        • 旧东西了,junit,nunit都至少有二十年历史了。到现在也没有太火,正说明了它的问题。很多IDE会自动生成一个test project, 有些指南上教人首先要删除它,免得老报错😂
          • 软件的历史要长得多
            • 我说的可是java/.net里面的工具包啊,而且俺说的是至少啊,懒得去考古而已。再远了企业还不太用软件呢。
              • 曼哈顿工程了解一下
              • 对于软件开发来说,java/.net还不算新东西?
        • 自打有代码开发起,就有unit test.
          • 不是现在意义上的unit test
        • DCUT的每一步都需要有质量管理,design需要architect review,coding需要peer review, unit testing是保证你每个module、method都能正常工作,在这个前提下integration testing才有意义,integration testing是不可能测到method level的所有细节的
          • UT不能保证module/method都能正常工作。它有点像逻辑学里的形式逻辑,只能保证形式正确,不能保证现实逻辑正确。
            • UT应该做到module level单独都能正常工作,不管任何input, output都应该是期望值
      • 您是明白人,赞👍
    • 很多公司对unit test的理解是错的。Test应该从验收标准开始写,而不是从class上写,很多公司从class上写,结果class一变,test又要重写,这是不对的 +1
    • unit test 的精髓是保证 code 是 unit testable (testable, testable, 重要的事情说三遍) -- 一段 code 如果 testable 一般不会坏到哪里去,需求变了也容易重构。
      • 可testable和usable是两个概念,你的目标是usable而不是testable,凭空增加一个要求,你以为不需要成本?
        • 这个“凭空增加的要求” 是 --- 软件的质量保证。你要是说我们不需要,那咱就不用写。好比老板问“我只要成品软件,你们干嘛要买电脑,你以为不需要成本?”
          • 没有电脑你写不了程序,没有UT也可以写正确的程序,区别于此。
            • 不写 UT, 好的 dev 也能写出不但正确,而且解耦的程序;但很多 dev 会写出现在能 work 但非常耦合,非常 spaghetti,非常难以重构的 code,所以业界提倡 unit testable。
      • 况且现实中有多少是在老代码上重构?还不多是弃了重写?
        • 大部分产品发布后都要增加,合并一些 features,肯定会有些重构 --- 这也全都弃了重写?这会儿又不考虑“成本”了?
      • “一段 code 如果 testable 一般不会坏到哪里去”…… 你认真的?
        • 是的,我认真的 --- 如果 testable,那就很容易用 unit test 来证明它 work 或不 work,就算没有 unit tests,也容易review code看出问题 --- 相比起公司祖传千年 spaghetti 好太多。
          • testable但是永远不work的code,嘿嘿……
            • 你要是觉得很好笑,想想以下两个场景:1. “我们发现这段 code 虽然有 unit test,但不 work,可能缺了一个 test case,你来看看?” 2. "这段公司祖传千年 spaghetti 一个 method 有 2 万行 code,但 work 得很好,这周我们要加个 feature,你来做。"
              • 我只是针对“一段 code 如果 testable 一般不会坏到哪里去”而言,你愿意扩展到哪里是你的事。
                • Testable的设计本身有时会改进软件质量,有时不会,所以我做这个的时候会根据是否改善软件质量来决定是否加testable设计
            • 有一种职位叫software development in Test。SDET就是专门做这种测试的。
      • ZT: The benefits of unit testing are: Decouples your code / Write more modular classes / Functions are smaller and more focused / Your functions are more defensive / Quality of code becomes higher / You will find it easier to reuse code.
        • 哈,抬杠一下,也容易迷失在unit的海洋中……
          • 哈哈,现在都是只讲好处不提坏处的
    • 另外一点:其实,有时候 UT 是保护 dev 的 -- 很多 dev 说,需求稍稍一变,30% 的 unit tests 就废了 -- 但这其实正是 point:在 TDD 里,unit tests 通常反映 business rules,要是 30% 的 tests 废了,PO/PM 需要了解 -- 这不是他们以为的“小变更”。 +1
      • 尽量externalize business rule,让业务部门自己负责。他们要改business rule,就让他们自己去测。
        • 这个主意本身很好,不过有时候 metadata driven rule engine 很不容易设计 --- 取决于行业。
          • 设计这种系统需要经验的积累,能够预测可能出现的需求。
            • 以前碰到过这样的需求,当时还没有现成的商用 rule engine --- 最后发现不是很值当。
    • 传统上unit test是开发做,integration test是测试做,但是效果就见仁见智了。随着devop/自动化的发展,现在integration test逐渐也进入开发流程里,这种效率和实用性都更强了。
    • code 和 unit test 往往都是一个人写的,两部分的水平也一样。业务逻辑搞错了,测试逻辑也会跟着错,这个在 unit test 里面很常见。
      • Unit test是为了避免改代码以后break现有的逻辑。要验证逻辑,还需要第二人(QA)
        • 这个 integration test 一样可以做到的,而且做的更好。
          • 两个不同的level。Unit test更快,每次local build都跑一遍。integration的频率低,但覆盖面广。
            • local build 跑integration test 现在很常见了吧。docker 威武。
              • 可以跑Integration test,但花费时间要长一些。当然,也因为如此,开发人员不必太过纠缠于unit test coverage
          • 到了intergration再测就有点晚了,扔到QA去测,成本也增大,有一些细节还不一定能测得到,除非用白盒测试,或者QA去读你的code。那工资也得涨上去,和你一样高,甚至比你高才行。
      • 很多书籍的例子是一边写class一边写unit test,那些例子简单的可笑,比如什么getXXX然后setXXX。设计一改,test就没用了。unit test实际上强化了现有code的钢度。
    • 这种问题还有人问,真是太惊奇了。工人上岗要不要戴安全帽?医生做手术要不要戴手套?早就是行业标准了 +1
      • 这还真没有什么行业标准。现在公开的Test标准是IEEE的,没有提到Unit Test. 实践中各种理解都有。 +1
        • 晕倒,ISO/IEC/IEEE12207是干啥的啊
          • 你读过嘛,我可是20年前就读过。这个东西一直是IEEE的,2017成为ISO,文本没改
            • 是没怎么改,后面的methodology和framework都是根据这个出来的,DCUT中的unit testing一直就有啊
    • 还是有用的只是效率没那么高。第一,保证各模块不出很stupid的错误,第二,unit testing过程中积累了测试用例,集成测试时可以参考,以免最后漏掉了什么。
    • 一个模块要处理的scenario如果很多,是需要写unit test的。三言二语讲得清楚的,当然可以不用写。
    • 可以Unit Test,至少代码比较干净,否则你都不知道该怎么测。
    • 这个东西跟政治比较像:不能极左,也不能极右,不能没有unit test,也不能有太多的unit test +1
      • unit test=参选人自己搞的民调; integration test=三方民调
    • 没啥用,机器不会写代码,测试也要人写,真正的漏洞一般是用户发现的, +2
    • UTest的真正用途是程序员用来对BA,PM甩锅用的。。。。。