当前位置: 首页 > news >正文

软件测试技术之 GPU 单元测试是什么!

1 背景

  测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。

  单元测试用于测试各个代码组件,并确保代码按照预期的方式工作。单元测试由开发人员编写和执行。大多数情况下,使用JUnit或TestNG之类的测试框架。测试用例通常是在方法级别写入并通过自动化执行。

  单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。

2.单元测试定义

  单元测试又称模块测试,是针对程序模块(软件设计的最小单位)来进行正确性校验的测试工作,程序模块在面向对象编程中一般指方法。

3.为什么需要进行单元测试

  编写单元测试代码并不是一件容易的事情,那为什么还需要去花费时间和精力来编写单元测试呢?原因如下:

  · 减少Bug如今的项目大多都是多人分模块协同开发,当各个模块集成时再去发现问题,定位和沟通成本是非常高的,通过单元测试来保证各个模块的正确性,可以尽早的发现问题,而不时等到集成时再发现问题。

  · 放心重构:如今持续型的项目越来越多,代码不断的在变化和重构,通过单元测试,开发可以放心的修改重构代码,减少改代码时心理负担,提高重构的成功率。

  · 改进设计:越是良好设计的代码,一般越容易编写单元测试,多个小的方法的单测一般比大方法(成百上千行代码)的单测代码要简单、要稳定,一个依赖接口的类一般比依赖具体实现的类容易测试,所以在编写单测的过程中,如果发现单测代码非常难写,一般表明被测试的代码包含了太多的依赖或职责,需要反思代码的合理性,进而推进代码设计的优化,形成正向循环。

  就个人而言,感受最深的就是,有了单测后重构代码起来心里压力小多了,其次是通过单测减少了很多低级错误。

4.单元测试带来的一些问题

  单元测试在解决了一些问题的同时也容易产生一些问题:

  学习成本:单元测试框架的学习需要一定的成本

  开发成本:项目初期,往往最重要的是快速上线,时间非常紧张,这时容易出现单测代码难以编写,代码经常变化导致单测代码也需要更着同步变化,一定程度上会拖慢项目的进度,可以在项目中后期再补上重要部分的单测代码

  推广实行:项目中推广单测有一定成本,单纯为了覆盖率的单测是没什么意义的,所以在项目中推广单测时,要考虑到项目成员是否接受单测,能否编写出较好的单测代码,否则单测容易流于形式,达不到理想的效果。

  个人经验,在项目中要施行单测,需要做到以下几点:

  ·说服领导,给出合理的考核指标(如单测覆盖率等要求,需要结合现状给出合理的指标)

  · 提供单测指标统计的大盘,显示项目单测指标,督促大家完成指标

  · 对项目结构配置等进行调整,提供单测工具类,基础类,让单测易编写,能运行,速度快

  · 对项目组成员进行单测编写方法分享,使成员熟悉单测技术

  · 提供单测代码示例,示例要够全面够清晰明了,方便成员参考

  · 定时检查成员单测代码,提供改进意见,防止流于形式

  5 单元测试用例相关概念

  5.1正面测试(Positive Testing)

  测试被测对象的正确功能实现无误,即正常流程功能。往往需要根据设计说明进行用例导出,严格按照设计说明编写即可,用例划分注意等价类区分等方法。

  5.2负面测试(Negative Testing)

  测试被测对象的异常功能实现无误,多在异常流程,异常数据中体现。该部分测试需要对被测对象进行错误发散,常依赖于边界值区分等方法。

  5.3分支测试

  使用流程图,明确可能出现的每条分支,制造响应的数据进行覆盖,实现对被测对象的测试。这个过程对于分支可以进行响应的简化,可以穿插等价类等方法去除同类分支。

  5.4 边界值分析法

  这种方法更偏向于黑盒测试用例设计中使用,对被测输入进行边界分析,从各个角度都会有边界值,例如程序内部依赖之间,已经有一些边界存在,在程序集成展示后,也会有新的边界出现,在设计的时候,需要注意这些细节。例如我们可输入范围是3-6,和输入类型为浮点数。那么边界值为7-8之间。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 标准C++(二)
  • 【Unity Shader】Special Effects(九)Vortex 旋涡(UI)
  • 如何在算家云搭建RVC-WebUI(语音转换)
  • 前端大屏自适应方案
  • DevOps在提升软件质量方面的作用
  • 配置docker的proxy指向
  • 计算机毕业设计推荐-基于python的白酒销售数据可视化分析
  • Spring Boot 从 2.7.x 升级到 3.3注意事项
  • git 如何基于某个分支rebase?
  • JavaScript 中的 BOM(浏览器对象模型)
  • #面试系列-腾讯后端一面
  • 数据库数据恢复—Oracle报错“需要更多的恢复来保持一致性”的数据恢复案例
  • 【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集
  • Docker vs. containerd 深度剖析容器运行时
  • C++自动驾驶面试核心问题整理
  • Intervention/image 图片处理扩展包的安装和使用
  • JS 面试题总结
  • Laravel核心解读--Facades
  • PHP的类修饰符与访问修饰符
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • windows下如何用phpstorm同步测试服务器
  • 大整数乘法-表格法
  • 排序算法之--选择排序
  • 前端js -- this指向总结。
  • 深度学习入门:10门免费线上课程推荐
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信小程序填坑清单
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 你对linux中grep命令知道多少?
  • 从如何停掉 Promise 链说起
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 整理一些计算机基础知识!
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​【已解决】npm install​卡主不动的情况
  • ​iOS实时查看App运行日志
  • ​马来语翻译中文去哪比较好?
  • ​如何防止网络攻击?
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #if #elif #endif
  • $().each和$.each的区别
  • $.ajax中的eval及dataType
  • (2022 CVPR) Unbiased Teacher v2
  • (4)Elastix图像配准:3D图像
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (小白学Java)Java简介和基本配置
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .apk 成为历史!
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET delegate 委托 、 Event 事件
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .NET6实现破解Modbus poll点表配置文件