开发人员与测试人员关系的理解

news2024/9/26 3:20:15

 在软件开发中都会有开发人员(以下简称开发)和测试人员(以下简称测试),在一些小型公司可能并没有测试,仅仅是开发兼任测试。在这里我仅针对于有专业的测试和专业的开发的项目。

  每个公司应该都有考核机制,对于开发和测试的考核实际上很难量化,通常来讲大的方向就是开发所负责模块的bug数,对于测试来讲就是测出来的bug数,但这真的有效吗?这也许对开发有约束力,理论上开发是能够自己控制bug数的,如果从产生的bug数来评判开发的绩效还算有效,这样开发自然就会把代码写得更加认真。但如果根据测试测出来的bug数来评判测试的绩效,就假设测试为了自己的绩效瞎测怎么预防?

  单纯地根据bug数来评判开发和测试的绩效,我认为显然不合适。这会导致开发写代码时小心翼翼没问题,但测试就可能会不可避免的测一些莫名其妙的bug,bug多了测试的绩效高了,同时开发的绩效不就低了么?当然实际当中显然也不会根据这一个维度来评判绩效。

  很多时候开发和测试的关系仅是零和博弈。

  开发和测试存在目的是什么?开发是为了实现客户的需求,测试是为了保证软件的质量。两者应该是合作共赢的关系,不是零和博弈,不是此消彼长,不是你胜我败。开发和测试实际上是很矛盾的,两者既对立又统一。

  毫无疑问开发和测试应该是对立的,如果因为开发过多干涉测试的工作,那这个工作根本无法开展,软件质量根本无法保障,测试岗位的设立毫无意义。两者不存在上下级关系,开发应不惧怕测试测出来的bug,同时测试应“多”测出bug,这个“多”并不是数量上的多,而是质量上的多。开发的代码有质量之说,我想说的是bug的质量也是一个测试水平的体现。开发不能把测试当做大爷一样来对待,测试更不能把自己摆在大爷的位置。

  开发和测试的关系同样也是统一的。我认为测试的职责或者测试的成就感不是来自于测出bug,而是能协助开发找出问题并且定位问题。这里的协助并无主次的关系,对于出现bug地方的代码实现测试也许不懂,开发也许也懒得听测试的意见,这个时候并不是测试要和开发一起去寻找代码实现上的问题,而是和开发一起梳理功能的逻辑有无问题,测试以测试的经验和专业技能协助开发。两者统一关系的体现在这个软件是共同的结晶,并不是开发一方的成果,目的都是为了软件能更快更好的发布。

  我想在计算机类的专业里,开发和测试两个方向就类似高中时期的理科和文科。很大部分在高中数学不行或者成绩不行就选择文科认为简单,计算机类的专业里稍微有点“志气”的学生也会选择做开发而不会选择做测试,测试的标签就是简单 ,当然这个现象和类比也许并不准确。

  测试人员在测试的时候应有一定的专业素养,测试不能毫无逻辑,毫无规划的一通乱测,这有个好听的名字——探索性测试。举个例子:

  测试:“出问题啦!某某某快来看啊!”

  开发:“怎么操作的?”

  测试:“我就点了哪儿就出现这个了啊。”

  开发:“那等等,我看下后台日志,你再操作一下。”

  测试:“怎么不能复现了啊,刚刚我就是这么点的啊。”

  开发:“……”

  这个场景常见,如果这个bug本身就是偶现的bug那还说得过去。如果问测试怎么操作的,测试一脸懵逼的说:“我不知道,我忘了。但是你这个有问题就是bug。”这得多花多少开发的时间去排查这个问题啊,不是不让你测,是让你有套路有思路的测,这是对于测试自身素养问题。

  同样对于开发人员也是一样的,自测是一个很好的习惯,抛开开发的代码能力,这是对于开发人员最基本的素养。举个例子:

  开发内心:“终于做完这个功能了,不测了,反正有测试,让他们去测,测出问题再改。”

  很大部分的bug是因为开发自身没有做好自测,单元测试并不是在每个公司每个项目每个模块都有,甚至很多开发人员几年工作经验也不知道怎么编写单元测试。认为自己的工作就是写代码,检验功能是否完善是否有bug的工作应该交给测试去做。

  对于开发和测试素养的问题我想这是在理想状态下,或者只存在理论上。实际上开发测试鱼龙混杂、参差不齐、滥竽充数都有可能。但对于开发和测试关系万万不可将开发和测试放在对立面,同样应考虑他们是统一的,矛与盾缺一不可,合作共赢而不是零和博弈。如何维系两者的关系也是一个很值得研究的问题。

对于测试怎么学习,我的建议是

 ​学习建议

1、一般来说,测试新人的话首先需要把基础打好,测试理论基础可以通过看一些经典书籍或网上也有很多免费的资源,选择前两本基础的看,你会受益匪浅。

2、刚开始不太建议加入过多技术群或其他论坛提问,初期遇到问题可以自己搜索自己尝试解决,当然需要控制一个止损点,不要为一个问题耗费太长时间

3、自学基础的同时一定要做好笔记,且一定是通过自己的理解后做的。可以使用思维导图把前后学到的东西给关联起来

4、读完一本书或一个阶段结束后,可以自测一下,通过找一些经典的笔试题或一些istqb中的题目,来巩固或查漏补缺,有针对性的再次巩固学过的东西

5、接下来可以找一些项目来做或去众测平台看一些基本的项目测试流程,包括基本测试文档的书写规范等等,testin众测平台是一个锻炼的不错平台,至少测试用例设计、执行及bug探索提交缺陷都是挺好的。

6、目前有好多平台会开设一些免费的公开课,通过技术讨论组可以接收消息推送,设定好时间听一些专业领域的测试方法,可以快速了解到大体的流程。(一定要经过严格筛选,选择质量高的,否则会浪费一大部分时间):

第一阶段 测试基础

测试基础是软件测试最最最重要的部分,只要你是做测试,不管是什么测试,测试的基础、理论知识都是必须学会的。 最好学到什么程度呢,最好是能够理解,并能够用自己的话给复述出来。 毕竟面试初级测试的时候,问的问题都是从基础理论上进行考核的。 那测试基础有哪些内容呢?

测试的定义、测试的分类、测试的方法、测试的生命周期。 测试计划、测试方案、测试策略、测试用例的编写。 BUG的定义、BUG的分类、BUG的六要素、BUG的生命周期。 测试和开发流程的关系、瀑布流、V字形、W字型(双V)、螺旋型、敏捷等等。 PDCA、5W2H等分析管理的方法 质量管理体系CMMI(了解) 嗯,大概就是以上的内容吧,以上全部都是理论和文档能力、只要你肯背、肯写,都是能独立的掌握的。

第二阶段 常见的测试工具

测试工具永远是软件测试人员的得力助手,不能完全依赖工具,但也不能没有工具,在学习软件过程中,要著中软件测试工具的使用,下图覆盖初、中级软件测试工程师所需具备的测试工具,要想学好,下手学习吧。

混在软件测试职业圈,工具千千万,不可能每个都会用,至少要知道有哪些工具可用,什么时候该用什么工具,每个工具能解决什么问题,然后再深入应用几款工具即可,下面就带大家总结一下。

测试管理工具

禅道:简单好用,市场主流,互联网行业居多 Jira:简单好用 QC/ALM:复杂,收费,电信/金融行业使用较多 bugzilla:功能简单 svn:代码和文档管理工具 git:但是多分支管理比svn好

接口测试工具

Jmeter(开源) postman SoapUI 推荐使用 jmeter 和 postman。

性能测试工具

loadrunner:大而全,要学精通还是有点难度,重量级工具,过去和现在都是行业老大 jmeter:基于java平台的性能开源测试工具,其实也很强大,而且比较好用 Locust:基于python的一个性能测试工具

白盒测试工具

junit/testng:java下的单元测试框架 unittest/pytest:python下的单元测试框架 cppunit:跨平台的c++单元测试框架 PhpUnit:Php语言下的单元测试框架 TestBed:一个重量级的白盒测试软件,可以进行单元测试、集成测试、静态测试,军工行业常用 Klockword:静态测试工具,军工行业常用

持续集成工具

Jenkins:比较常见的一种CI工具 Hudson

网络测试工具

以HTTP/HTTPs协议为主,网络测试工具有: wireshark fiddler charles


app自动化工具

appium:这个应该算是目前最流行的基于app的自动化测试框架了 uiautomator:安卓自动化测试框架,基本上支持安卓的所有事件操作 Monkey:安卓自带的测试工具 Monkey Runner:Monkey改进版,支持自己编写脚本测试,用Python语言 Robotium:一款国外的Android自动化测试框架,用法比较

web安全测试工具

appscan:算是用的非常多的一款工具了,扫描后能够将绝大部分的漏洞找出来 fiddler:网络抓包工具 burpsuite:暴力破解、抓包工具 skipfish:这是一个轻量级的安全测试工具,处理速度很快,每秒可处理2000个请求。

第三阶段 代码学习

好了,学完了以上两个部分,恭喜你,你已经是一个出色的初级测试工程师了。 接下来,你要考虑你的发展方向了 是成为一个自动化测试工程师呢? 还是性能测试工程师呢? 还是安全测试工程师呢? 啊!这个问题好难!我也不知道该怎么选。 反正我啥都会一点,哪个岗位都能去面一面。 关于方向的选择,看我的这篇文章

嗯,相信你心中已经有了答案了,那我们继续往下面说。 这个阶段,我们应该学习代码了,关于编程语言的选择,我推荐Java或者python。 还有数据库也是必须掌握的!在工具篇的学习里,我认为你已经可以掌握数据库的相关的应用了! 所以现在各位可以去学习编程语言了, 不过不用像开发那样,学的那么深入。 比如Java,只需要学完JavaSE的部分就够你用了。 python的话也是一样的,把基础的部分学完就行了。 总之前期你两者二选一的学习就OK了。 啥?你问我学的啥。 我当然是两种都会啊 哈哈哈哈哈哈哈,惊不惊喜!意不意外!

自动化方向

等你代码已经基本掌握了,嗯,很好,接下来就要学习各种自动化测试了。

各种单端测试框架:unittest(python)、pytest(python)、JUnit(java) WEB自动化测试框架:selenium(适用于java\python\javascript) APP自动化测试框架:appium(适用于java\python\javascript) 以上的内容,根据你学的语言进行选择。 appiunm和selenium根据你参与的项目进行选择。 不过无所谓了,反正迟早都要学会的。 这部分的教程太多了,你学会了编程的基础后,随便百度,好多博客论坛都有教程。 而且凭你那时候的水平,你都能轻松的看懂。

性能方向

​对loadrunner和jmeter的掌握更加的深入。 可以手写脚本、脱离录制。 学会了多线程编程、能够手写java或者python、不用工具直接实现压测。 学习linux,毕竟性能总是和服务器打交道的。 学习系统架构的相关知识、方便你更容易的分析系统瓶颈。 说实话、性能方向的提示更难、因为需要掌握的东西太多了。 性能测试做深入了,基本上就是架构师的水平了。 可能你现在看着这个性能方向的学习一脸懵逼。 没关系、等你把上面的编程语言学会了你就不懵逼了。

安全方向

渗透测试 SQL注入 暴力破解 脱库 等等 其实安全测试基本上偏向于网络攻防了,也就是传说中的黑客了,不过我们都是好人,这个的发展方向就是白帽子。 推荐知道创宇的学习体系。 我估计你看到这里就更懵逼了。 没关系、等你把基础的东西学会就知道我在说啥了。 毕竟你现在还是一个小白嘛。 不要去纠结这种小事。

各位在这个阶段,正常情况都应该是中级测试工程师的水平了。

第四阶段 架构学习

前三个阶段学习完成后,各位就应该考虑怎么写代码更合理了。 怎么去测试更全面。 怎么才能更好的保障项目的质量。 我认为,在这个阶段,应该回头重新学习一遍测试基础。 因为这个阶段的提高是思想、方法的提高了。 上面讲的都是教你应该怎么做。 在这个阶段你要自己去发现、为什么要那样做。 跨过了这个阶段就基本上可以成为专家了。 学习都是水到渠成的,在这个时候,你应该已经掌握了不少框架了,甚至自己也能开发合适的框架了。 自动化测试框架、性能测试框架等等。 已经有了属于自己的一套东西了。 在群里或者论坛上去装逼、别人都会尊称你一声大佬了。 可能你也学会了一些其他的技术了,甚至在往全栈等方向跨进了。 总之,到了这个阶段就没什么学习路线了。

小结

  上述都是一些个人体会,文笔有限写的有点零碎,但是内容都是真实感受的,如果能对一部分人有所启发那就再好不过。目前自己还是一直在思考未来,自己可以做什么,还是期望未来可以多赚钱^_^,过更好的生活。。

2023最新Jmeter接口测试和接口自动化测试从入门到精通,全套项目实战!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

solidwork中添加GB型材库以及使用

在使用solidwork设计遮光罩的时候,需要铝型材作为支架,铝型材如果自己去画设计可能浪费时间不说,还得去找对应型号。默认solidwork中没有国标的型材库。网上教程导入型材库路径是错误的,所以在复制完后打开solidwork找不见型材库 …

Ubuntu小操作

安装拼音输入法 sudo apt-get install ibus-pinyin点击加号 点击other 输入 chinese 使用 winspace 切换 可以在键盘快捷键处改变快捷键 安装ADB sudo apt-get install android-tools-adb编写规则 sudo gedit /etc/udev/rules.d/80-android.rules写入(其中红色字体部…

面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?

本期是【你好,面试官】系列文章的第21期,持续更新中…。 《你好,面试官》系列目前已经连载20篇了,据说看了这个系列的朋友都拿到了大厂offer~ 你好,面试官 | 你真的理解面向 “对象”?你好,面…

在Flask中构建API接口的相关概念

重定向行为斜杠以下两个路由的不同之处在于是否使用尾部的斜杠。第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。第二个路由的URL没有尾部斜杠&…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…

【青训营】RPC框架分层设计简述

远程函数调用&#xff0c;Remote Procedute Calls&#xff0c;简称RPC。RPC需要解决的问题有&#xff1a;完成远程函数的映射&#xff0c;并且将数据转化为字节流&#xff0c;使用网络进行传输 RPC基本概念 IDL文件&#xff1a;IDL通过一种中立的方式来描述接口&#xff0c;使…

OpenCV 图像梯度算子

本文是OpenCV图像视觉入门之路的第12篇文章&#xff0c;本文详细的介绍了图像梯度算子的各种操作&#xff0c;例如&#xff1a;Sobel算子Scharr算子laplacian算子等操作。 OpenCV 图像梯度算子目录 1 Sobel算子 2 Scharr算子 3 laplacian算子 1 Sobel算子 Sobel算子是一种图…

.Net Core对于`RabbitMQ`封装分布式事件总线

首先我们需要了解到分布式事件总线是什么&#xff1b;分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信&#xff0c;而无需直接耦合或了解彼此的实现细节。通过事件总线&#xff0c;组件或微服务可以通过发布或…

基于STM32的虚拟示波器

仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeGUI使用 截图说明见wiki 最新版Releases Introduction 用最少的硬件成本&#xff0c;做一个实用的虚拟示波器。 这是硬件部分&#xff0c;基于STM32最小…

提取DataFrame中每一行的DataFrame.itertuples()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】提取DataFrame中的每一行DataFrame.itertuples()选择题关于以下python代码说法错误的一项是?import pandas as pddf pd.DataFrame({A:[a1,a2],B:[b1,b2]},index[i1,i2])print("【显示】d…

基于SpringBoot实现ChatGPT-QQ机器人

概述 近期ChatGPT火爆全球&#xff0c;在其官方网站上也列举了非常全面的应用案例&#xff0c;仅仅上线两个月活跃用户数已经达到1亿&#xff0c;成为历史上用户数增长最快的面向消费者的应用 快速体验 OpenAI官网对外提供了标准的 API 接口&#xff0c;可以通过HTTP请求进行…

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…

图的基本介绍和表示方式

图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表&#xff08;数组、队列、链表和栈&#xff09;和树&#xff0c;但是我们可以发现&#xff0c;线性表局限于一个直接前驱&#xff08;就是只能有唯一一个前面的结点&#xff09;和一个直接后继的&#xff08;…

Python+dilb 简单实现人脸检测(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 目录 一、环境配置 二、前期知识 1 读取图片 2 灰度转换 解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\o…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…

【Spark分布式内存计算框架——Spark Core】9. Spark 内核调度(上)

第八章 Spark 内核调度 Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stag…

PVE虚拟机篇-PVE虚拟机安装

安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件&#xff0c;可以直接选择最新版本。 但是如果没有海外线路一般下载十分缓慢&#xff0c;甚至下不动&#xff0c;所以可以去中科大镜像源&#xff1a;中科大Proxmox Virtual Environment 制作U盘启动盘 可以使用…