当前位置: 首页 > 科技观察

没有单元测试,就没有编码——写单元测试的重要性

时间:2023-03-22 00:58:58 科技观察

作为开发人员,很多人很少写单元测试,甚至不写单元测试。总结一下,开发人员不写单元测试的原因有以下几点:他们认为写单元测试是浪费时间。人们认为测试不应该由开发人员完成。我有信心我写的代码没有问题,不需要单独测试。不知道单考的重要性。不知道单独测试的好处。那么针对以上几个观点,今天我们就来一一分析。单元测试有那么重要吗?1.单元测试真的是在浪费时间吗?在业务飞速发展的今天,很多时候项目来的时候,都是非常急迫的。好像过几天我不实现这个功能,整个公司都要倒闭了。因此,许多开发人员将大部分时间花在编写业务逻辑代码上。很多人只有在有空的时候才会写一些简单的单元测试代码。如果项目很忙,他们就不会编写单元测试。很多程序员的项目都是这样完成的:写代码---->集成测试---->修复bug---->集成测试---->预发布测试---->修复bug---->OfficialRelease---->Faultoccurs---->BugCorrection---->Release---->BugCorrection---->...可以看到,改bug的过程贯穿于整个软件生命周期。很多人都知道修复bug的方法,就是先定位问题,再解决问题。通常定位问题比较复杂,一般需要很长时间。如果有单元测试,可能会节省很多时间。通过单元测试可以减少很多bug,也可以帮助我们快速定位问题。在集成测试之前做好单元测试。通过单元测试后,我们可以认为这部分代码是可靠的,可以放心的集成项目了。当然,使用单元测试并不能保证代码不会有错误。但是,单元测试可以在软件开发过程的早期发现问题。只要单个测试用例足够好,很多低级错误是可以避免的。那么,为什么很多人仍然认为单元测试是浪费时间呢?这可能是个人分析的原因。开发人员认为我的时间应该用来写业务逻辑代码。项目有bug,我也应该抓紧时间解决这个bug。他们认为我认可我花在这件事上的时间,所以我的时间没有浪费。归根结底,他们只是没有意识到单元测试的好处。一旦他们发现通过单元测试可以让我更早发现问题和其他好处,那么他们也会同意花时间写单元测试。在这里,我们可以先得出一个结论:一个好的单元测试不仅不会浪费时间,还会为我们节省很多时间。至于为什么节省时间,什么叫单测,后面会介绍。2.单元测试是否应该由开发人员编写。这是一个有争议的话题(有人认为开发应该是全栈的,也有人认为开发应该只关注业务,写业务代码)。这里我们只分析谁来做单元测试。有人认为单元测试也是一种测试手段,应该交给专门的QA。有些人认为单元测试应该由开发人员编写。那么,单元测试应该由开发人员编写吗?单元测试必须由最熟悉代码的人编写。这是一个好的单元测试的标准之一。那么还有谁比编写代码的人更了解代码呢?代码的作者最了解代码的用途、特点和实现限制。所以,没有比作者更适合写单元测试的人了。单独测试人员进行单元测试往往工作量大、周期长、成本高,导致事倍功半。软件开发人员应始终负责对程序的单个单元进行测试,以确保每个单元都能完成设计的功能。事实上,在很多情况下,开发者也应该进行集成测试。我的观点是,开发人员在编写功能时,就是对功能负责,有义务保证功能能够准确执行。单次测试是个好方法。所以,如果要写单测,还是自己写吧。3.我很有信心。我还需要单次测试吗?有人能写出完美的代码吗?答案是不!我觉得程序员天生就是骄傲的。虽然程序员常说:明明在我机子上好,是不是你用的方式不对。但是,一个好的程序员应该说完这句话就偷偷排查问题。写代码不可能一蹴而就,必须经过各种测试,单元测试只是其中之一。所以,不管你多么骄傲的程序员,你都不是神!因此,您还需要单独测试。4.单元测试真的那么重要吗?许多程序员宁愿花时间编写业务逻辑代码。他们中的大多数人有空时会编写一些简单的单元测试代码。如果项目很忙,他们就不会写。单元测试。据我所知,只有少数公司对项目上线有一定的代码覆盖率(软件测试中描述程序中源代码测试的比例和程度的衡量标准)的要求,大多数公司都没有多注意它。这一点,所有,很多人都不太关注单元测试。但是,很多失败的经验告诉我们,很多问题是可以通过单元测试来避免的。其实单元测试的重要性很简单,就一句话:不写单元测试,怎么知道自己的代码对不对?没有足够的测试用例,你怎么知道用户将如何使用你的代码?你怎么知道你的代码应该如何执行?因此,单元测试非常重要。和写代码一样重要。没有单元测试,没有编码!5.单元测试有什么好处?前面说了那么多,其实上面所有的问题都有一个最根本的问题,就是很多程序员不写单元测试的最根本原因就是不知道写单元和写单元有什么区别测试而不是编写单元测试。我不知道编写单个测试可以带来好处。所以他们认为写单元测试是浪费时间,所以他们认为单元测试不应该由我来写,所以他们认为我不需要写单元测试。那么,单元测试能带来什么好处呢?J.TimothyKing写了一篇关于先写单元测试的好处的文章:TwelveBenefitsofWritingUnitTestsFirst(先写单元测试的十二个好处),这里就先介绍几个比较明显和比较突出的好处。1.减少bug单元测试的目的是通过足够准确的测试用例来保证代码逻辑是正确的。所以在单机测试过程中,一定要解决一些bug。因为,一旦某个测试用例失败了,那么我们就会修改被测试的代码,保证它能够通过测试。2.降低修复bug的成本。一般解决bug的思路都是先通过各种手段定位问题,然后解决问题。如果定位问题时没有单元测试,只能通过debug一点点跟踪代码。解决问题时需要尝试各种方法重现问题,然后改代码,改代码后再集成测试。由于单位规模小,复杂度低,发现错误后容易隔离定位,有利于调试工作。3.帮助重构,提高重构的成功率。我相信对于一个程序员来说,最痛苦的事情就是修改别人的代码。有时候,一个大系统会导致很多人不敢改,因为他们不知道改一个地方会不会导致其他地方出错。是的,一旦有了单元测试,开发人员就可以很容易地重构代码。重构后跑单元测试就知道代码有没有“坏掉”了。4.不写单元测试或许可以提高开发速度让开发更快,但不能保证你写的代码真的能正确执行。编写单元测试可以为以后解决bug节省很多时间。也让我们可以放心的使用自己写的代码。开发速度全面提升。5.后记据我所知,facebook是没有QA的,他们的代码都是通过单元测试来保证能够正确执行的。Google也很重视单机测试。国外等大公司都会要求单测的代码覆盖率达到很高的水平,否则绝不允许代码发布失败上线。因此,通过这样一篇文章,希望读者能够关注单元测试,并在实际项目中使用。不过也请记住,单测只能在一定程度上减少bug的发生,并不代表写完单测就没有问题。没有单一的测试,没有编码!【本文为专栏作家霍利斯原创文章,转载联系作者授权】点此阅读作者更多好文