什么是单元测试,单元测试快速入门教程一

  1. 单元测试概述
  2. 单元测试环境及过程
  3. 单元测试任务及步骤
  4. 单元测试策略
  5. 单元测试用例设计
  6. 单元测试案例
  7. 单元测试经验总结

单元测试概述

单元测试是在软件开发过程中要进行的最低级别的测试活动或者说是针对软件设计的最小单位—程序模块(程序中定义的函数、子程序、类或方法),进行正确性检验的测试工作,目的在于发现每个程序模块内部可能存在的差错或缺陷。

在单元测试活动中,软件的独立单元将在与程序的其它部分相隔离的情况下进行测试,主要工作分人工静态检查(静态测试)和动态执行跟踪(动态测试)。前者保证代码算法的逻辑正确性、清晰性、规范性、一致性和高效性并尽可能发现程序中存在的错误。后者就是通过设计测试用例,执行待测程序来跟踪比较实际结果与预期结果以此来发现错误。

单元测试采用静态测试技术、动态测试技术的白盒测试和黑盒测试相结合的方法进行,静态测试能够发现30%-70%的逻辑设计和编码错误。其他的隐含错误或缺陷不易察觉,应通过动态测试捕捉。

单元测试是集成测试及其他测试开展的基础,有些部门程序员把单元测试看成编码的一部分,自己完成。正常情况下,建议专门的测试人员负责测试过程,验证各个测试用例的运行结果并按要求修改缺陷和记录。单元测试具有回归性。

单元测试的目标:是验证开发人员编写的编码是否产生预期结果、是否符合设计要求。

符合需求的代码通常具备以下性质:正确性、清晰性、规范性、一致性、高效性和复用性等(根据优先级别排序)。

1.正确性是指代码逻辑必须正确,能够实现预期功能;

2.清晰性是指代码必须简明、易懂,注释准确没有歧义;

3.规范性是指代码必须符合企业或部门所定义的共同规范,包括命名规则,代码风格等等;

4.一致性是指代码必须在命名上(如:相同功能的变量尽量采用相同的标示符)、风格上都保持统一;

5.高效性是指代码不但要满足以上性质而且需要尽可能降低代码的执行时间。

6.复用性是指代码尽量可复用、标准化,便于重用。

如果在单元测试阶段就应该发现的BUG遗留到软件开发的后期阶段,此时修改它将会浪费大量的项目资源,因为与缺陷所在单元相关联的模块测试以及包括该单元在内的集成测试都要进行回归测试。好的单元测试在于能否尽早发现更多的BUG,降低软件开发的成本。

在软件开发中最可怕的是需求被频繁的修改和变动,这些变化最终都反映在代码。代码本身出现的BUG并不多,更多BUG的产生是由于变化后的代码破坏了源代码功能造成的,所以只要发生变化必须进行完整的回归测试。高质量的单元测试会简化系统的集成过程,因为所有被集成的单元都可信赖。

单元测试误区

能否把单元测试工作做好的关键在于是否能明确测试目标,对测试过程进行很好的监控和管理,适当使用某些自动化工具来支持测试过程。科学合理的安排和进行这些活动,可以使我们在最低开发成本下得到可靠的软件。为了认识到单元测试的重要性,下面列举一些单元测试的误区。

1.单元测试是一种浪费时间的工作

编码工作完成后,开发人员常常希望能够尽快进行软件的集成工作,看到实际的系统开始运行工作而把单元测试看作是通往这个阶段的障碍,推迟对整个系统进行联调的时间。

事实上,没有经过单元测试而集成的系统能够正常工作的可能性很小而且存在各类的Bug,软件甚至无法运行。接下来不得不将大量时间花费在跟踪那些隐藏在各个单元里的Bug上面,这样会延长软件开发周期,而且当系统投入使用时也无法确保它能够可靠运行。

在实际工作中进行计划完整的单元测试和编写实际的代码所花费的精力大致相同。单元测试工作一旦完成了,很多Bug将被纠正,在手头拥有稳定可靠的单元模块的情况下,开发人员能够进行更高效的集成工作,单元测试不浪费时间。

2.我是个很棒的程序员, 我是不是可以不进行单元测试?

在每个开发团队中都有非常擅长编程的开发人员,他们开发的软件总可以最先正常运行。因此有人认为他们开发的代码可以不用进行单元测试。我们不能期望那些没有经过充分测试和Bug修改过程的软件系统可以正常工作。

虽然编码工作不是一个可以一次性通过的过程,但是开发人员可以通过开发一些可重复的单元测试来节省测试时间。

3.集成测试能捕捉到所有的Bug

如果没做单元测试就进行软件集成工作,而软件规模越大集成就越复杂,即使软件可以运行,开发人员则要面对:如何在考虑软件全局复杂性的前提下对每个单元进行全面测试。甚至在建立一种单元调用的测试条件时,要全面考虑单元被调用时的各种入口参数。因此,在软件集成阶段对单元功能全面测试的复杂程度远远超过独立单元测试过程。最后将无法进行全面测试,遗漏甚至忽略了很多缺陷。

下面这个图表摘自<<实用软件度量>>(Capers Jones,McGraw-Hill 1991),它列出了准备测试,执行测试和修改缺陷所花费的时间(以一个功能点为基准),这些数据显示单元测试的成本效率大约是集成测试的两倍、系统测试的三倍(参见下面条形图)。

什么是单元测试,单元测试快速入门教程一

单元测试与系统测试的区别

单元测试与系统测试的区别不仅仅在于测试的对象和测试层次的不同,最重要区别是测试性质不同。在单元测试过程中,单元测试的执行早于系统测试,测试的是软件单元的具体实现、内部逻辑结构以及数据流向等。系统测试属于后期测试,主要根据需求规格说明书进行,是从用户角度进行的功能测试和性能测试等等,证明系统是否满足用户的需求。

单元测试中发现的错误容易进行定位,并且多个单元测试可以并行进行;而系统测试发现的错误比较难定位。

单元测试与集成测试的区别

单元测试对象是实现具体功能的单元,一般对应详细设计中所描述的设计单元。往往在详细设计阶段把这些模块分配给不同的开发小组。集成测试是针对概要设计所包含的模块以及模块组合进行的测试。

单元测试所使用的主要测试方法是基于代码的白盒测试。集成测试所使用的主要测试方法是基于功能的黑盒测试。

集成测试需在集成模块通过单元测试后进行,在测试时间上集成测试晚于单元测试,故单元测试好坏直接影响集成测试。

下一篇:什么是单元测试,单元测试快速入门教程二 单元测试环境 ,单元测试过程,单元测试任务

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/1660.html

(0)
江山如画的头像江山如画管理团队
上一篇 2018年4月12日 下午9:39
下一篇 2018年4月16日 上午10:43

99%的人还看了以下文章

  • python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分

    校园好声音大赛,三位选手得分,由8位评委给出。 请根据评分表,将每们选手的得分去掉一个最高分和一个最低分后求平均分,并按照平均分由高到低输出选手编号和最后得分。 dicScores = {‘012’: [90, 94, 97, 86, 85, 89, 88, 85], ‘005’: [91, 91, 92, 98, 90, 96, 90, 95], ‘108…

    2020年1月22日
    11.0K0
  • pageEncoding和contentType编码作用和区别详解

    pageEncoding和contentType都用于定义字符编码,两者有什么区别?相信不少初学者都会有疑惑,今天中国网页设计给大家详细解读两者的区别,pageEncoding和contentType都在什么时候起作用。

    2022年12月1日
    5880
  • opencv 图像旋转 cv2.rotate和np.rot90案例精讲

    OpenCV 方法 OpenCV 中带有一个旋转图像的函数 cv2.rotate rotate(src, rotateCode[, dst]) -> dst参数:src:输入图像rotateCode:旋转方式1、cv2.ROTATE_90_CLOCKWISE:顺时针 90 度2、cv2.ROTATE_180:顺时针 180 度3、cv2.ROTATE_…

    2022年12月1日
    1.9K0
  • 单元测试经验总结,单元测试快速入门教程六

    测试人员在进行测试的工作过程中,应该注意积累测试工作经验,这样可以缩短单元测试的时间,提高测试效果和效率。 如: 1.在做单元测试的过程中,要灵活选用测试用例设计技术,可以首先使用黑盒测试用例设计技术,然后根据相应的覆盖率统计再补充白盒测试用例。这样既减少了测试工作的重复,又保证了单元测试的完整性。 2.设计驱动程序时,要保证测试逻辑的正确性。否则,即使代码…

    2018年4月18日
    2.8K0
  • python属于编译型还是解释型的语言?python是哪一种类型的编译语言

    Python先把代码编译成字节码,再对字节码解释执行。 java   编译型(请求次数多)+解释型(请求次数少) 解释性语言定义: 程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。 现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行…

    2023年2月26日
    1.2K0
  • 单元测试步骤、单元测试策略,单元测试快速入门教程三

    工作性质不同决定了工作侧重点也不同,因此程序开发人员在单元测试过程中关注更多的是程序代码本身和已经实现的功能。因此,站在他们的角度看,单元测试的过程就是在编写测试方法之前: 首先考虑如何对方法进行测试; 然后编写测试代码; 下一步就是运行某个测试,或者同时运行该单元的所有测试,确保所有测试都通过。 下图从宏观的角度概括了单元测试的工作过程图。 1.单元测试进…

    2018年4月18日
    3.8K0

发表回复

登录后才能评论