`
yangshen998
  • 浏览: 1245741 次
文章分类
社区版块
存档分类
最新评论

单元测试实践的主要问题与解决(3)

 
阅读更多

二、 单元测试实践的主要问题

单元测试有个特点:测试简单独立的代码很容易,但要在实际工作中做好单元测试却很困难。

根据我们的经验,企业在实施单元测试时,通常会面对四大问题——

  • 不愿做:程序员没有单元测试习惯。
  • 没时间:编写测试代码需要耗费大量的时间,项目的周期可能不允许。
  • 做不了:代码具有较高的耦合性,使单元测试难以进行。
  • 做不好:测试效果不能令人满意。我们通常会以覆盖率来衡量测试效果,但要实现高标准的测试覆盖很困难。

三、 解决思路和方法

如何解决上述问题呢?接下来,谈谈一些思路和方法,使用的工具是Visual Unit。Visual Unit,简称VU,是可视化的C/C++单元测试工具。

3.1 如何解决“不愿做”和“没时间”

对于“不愿做”,我们采用的对策是可视化,这个可视化,是指程序行为可视,后面我会用案例来演示;对于“没时间”,采用的对策是自动化,通过自动生成测试代码、自动打桩等功能,让测试的时间成本最小化。这两者结合起来,就是ETDD开发模式。

那么,ETDD是什么呢?

首先来介绍一下TDD,TDD就是测试驱动开发,这个大家可能听得比较多了。ETDD就是Easy TDD,即:易行版的TDD。ETDD具有以下一些特点:

  • 可视化,在开发过程中,程序行为可视。
  • 自动化,除了测试数据需要人工设定外,其他基本上都自动完成。
  • 现实化,不一定要测试所有代码,在开始阶段,可以只测试功能逻辑复杂的20%代码。

下面,我用一个案例,讲解一下ETDD的过程:

假如我要编写一个函数,它的功能是删除字符串左边的空格。

先写好函数的框架,能通过编译就行。在编写代码前,程序员必须要做的一件事情,是想清楚代码的功能。如果我们想的时候,顺手把它记录下来,就可以让代码的功能更清晰、更明确。

我们现在来记录代码的功能。这里的记录,不是文字形式的宠统说明,而是数据形式的精确定义,也就是用输入和输出的方式来记录。
首先,记录最基本的功能,也就是最基本、最常见的输入和输出。输入一个左边有空格的字符串,输出是删除左边空格后的字符串,返回值跟参数的输出是一样的。

然后,记录详细的功能。例如,左边没有空格的,全是空格的,还有空字符串。

把每种输入的正确输出也记录一下。完成了这个工作后,代码的功能就完全定义下来了。

现在,我们开始编写代码。我的编码思路是这样的:分为两步,第一步计算左边的空格数量;第二步,将非空格的字符向左移动,覆盖掉左边的空格。

以下几行代码,计算左边的空格,现在编译一下。CTRL+F7。如果编译通过,测试就会自动运行。

我们可以看到,输入是什么,执行了哪些代码,产生了什么输出。这里,黑色的是当前输入下所执行的代码,未执行的话会显示为红色。这里全是黑色,表示当前输入下执行了全部代码。如果我们想看一下计算左边空格的结果对不对,这是内部的数据,要指定位置后才会打印出来。按ESC键回到开发环境。

用这种语法可以输出内部数据,适合于程序员开发过程中使用。复杂类型也可以用同样的语法输出。

另一种输出内部数据的语法是,在左边的代码窗口,在要输出的位置点击一下,右键菜单选择“输出内部数据”,这样填一下就行了。这种方式不会修改产品代码,适合于测试员使用。

再次执行后,可以看到,左边的空格的数量是4,这是对的,那我们可以继续编写。


(待续)


分享到:
评论

相关推荐

    单元测试实践的主要问题与解决

    做到了这两点,就可以说,代码的功能  本文是我在“第十届中国系统与软件过程改进年会广东会场”所作演讲的整理稿,主要分享单元测试的一些要点、单元测试实践的主要问题,以及如何来解决这些问题。  一、单元测试...

    单元测试十大难题及解决思路

    实践中走出来的理论。概括说明了单元测试中遇到的难题,以及解决的思路。

    C-C++ 单元自动化测试解决方案实践.doc

    C-C++ 单元自动化测试解决方案实践.doc

    单元测试实践小结[1]

    单元测试实践小结[1]单元测试工具应用单元测试,首先要解决的是单元测试的关注点。测试的关注点在于测试逻辑,只要有逻辑就要写测试代码。测试的手段就是验证所有被测试方法的所有产出物,包括:1.测试方法的返回值2...

    Visual Unit (C/C++单元测试工具) V2.8

    真正解决了单元测试实践的诸多核心难题,能有效帮助程序员提高代码质量和开发效率。 试用方法:下载安装本程序后即为演示版,可以测试示例代码,初步了解VU软件基本功能和使用方法;然后在VU“帮助”菜单,单击...

    使用ConTest进行多线程单元测试

    即使彻底地对它们进行了调试,常规的单元测试实践也很可能遗漏并行bug。在本文中,并行专家ShmuelUr和YardenNir-Buchbinder解释了为什么并行bug如此难于捕获并且介绍了IBMResearch的一种新的解决方案。并行程序易于...

    软件测试技术基础--源代码及解决方案光盘

    普通高等学校计算机专业精品课程教材 源代码及解决方案...第三部分从测试阶段的角度描述了单元测试、集成测试和系统测试的内容及过程。第四部分涵盖测试人员日常工作的两大内容。第五部分讨论了自动化测试的基础理论。

    cpp_agile:利用自动化单元测试和测试驱动开发的CC ++编程实验室

    利用自动化单元测试和测试驱动的开发敏捷软件开发实践的C / C ++编程实验室。 这些实验室是使用Visual Studio 2019社区版IDE开发的。 集成到Visual Studio中的Microsoft Visual C ++(MSVC)编译器用于编译C ++程序...

    SpringCloudContract契约测试实践

    众所周知,分布式系统是由众多微服务构成,并按照功能模块划分后,由不同的开发小组进行维护.研发模型如下图所示: 开发人员完成某一个...为了解决上述的弊端,研发团队通常会引入了单元测试,并使用EasyMock,Mokito等框架

    practical-unit-testing-solutions:Tomek Kaczanowski撰写的“使用JUnit和Mockito进行实践单元测试”一书中的练习解决方案

    实用单元测试解决方案Tomek Kaczanowski撰写的“使用JUnit和Mockito进行实践单元测试”一书中的练习解决方案

    实习报告-软件测试实习报告.doc

    软件测试实习报告 软件测试...而这三个时期整体又分为七个阶段,他们分别是:问题定义、可行性研 究、需求分析、总体设计、详细设计、编码和单元测试、综合测试,由此可看出,当我 们开发一个项目时,更多的精力不是放

    慕课-程序设计入门——C语言-单元测试题.zip

    这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的...

    《数字IC设计:方法技巧与实践》唐杉,徐强,王莉薇 著

    《数字IC设计--方法、技巧与实践》唐杉,徐强,王莉薇 著 此书的完整电子版,本人从淘宝上花钱买的,在此奉献大家。 目录 前言 第1章:背景知识 集成电路工艺、分类和设计方法的演进 集 成电路工艺介绍 集成电路的...

    基于java-20_JAVA单元测试接口作业-源码.zip

    通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的...

Global site tag (gtag.js) - Google Analytics