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

  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

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

99%的人还看了以下文章

  • 精!HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库(下)

    这篇文章主要为大家详细介绍如何使用HTML5利用摄像头拍照实现上传功能。 上一篇只讲到前台操作,这篇专门涉及到Java后台处理,前台通过Ajax提交将Base64编码过的图片数据信息传到Java后台,然后Java这边进行接收处理,通过对图片数据信息进行Base64解码,之后使用流将图片数据信息上传至服务器进行保存,并且将图片的路径地址存进数据库。 大家可以点…

    2022年8月11日
    7990
  • object…object和object[]…object的区别

    object…object public int update(String sql, Object… params) throws SQLException { Connection conn = this.prepareConnection(); return this.update(conn, true, sql, params); }…

    2019年11月19日
    1.9K0
  • MySQL存储过程快速入门

    什么是存储过程 创建一个简单的存储过程 存储过程中的参数 存储过程的优势和不足 一、什么是存储过程 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。 存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能 MySQL…

    2018年12月20日
    2.6K0
  • input file获取文件路径时无法获取正确的路径

    页面有一个input file服务器控件,一个div,div是image标签的容器,当点击input file的值改变,我们往div里追加image标签;但当通过js的onchange事件动态获取input file 的路径的时候,发现console.log(path)打印出的路径是被浏览器屏蔽的, 例如:C:\fakepath\file.jpg 这是由于浏…

    2019年11月13日
    6.3K0
  • JAVA编程题:输入若个数,回车确认求和及平均值

    请输入若个数,每输入一个数回车确认 ,最后输入一非数字结束输入操作 package javaapplication1; import java.util.*; public class Outin { public static void main (String[] args) { System.out.println(“请输入若个数,每输入一个数回车确认…

    2020年3月22日
    2.6K0
  • 编写第一个Python程序——输出HelloWorld并运行

    上一章节我们讲解了Python开发环境搭建,今天学习使用 Eclipse编写第一个Python程序——输出HelloWorld并运行。 1.打开Eclipse,选择File——》New——》Other。在弹出的New窗口中,选择Pydev——》Pydev Project——》next。 2.在弹出的窗口中,依次填写Project name(工程名)——》Di…

    2019年6月24日 编程开发
    3.5K0

发表回复

登录后才能评论