​ 关于单元测试方法的一些经验总结

news/2024/7/2 23:09:06

关于 单元测试 方法的一些经验总结 软件测试 工厂在组装一台电视机之前,会对每个元件都进行测试,这,就是单元测试。 其实我们每天都在做单元测试。你写了一个函数,除了极简单的外,总是要执行一下,看看功能是否正常,有时还要想办法输出些数据,如弹出信

 关于单元测试方法的一些经验总结 软件测试 

     工厂在组装一台电视机之前,会对每个元件都进行测试,这,就是单元测试。

  其实我们每天都在做单元测试。你写了一个函数,除了极简单的外,总是要执行一下,看看功能是否正常,有时还要想办法输出些数据,如弹出信息窗口什么的,这,也是单元测试,我们把这种单元测试称为临时单元测试。只进行了临时单元测试的软件,针对代码的测试很不完整,代码覆盖率要超过70%都很困难,未覆盖的代码可能遗留大量的细小的错误,这些错误还会互相影响,当BUG暴露出来的时候难于调试,大幅度提高后期测试和维护成本,也降低了开发商的竞争力。可以说,进行充分的单元测试,是提高软件质量,降低开发成本的必由之路。

  对于程序员来说,如果养成了对自己写的代码进行单元测试的习惯,不但可以写出高质量的代码,而且还能提高编程水平。

  要进行充分的单元测试,应专门编写测试代码,并与产品代码隔离。我们认为,比较简单的办法是为产品工程建立对应的测试工程,为每个类建立对应的测试类,为每个函数(很简单的除外)建立测试函数。首先就几个概念谈谈我们的看法。

  一般认为,在结构化程序时代,单元测试所说的单元是指函数,在当今的面向对象时代,单元测试所说的单元是指类。以我们的实践来看,以类作为测试单位,复杂度高,可操作性较差,因此仍然主张以函数作为单元测试的测试单位,但可以用一个测试类来组织某个类的所有测试函数。单元测试不应过分强调面向对象,因为局部代码依然是结构化的。单元测试的工作量较大,简单实用高效才是硬道理。

  有一种看法是,只测试类的接口(公有函数),不测试其他函数,从面向对象角度来看,确实有其道理,但是,测试的目的是找错并最终排错,因此,只要是包含错误的可能性较大的函数都要测试,跟函数是否私有没有关系。对于C++来说,可以用一种简单的方法区隔需测试的函数:简单的函数如数据读写函数的实现在头文件中编写(inline函数),所有在源文件编写实现的函数都要进行测试(构造函数和析构函数除外)。

  什么时候测试?单元测试越早越好,早到什么程度?XP开发理论讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。从我们的经验来看,先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的随便返回一个值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。

  由谁测试?单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成,也就是说,经过了单元测试的代码才是已完成的代码,提交产品代码时也要同时提交测试代码。测试部门可以作一定程度的审核。

  关于桩代码,我们认为,单元测试应避免编写桩代码。桩代码就是用来代替某些代码的代码,例如,产品函数或测试函数调用了一个未编写的函数,可以编写桩函数来代替该被调用的函数,桩代码也用于实现测试隔离。采用由底向上的方式进行开发,底层的代码先开发并先测试,可以避免编写桩代码,这样做的好处有:减少了工作量;测试上层函数时,也是对下层函数的间接测试;当下层函数修改时,通过回归测试可以确认修改是否导致上层函数产生错误。

正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....


http://lihuaxi.xjx100.cn/news/1319505.html

相关文章

squirrel-foundation 使用简单记录

一,系统介绍 这是一个运力系统,用于把车辆从工厂运往经销商,运输方式是司机开过去。大概经过以下几个步骤,以此说明操作场景以及对应运单状态,如下 1.运单创建,上游下发数据生成运单,初始状态【…

unity相机视角平移一段距离

using System.Collections; using System.Collections.Generic; using UnityEngine;public class ControlCamera : MonoBehaviour {//相机视角焦点平移一段距离//需求 相机视角 内的3D对象A 在视角内平移到屏幕C点 public Vector3 InitCameraPos;// Start is called be…

基于springboot图书个性化推荐系统的设计与实现【附ppt和万字文档(Lun文)和搭建文档】

主要功能 前台登录: ①首页:图书名称查询、图书信息推荐、好书推荐、图书信息展示 ②图书信息:图书类别、图书名称、名称类别作者查询、图书详情、收藏、点赞、评论 ③好书推荐:图书展示、点击查看 ④留言反馈:用户可…

争夺数据黑匣子市场,谁将接盘这家Tier1的被动安全业务

在相继卖掉智驾软件算法资产(高通收购)、主动安全传感器及系统业务(麦格纳收购)后,Veoneer最后剩余的被动安全系统业务(主要是安全气囊ECU)也在寻找产业买家。 本周,美国私募股权公司…

【动态规划算法】第八题:931.下降路径最小和

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法\🎄 如 果 你…

【代码随想录day4】两两交换链表中的节点

题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head [1,2,3,4] 输出:[2,1,4,3] 示例 2: …

论文学习——U-Net: Convolutional Networks for Biomedical Image Segmentation

UNet的特点 采用端到端的结构,通过FCN(最后一层仍然是通过卷积完成),最后输出图像。通过编码(下采样)-解码(上采样)形成一个“U”型结构。每次下采样时,先进行两次卷积&…

VUE项目打包成apk

在我们的开发需求中,可能会遇到需要将vue项目中的H5代码打包成一个安卓的app,那么我为大家介绍一套保姆级的解决方案,看完你就会。 VUE HBuilder 1.准备工作: 需要下载一个HBuilder X编辑器,不过我相信大家身为前端…