`

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

阅读更多

软件开发的单元测试是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.

 

 

分享到:
评论

相关推荐

    《Java测试与设计-从单元测试到自动Web测试》[PDF]

    书中介绍的技术、方法和工具能够使软件开发人员、QA技术员和IT管理员高效地协同完成软件的开发和测试自动化。 通过本书,您可以了解到包装在下一代J2EE、.NET和开源项目中的新API、协议和工具的详细清单。因为这些...

    软件测试方法和技术(朱少民).rar

    1.2 软件开发过程的特性 1.3 软件测试的重要性 2 2 第2章 软件测试的基本概念和方法 2.1 软件质量就是客户的满意度 2.2 软件缺陷(Bug)是什么 2.3 软件测试的基本方法 2.4 软件测试的分类和阶段 2.5 软件测试的工作...

    软件测试方法和技术(四)

    1.2 软件开发过程的特性 1.3 软件测试的重要性 2.1 软件质量就是客户的满意度 2.2 软件缺陷(Bug)是什么 2.3 软件测试的基本方法 2.4 软件测试的分类和阶段 2.5 软件测试的工作范畴 3.1软件质量保证 3.2测试策略 3.3...

    软件测试方法和技术(二)

    1.2 软件开发过程的特性 1.3 软件测试的重要性 2.1 软件质量就是客户的满意度 2.2 软件缺陷(Bug)是什么 2.3 软件测试的基本方法 2.4 软件测试的分类和阶段 2.5 软件测试的工作范畴 3.1软件质量保证 3.2测试策略 3.3...

    软件测试方法和技术(五)

    1.2 软件开发过程的特性 1.3 软件测试的重要性 2.1 软件质量就是客户的满意度 2.2 软件缺陷(Bug)是什么 2.3 软件测试的基本方法 2.4 软件测试的分类和阶段 2.5 软件测试的工作范畴 3.1软件质量保证 3.2测试策略 3.3...

    软件测试技术ppt版

     软件质量保障涉及到整个软件开发过程,包括监视和改善过程、确保任何经过认可的标准和步骤都被遵循、并且保证问题被发现和被处理。从本质上说,软件质量保障是“预防”。      白盒测试  白盒测试又称结构测试...

    软件工程与软件测试技术.pdf

    1 2分 软件测试类型按开发阶段划分是 A 需求测试、单元测试、集成测试、验证测试 B 单元测试、集成测试、确认测试、系统测试、验 收测试 C 单元测试、集成测试、验证测试确认测试、验收 测试 D 调试、单元测试、集成...

    软件测试经典面试题 (超实用)

    (可以包括软件测试、过程改进、软件开发或者与此无关的其他方面) 35 11、为什么选择测试这行? 35 12、你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么) 35 13、通常你对于别人批评你会...

    软件测试考试复习必备带答案,3套,很全面

    一、选择题。 1、 系统测试使用( )技术, 主要测试被测应用的高级互操作性需求, 而无需考虑被测试应用...、软件开发的基本过程是 ______________9、系统测试是在__________完成之后,__________进行之前的测试。(2分)

    软件测试必看 入门级的教程

    三 浅谈软件开发中的注意事项 16 3.1 项目设计 16 3.2 设计变化和需求变化 16 3.3 代码编写 17 3.3.1 源程序文件结构 17 3.3.2 界面设计风格的一致性 17 3.3.3 编辑风格 17 3.3.4 命名规范 18 3.4 BUG...

    软件测试规范

    软件测试规范 目 录 一.概述 ................................................................................................................................................ 13 附录一 单元测试报告 ......

    软件测试入门(必看)

    三 浅谈软件开发中的注意事项 16 3.1 项目设计 16 3.2 设计变化和需求变化 16 3.3 代码编写 17 3.3.1 源程序文件结构 17 3.3.2 界面设计风格的一致性 17 3.3.3 编辑风格 17 3.3.4 命名规范 18 3.4 BUG...

    软件工程与软件测试自动化教程

    5. 2 为已有软件系统提供修改设计. 测试和质量保障支持 5. 2. 1 有效率的模块级源文件编辑和安全的代码修改 5. 2. 2 帮助代码理解. 检查和通过 5. 2. 3 为单元和系统集成测试增加有序性 5. 2. 4 基于多重度量的...

    软件测试复习总结.docx

    软件测试是软件开发过程中至关重要的环节,它有助于发现和修复潜在的缺陷,确保软件的质量和可靠性。以下是软件测试的一些重要概念和复习要点: 1. 软件测试的目的和原则: 目的:发现缺陷、提高软件质量、验证...

    [软件测试].赵瑞莲.文字版

    3.1 软件开发模型 3.2 软件测试过程 3.2.1 单元测试 3.2.2 集成测试 3.2.3 确认测试 3.2.4 系统测试 3.2.5 验收测试 3.3 黑盒测试与白盒测试 3.3.1 黑盒测试 3.3.2 白盒测试 3.3.3 黑盒测试与白盒测试的比较 3.4 ...

    《全程软件测试》第8章

    在编程阶段,测试人员参与代码评审、单元测试等等。所有这些告诉人们,测试过程可以看作质量保证的过程,测试不再是产品质量的一个检验环节。这也就是《全程软件测试》书名的由来,将软件测试扩展到软件质量保证的全...

    Java测试新技术TestNG和高级概念.part1

    展示了如何集成TestNG和已有的代码、开发框架以及软件库。 展示了如何测试关键代码的特征,如封装、共享状态、范围和线程安全。 展示了如何测试应用程序元素,包括Java EE APls、数据库、Web页面和XML文件。 展示了...

    多点控制单元MCU的性能测试

    该方法具体需求有两个,一是要实现一个符合H.323协议的软件 终端,并且其配置参数可以根据测试内容的需要进行设置;二是要探 索如何将所实现的软件终端与主流性能测试工具LoadRunner相集成 来完成对MCU的性能测试。...

    集成测试计划模板

    【此处描述集成测试选择的测试类型,一般建议有如下四种:】 功能测试 测试目标: 确保已经集成的工作版本的正确性,能够实现该集成版本应该具有的功能的正确性以及完整性。 技术: 重用为系统功能测试设计的部分...

    软件工程-作业.doc

    根据国家标准GB 8566–88《计算机软件开发规范》的规定,软件的开发和维护划分为8个阶段,其中,单元 测试是在( C 5 )阶段完成的,集成测试的计划是在( D 3 )阶段制定的,确认测试的计划是在( E 2 )阶段制定的...

Global site tag (gtag.js) - Google Analytics