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

测试用例(还需要输入1个字)

近期机缘巧合,连续写2个项目的测试用例。第一个项目,纯属没有办法,参与该项目的现在就只剩我一个人了,只能自己写了,这不,我专门跑到客户那啥都不干,写文档写了2天;第二个项目,则是因为我在其中基本上打打酱油,只能做些鸡毛蒜皮的工作。虽然我自命不凡,觉得自己是全栈工程师,但别人不这么看,尤其是领导不这么看。不过,按照敏捷开发方法scrum的教程,其推崇多职能团队,即敏捷开发团队成员,每人都身兼数职,充当多种角色,比如既开发,又测试,还运维(哇塞,原来小公司的模式就是敏捷模式啊)。又比如,现在流行DevOps,说的是开发人员、运维人员、销售人员等大家通力合作,不分彼此,其实也有身兼数职的意思。

这么说,我还挺潮的。不过,技多不压身,50了,转型做测试也是一条出路。当然了,我不想做测试,写文档太枯燥了,感觉应该是AI干的活。

对于这两次写测试用例,有一些体会和感悟,记录如下:

一、测试用例的编写要求和思想

1、测试用例要写细

话说两个项目给的测试用例模板不一样,但貌似都有功能介绍,预期目标、测试步骤、测试结果,这是最核心的。测试用例是写给测试人员看的,是她们测试的时候的使用手册。写的时候,要假设测试人员对整个项目一无所知,只能按照我们写的测试用例机械地进行测试。因此测试步骤一定要写细,比如点击什么菜单,点击什么按钮,这个按钮在哪个位置,要写清楚。

2、测试用例的功能介绍简明扼要,只提一下其实现的功能就好,不要写太长。

因为测试人员是来测试的,不是来学习系统的,写得太长,她们要花时间去思考,没有必要。

3、测试步骤,是一种黑盒测试,注意是测试步骤,而不要写成功能介绍。

比如这样写就不对:

点击窗口左上角”导入“按钮,在弹出对话框中选择设备清单文件,点击”确定“,可以 将设备清单导入数据库。

应该是这样写:

点击窗口左上角”导入“按钮,在弹出对话框中选择设备清单文件,点击”确定“,成功将提示”导入数据成功”,否则提示”导入数据失败“。

二、测试用例应与研制任务书、需求规格说明书一脉相承

测试用例针对的功能,需要与研制任务书、需求规格说明书保持一致。事实上,我在第一个项目上,到客户办公室写文档,是研制任务书、需求规格说明书、验收规程(测试用例)三个文档一起改/写的。其中,研制任务书要引用合同关于功能的描述和要求,而需求规格说明书和验收规程要引用研制书里的功能描述;这个所谓的引用,就是照搬,复制粘贴一份。

同时,需求规格说明书里要有需求跟踪矩阵和反向需求跟踪矩阵,将研制任务书里的功能和需求一一对应;而验收规程则有研制功能、需求、测试用例三者对照关系。如图

1、研制功能与需求的对照

在这里插入图片描述

2、研制功能、需求和测试用例对照

在这里插入图片描述

3、测试用例与需求用例对应

在这里插入图片描述

4、小结

按照课本,我们知道,系统生命周期可以分为规划、开发、运维、更新或消亡4个阶段。规划,是甲方的活,包括组织可行性研究,输出建设方案;合同签署以后,进入开发阶段,又细分为总体规划、需求、设计、实施、验收几个小阶段,那在总体规划,可以编制研制任务书,然后需求分析,输出需求规格说明书;设计阶段是设计说明书;验收阶段是验收文档,一脉相承。现在,在生产实践中,把理论串起来了,不再是抽象的背诵内容。

三、测试用例模板

两个项目的测试用例模板不一样,记录一下。感觉第一个专业一些。

1、模板一

在这里插入图片描述

2、模板二

在这里插入图片描述

四、总结

我在写第二个测试用例的时候,面对的是一个不太熟悉的系统。因为项目是基于别的项目组现成的代码的二次开发,我身为开发人员,对这个系统,有许多功能其实并不了解。因为要写测试用例,被迫每个功能都点了一下,结果发现,系统的功能很强大,做得十分完善,有些东西还让我惊艳。受到的益处像土匪一样浅薄。也许这个项目一路走来,有许多程序员在上面修修改改,其中有些代码写得不怎么样,符合屎山的定义。但毕竟,项目可以跑,没啥大问题,功能还很强大,有许多值得我学习的地方。这不,这两天我正好用上了测试时发现的功能,借鉴了代码,节省了时间,效果还挺好。

同时,在写测试用力的时候,因为要写得比较细致,对功能有了一些新的视角。所以,教科书上说,有些开发方法或模型,在需求分析阶段就写测试用例,其实也是有道理的。如果能将测试用例写出来,其实对功能的理解就十分到位了。用来指导开发,或者用于跟用户交流,都是不错的选择。

相关文章:

  • 背包问题【算法 07】
  • 自然语言处理系列三十二》 语义相似度》语义相似度概念及入门
  • Python爬虫-实现自动获取随机请求头User-Agent
  • ArcGIS高/低聚类(Getis-Ord General G)——探究人口空间格局的20年变迁
  • WPS关闭后,进程依然在后台运行的解决办法
  • AI绘画SD三分钟入门教程!秋叶大佬8月最新的Stable Diffusion整合包V4.9来了,完整安装部署教程奉上,附各种模型插件一次性用爽!
  • 云 VS 边缘计算,关系与区别是什么?
  • SIP协议之匿名呼叫
  • 【数据结构篇】~栈和队列(附源码)
  • 终端防火墙软件功能 | 在终端设备上启用防火墙!终端安全小课堂开讲啦
  • ubuntu安装minio
  • 【达梦数据库】审计功能开启审计记录查看定时删除
  • Elementui-Plus动态渲染图标icon
  • C# LinkedList
  • 全光谱日光模拟HUD阳光倒灌实验温升测试
  • Django 博客开发教程 8 - 博客文章详情页
  • django开发-定时任务的使用
  • Magento 1.x 中文订单打印乱码
  • Nacos系列:Nacos的Java SDK使用
  • nginx 配置多 域名 + 多 https
  • python 学习笔记 - Queue Pipes,进程间通讯
  • spring boot 整合mybatis 无法输出sql的问题
  • spring学习第二天
  • vuex 笔记整理
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 给Prometheus造假数据的方法
  • 官方解决所有 npm 全局安装权限问题
  • 简单基于spring的redis配置(单机和集群模式)
  • 利用jquery编写加法运算验证码
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前言-如何学习区块链
  • 双管齐下,VMware的容器新战略
  • 一起参Ember.js讨论、问答社区。
  • 源码安装memcached和php memcache扩展
  • Python 之网络式编程
  • Spring第一个helloWorld
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $(selector).each()和$.each()的区别
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (实战篇)如何缓存数据
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.01.09
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework 3.5安装教程
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net多线程Threading相关详解
  • .NET业务框架的构建
  • @Bean, @Component, @Configuration简析
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限