近来特别关注单元测试的应用。大家可能会笑了,单元测试都N年前提出的了,您老怎么现在才来做呢。是的,单元测试几乎人人都在提,但是真正做好的没几个。
我们几个同事在讨论这个的时候,发现这里面有很多因素。相信大家也在实践过程中都遇到过。
单元测试测什么
这是最经常被提到的问题。往往有三个答案:
-
针对代码测试,往往也被称为针对类进行测试。
-
针对模块接口进行测试。这种模块往往是没有界面性质的。
-
针对业务功能进行测试。类似于模拟需求测试。
在回答这个问题之前,我们都回顾一下,《测试驱动开发》中,强调的是Story的概念。Story就是一个应用场景。用程序的语言的来翻译的话,就是将需求实例化。
但是KENT BECK显然没有将这个概念明确化。这样难怪,业务模型,是基于不同层次来说的。如果你只是设计一个类,那么这个类本身也是有需求的。那么这个类的需求和整个软件的需求是不是一致对待呢?
个人倾向于第三类的测试,一二为补充。
不过这里重点说一下业务功能的测试难点,那就是模态窗体的测试。这个难点的罪魁祸首是Windows的消息机制决定的。每一个模态窗体都有自己的消息循环(死循环)在处理消息,当从一个模态窗体切换到另一个模态窗体的时候,测试代码就不能继续下去。
针对这个问题,我的处理方式,就是“解铃还须系铃人”。通过Windows的消息循环就可以穿透这种切换的休克。当然了,处理方式还是比较复杂的。
单元测试代码不能工作了
这往往是单元测试不能继续的借口。应该说,很多人还是热衷于进行单元测试的。可是你在后期询问单元测试的作用的时候,他们就会非常遗憾地告诉你,由于需求变更太频繁,单元测试代码已经不能工作了。
如果你有相似经验,你会非常赞同这个原因。因为,毕竟单元测试侧重的是软件质量,可是我们往往直接面对的是软件进度。没有人会告诉你面对质量和进度,应该选择什么。但是你知道,你只有选择进度。
几乎所有的程序员都能明白,前期的质量,会节省后期的进度。但是好像老板不知道。至少,很多程序员都相信这点。
不管怎么说,单元测试代码真的就这么放弃了吗?其实很简单,在你的考核体系中,加上单元测试代码失败的惩罚。因为选择一个技术,只是一个决策问题。而保障一个技术,那就是管理问题了。
不过,要注意的是,永远忘记单元测试必须时刻进行运行。每一次代码签入的时候,必须运行一次。必须认识到,有了这个自动机制,才能保障你的单元测试持续工作下去。
单元测试需要设计
非常多的人都认为,一个系统如果不针对单元测试进行设计,那么其可测试性就会降低,以至于不可以继续下去。
我并不怀疑设计的必要性,但这个说法最让我不得不怀疑另一个看上去毫不相干的观点:尝试和执行单元测试,需要的是勇气和决心。
这点其实KENT BECK在XP开发方式的介绍中,就说明了这个问题。作为执行的主体,人的性格很可能影响最终执行结果。
小结
软件工程中有很多新的工具,但我们往往发现叫好不叫座,而原因往往也是使用中国的一句古话就是:具体问题具体分析。但是回过头来分析一下,其实很多具体问题都是可以有办法解决的。将这些总结贡献出来,希望我们中国的软件技术走得更快点。
分享到:
相关推荐
如何实施单元测试之关键问题解答!近来特别关注单元测试的应用。大家可能会笑了,单元测试都N年前提出的了,您老怎么现在才来做呢。是的,单元测试几乎人人都在提,但是真正做好的没几个。我们几个同事在讨论这个的...
前几天发的一篇《单元测试之关键问题解答》主要写的是我在实践过程中,针对我遇到的一些非技术问题的思考。后来我看到一篇和我博文一样标题的文章《单元 单元测试之组织保障 软件测试 这几天一直都在思考新项目中...
在iOS开发过程中,单元测试是确保代码质量与稳定性的关键环节。这个“iOS单元测试大礼包”为你提供了全面的学习资源,包括8个演示实例(demo)和3个视频教程,帮助你深入理解和掌握iOS单元测试的技术和实践。 首先...
记录单元测试中所发现的典型缺陷或常见缺陷,以便未来遇到类似问题时作为参考。每个缺陷应该包括: - **缺陷的表现**:描述缺陷的具体表现形式。 - **产生原因**:分析导致缺陷产生的根本原因。 - **解决方案**:...
### Junit单元测试内部机制深度解析 #### 一、自动化软件测试的重要性 随着软件工程的不断发展,软件的规模和复杂性急剧增加,软件测试成为确保软件质量和可靠性的关键环节。自动化测试,尤其是单元测试,因其高效...
### 单元测试计划模板知识点解析 #### 一、导言 **1.1 目的** - **定义目的:** 明确指出该计划的主要目的是为了确保软件开发过程中的单元测试能够有效地实施,并且能够达到预期的质量标准。通过制定详细的单元测试...
### 单元测试报告知识点详解 ...综上所述,单元测试报告不仅是软件开发过程中的一个重要组成部分,也是确保软件质量的关键手段之一。通过详细的测试计划和执行,结合有效的文档管理,可以显著提升软件项目的成功率。
### 单元测试报告模板解析及关键知识点 #### 一、编写目的 单元测试报告的主要目的是为了记录单元测试的结果,并对其进行整理和汇总,以便形成正式的文档。这不仅有助于后续的软件开发工作,还能为软件单元的评审...
### 单元测试工作指南深度解析 #### 一、单元测试概述 单元测试,作为软件测试的一个关键环节,旨在确保代码的基本组成部分——“单元”能够按照预期运行。它聚焦于软件开发过程中的最小可测试部分,通常是单个...
单元测试的好处在于它可以早期发现代码中的错误,避免在集成阶段出现大量问题。通过编写单元测试,开发者可以确保每个函数或模块的功能独立且正确,从而提高代码质量。此外,单元测试还有助于重构,因为有测试覆盖的...
在准备考研数学的过程中,资料的收集与学习是至关重要的。标题提到的是“考研数学资料高数下册单元测试题及答案第一套-数学...同时,解答后的反思和总结也是非常关键的一步,可以帮助考生找出知识盲点,巩固学习成果。
单元测试是软件开发中的一个关键环节,它确保了代码的各个部分在独立运行时能够按照预期工作。Cppunit 是一个针对 C++ 开发人员的开源单元测试框架,版本 1.12 提供了一系列功能强大的工具,帮助开发者构建可靠且可...
【五年制五年级数学上册第二单元测试卷及答案解析】 在小学阶段,数学学习是孩子们打好数学基础的关键时期。五年制五年级的学生已经具备了一定的数学基础,本单元测试卷主要针对青岛版教材的第二单元内容进行检验,...
通过这样的单元测试,教师可以全面评估学生对本单元英语知识的掌握程度,而学生则可以通过解答这些题目来巩固和提高他们的英语听说读写能力。对于家长和学生来说,这份精选的测试题及答案解析是复习和自我评估的宝贵...