`

软件开发的单元测试要有选择性

阅读更多

软件开发的单元测试是IT业界的新宗教,尤其对于软件开发人员。

 

但是软件开发的单元测试是不是一必需的呢?对于算法及通用的库类,单元测试可能是需要的。

但你为什么要测试SpringMVC Controllers呢?

 

单元测试保守估计,可能普遍要占到开发时间的20%以上,这还不算build/release所耗费的时间。有多少问题是通过单元测试来发现的呢?太少了,个人经验几乎为零。单元测试的投入与效果相差太大了,太不划算了。

 

根本原因,是单元测试几乎不能发现问题。为什么呢?TDD推荐先写单元测试,再写应用代码,但这与人类的行为习惯是格格不入的。因此单元测试一般是在开发人员将程序写好后补加的。因此绝大多数的单元测试是对程序代码的简单机械的重复。如果开发人员在写程序时漏掉了什么条件或某种情形,单元测试也不可能测到,因为单元测试一般是由这同一个开发人员写的测试。因为单元测试是新宗教,大家都强调,大家都写,他迫不得已也写单元测试,如此而已。因此绝大多数的单元测试,只是同一个开发人员的应用代码的简单重复而已,纯粹浪费时间。可以说单元测试是最标准的 “Repeat yourself”。

 

对于大多数应用,尤其是网络应用,单元测试非但发现不了任何问题,相反,单元测试占用了开发人员大量的宝贵时间。如果有问题,开发人员不但要解决应用中的问题,还要同时解决相关的单元测试。本人见过极其复杂的单元测试,甚至比它要测试的应用代码还要复杂,这简直是颠倒本末。

 

单元测试是TDD的产物,就像宗教一样,谁都不敢反对。但本文以为单元测试不是必需的,单元测试必须根据具体情况而决定其必要性。

 

真正有意义的是Integration/System Test and Regression Test。这两种测试能有效帮助开发人员发现问题,因为这两种测试最接近生产环境。Mocking is not real.

 

Unit tests test the application code. It cannot test the logics the application code fails to cover. Thus unit test is merely a repeat of what the developer thinks the application code should be. That's why unit test rarely find problems at all. Unit test is the real and biggest "Repeat yourself".

 

When you change your application, unit tests might fail and you not only change your application code, you fix the unit test as well.

 

TDD promotes writing unit test first and then your application. But in real life that rarely happens as well, since it's not only anti-pattern, it's just not what human being manner of doing things. Most, if not 100% , developers write the application code and add the unit test for it when everything looks like working. 

 

One should value integration test and automated regression test. Unit test in most cases is merely political and a waste of time.

 

 

分享到:
评论

相关推荐

    软件开发文档,如需求分析,单元测试等

    在软件开发过程中,文档起着至关重要的作用,它不仅是项目管理的基础,也是团队协作和沟通的桥梁。本压缩包文件包含了一系列与软件开发相关的文档,这些文档覆盖了从项目启动到交付的各个阶段,旨在帮助程序员高效、...

    嵌入式软件单元测试

    嵌入式软件单元测试是软件开发中用于确保代码质量的关键环节,尤其在嵌入式系统中,由于资源限制及对稳定性要求极高,单元测试显得尤为重要。在嵌入式领域,C语言因为其接近硬件、执行效率高、资源占用少的特点,...

    软件单元测试计划模板

    软件单元测试是软件开发过程中至关重要的一环,旨在验证代码的各个独立模块是否按预期工作。一个完整的单元测试计划是确保这一过程有效性和效率的关键。以下是对【标题】“软件单元测试计划模板”及其【描述】中各...

    软件测试技术 测试基本概念和单元测试

    - 对软件开发流程有深入了解。 - 掌握各种测试工具和技术。 - 具备良好的沟通能力和团队协作精神。 - 能够准确理解需求文档并设计有效的测试用例。 **软件测试人员应具备的素质:** - 细心且耐心,能够发现细微的...

    软件单元测试指导.doc

    单元测试是软件开发过程中不可或缺的一环,它主要针对软件的最小可测试单元,如函数、方法或对象,进行独立验证,确保这些单元按照预期工作。以下是对单元测试及其重要环节的详细阐述。 一、单元测试环境配置 单元...

    实用软件单元测试指导

    - **“时间紧迫”误区**:有人认为单元测试会占用大量时间,尤其是在项目进度紧张的情况下,甚至有些开发人员会选择草草了事或根本不做,仅仅是为了应付领导的检查。 - **“自信过度”误区**:另一些人过于自信于...

    敏捷开发必要技巧12:单元测试

    在IT行业中,敏捷开发是一种广泛采用的软件开发方法论,强调快速响应变化、迭代式开发和团队间的紧密协作。在敏捷开发中,单元测试扮演着至关重要的角色,它确保了代码的质量,增强了软件的可维护性和可靠性。这篇...

    软件开发测试流程整理

    - 单元测试(Unit Testing):在软件开发过程中对最小可测试部分(通常是函数或方法)进行检查和验证的过程。单元测试一般由开发者自己完成,它确保每个独立单元按设计正常工作。 - 集成测试(Integration Testing...

    软件测试系列之单元测试

    ### 软件测试系列之单元测试 #### 单元测试概述 单元测试是软件测试的一个重要组成部分,它主要关注于软件系统中的最小可测试单元(通常为一个函数或方法)的功能验证。通过编写测试用例来确保这些单元在各种输入...

    单元测试Demo文档.rar

    单元测试是软件开发过程中的重要环节,用于验证代码的各个独立模块是否按预期工作。这份“单元测试Demo文档.rar”包含了一系列与单元测试相关的资源,包括软件需求规格说明、单元测试说明、计划和报告,以及问题更改...

    Android单元测试的小例子

    在Android开发中,单元测试是确保代码质量、可维护性和减少缺陷的重要环节。这个小例子将引导我们了解如何在Android项目中设置和执行单元测试。首先,我们需要知道Android的单元测试框架主要有两个:JUnit和 ...

    单元测试报告模板

    单元测试是软件开发过程中的重要环节,用于验证代码的各个独立单元或函数是否按照预期工作。这份"单元测试报告模板"提供了系统化的方法来记录和评估单元测试的过程和结果,确保软件的质量和稳定性。 首先,报告应...

    .Net 单元测试案例

    在.NET开发过程中,单元测试是一项至关重要的任务,它有助于确保代码的质量、可维护性和稳定性。单元测试允许开发者独立地测试代码的各个部分,确保每个功能模块都能按预期工作。本案例将深入探讨如何在.NET环境中...

    单元测试培训文档.pptx

    3. **低估单元测试的价值**:一些团队认为单元测试带来的收益并不明显,反而会占用大量的开发时间,从而选择不编写单元测试。 4. **业务逻辑过于简单**:对于一些简单的业务逻辑来说,开发者可能会觉得编写单元测试...

    【软件测试】: 单元测试:桌面检查、走查方式、代码审查.doc

    软件测试中单元测试的桌面检查、走查方式和代码审查 单元测试是软件测试的重要部分之一,它关注于...单元测试有很多种方法和工具,开发人员和测试人员可以根据软件的需求和设计文档,选择适合的单元测试方法和工具。

Global site tag (gtag.js) - Google Analytics