项目经验总结——送给测试岗做项目的朋友们

news2024/9/21 14:32:52

目录

前言

1、项目排期时的时间预估能力欠佳

2、QA写单元测试

3、集成测试方案不够精简

4、排了优先级也很难取舍

5、搭完redis集群却不了解redis运行机制

总结

结语


前言

最近负责的L项目从3月初开始开发到6月底正式上线,这是我在工作快1年时间里第一次独立负责一个从0到1项目的全部测试工作。这边团队中项目的质量要求都比较高,测试流程很规范,对测试人员自身的要求也比较高。

从项目开始时制定整体测试方案,到模块测试、集成测试、兼容性测试、异常测试,最后到上线,一整个流程跟下来,我对项目整体的测试工作的开展也有了更宏观的认识。项目上线前比较忙忙,趁现在项目上线后还没那么忙的时候,反思一下项目测试过程中那些做得不太好的地方,在以后的工作中能有针对性地做一些改进,做得更好。

1、项目排期时的时间预估能力欠佳

记得刚开始进行项目排期的时候,其中一个模块我是这样排期的:接口测试方案及用例设计2d,接口测试执行 1d,UI口测试方案及用例设计 1d,UI测试执行1d。六哥看了后说,你这个不太合理啊,预估的时间太短,不可能完成的。

但哪项工作到底需要安排几天我当时确实有点懵,然后六哥指导我重新排了个期。排完之后,这个模块重新排期后是这样的:接口测试方案及用例设计2d,接口测试执行 3d,UI口测试方案及用例设计 2d,UI测试执行3d。

当时我内心的想法是这样的:这时间排得有点多啊,到时候万一时间用不完正好多了一些学习的时间~~~然而实践证明,我想错了。在真正开始项目测试才发现,时间看起来安排得宽裕却常常不够用,工作过程中总是会遇到各种各样的问题需要花时间去解决。

有一次项目时间赶,周末过来加班,遇到了我们测试小团队的负责人策策,然后我们发生了下面的对话:

他问我,怎么周末还来加班?

我说,有些技术刚上手还不太熟悉,所以进度比较慢。

他问我,当初排期的时候怎么没有把学习新技术的时间也考虑一点进来呢?

我说,这怎么好意思啊?

他反问我,开发使用新技术时,在项目排期时都会加上新技术的调研时间,测试使用新技术不也应该留点学习的时间余地吗?

我竟无言以对,为啥会不好意思呢?可能是因为工作才1年,感觉到自己的思维还是很学生的,好像排期越短越能体现自己工作很努力一样,排期排得长一点总会有一种偷懒的错觉,还不能以一种客观的态度来对待工作。在预估时间时总是想得太顺利,忽略了可能遇到的各种各样的问题。

我感觉,对项目合理排期及把控时间也是一种个人能力的体现,从拆解任务点到合理预估每个子任务点需要花费的时长,这其中还包括了对可能出现的问题的预估。而这项能力的培养依赖于以前的一些项目经验以及及对踩过的一些坑的总结反思。

在以后的项目中,要结合实际的项目经验,在时间预估过多和过少的时候多进行一些思考,提升自己这方面的能力。

2、QA写单元测试

项目中有一个计算价格的基础服务模块,其中有一个计算字符串中包含的所有规则(例如重复、连号、ABAB、特殊含义等)的方法。当时选用了写单元测试的方法来进行这部分逻辑的测试,花了不少时间去了解开发代码的处理逻辑,选择了很多包含特殊规则的字符串作为输入,然后断言是否包含指定的规则。写完之后,把代码发给开发,让开发加进项目工程代码中,但内心总有种说不出的异样感觉,毕竟项目代码都是开发写的,加入自己的测试代码总有种自己是外人的感觉。

不可否认这个过程中对这块代码的熟悉程度增加了很多,但总觉得哪里姿势不对。单元测试是必要的,能从根本上减少bug及定位bug的成本,也能够提高代码重构的成功率。但总有疑问,单元测试不是应该让开发做吗?遂百度之,看到下面的这段话,正解我惑:单元测试应该由最熟悉代码的人来写,这是好的单元测试的标准之一。测试人员进行单元测试,工作量大、周期长,结果事倍功半,所以单元测试应该由开发人员自己来写。

以后,遇到同样的问题,我想我会这样做:推动开发来写重要底层模块的单元测试,我通过统计这些模块单元测试覆盖率的方式,来检查单元测试的覆盖情况。

3、集成测试方案不够精简

拿集成测试来说,这里所说的集成测试是指模块开发结束之后,对项目整体做的系统级的测试。在之前的模块开发阶段,功能不断叠加,在集成测试阶段,系统已经相对稳定。集成测试的重点应该是模块间的交互及系统整体的业务流程。但在制定集成测试方案的时候却没有一直围绕这个重点,做了一些投入产出比比较低的工作。

下面是之前出的集成测试方案,在设计方案的时候还专门花了一些时间进行了P0级别回归用例的挑选(去除了部分UI用例)。方案评审会的时候也是主要讨论了组合场景分析及用例设计,还有围绕重点bug进行的一些思路发散。但测试执行阶段发现P0级别用例回归及bug回归基本是不需要做的,因为P0级别用例大都是前后端的基础功能,而这些在组合场景的用例设计中已经全都覆盖了。而bug的回归在集成测试开始前已经全部回归过,再做一次也基本没有必要。所以最后真正执行的就是组合场景用例及重点bug的发散测试。

其实不光是集成测试方案,在设计其他测试方案的时候(如异常测试方案),都有点不成熟的想法,就是觉得既然是测试方案,就应该要“多一点,全一点”,在方案和用例的精简及有效性上思考得不够多。可能很多新人都会走过这一步吧。

以后在各个测试阶段开始前,都要多花一些时间进行全盘的思考,尽量设计出精简而有效的方案及用例,提升工作的效率。

4、排了优先级也很难取舍

有时候跟罗仔反馈说项目时间比较赶,他总提醒我,要先排个优先级,挑重要的先做。其实我思考过各项任务的优先级,但可能是缺乏一些判断的经验吧,总感觉手上的工作好像都很重要,很难取舍,特别是在要放弃一些不重要的东西。就拿浏览器兼容性测试来说,虽然对浏览器按优先级划分了P1、P2优先级,但后来时间比较赶的时候讨论决定放弃P2级别的浏览器不做兼容性测试的时候心里总还是不太放心。可能是项目经验不太多,总想做到大而全,但互联网企业中项目迭代一般都很快,根本不会有那么充足的时间,而且往往也不需要那么全。

以后的工作应该花更多的时间和精力去思考投入产出比,抓住主要矛盾,在解决主要矛盾的基础上再去做其他的工作,在时间进度赶的时候可以舍弃一些不重要的事,这样才能把控好项目的整体进度不至于乱了阵脚。

5、搭完redis集群却不了解redis运行机制

开发环境的redis集群是运维搭的,1主1从,3个哨兵结构,分布在2台机器上,1台机器上1主1哨兵,另1台机器是1从2哨兵。虽然之前看过一些redis的教程,但了解得还是比较浅的,之前也想过请运维来搭这个redis集群,但之前一直想自己亲手搭一回redis集群,这个难得的机会还是应该把握一下自己动手实践一下。然后就开始对照网上的各种教程,按照开发环境的配置搭了一套1主1从,3个哨兵的redis集群,只不过我是搭在同一个docker容器里的。花了很长时间了解了redis各配置项的意思,准备好了5份配置文件,踩了很多坑最后终于把redis集群搭出来,但master进程总是会莫名其妙地挂掉,网上查阅各种资料也没能解决这个问题。后来我就去请教了组里的吴大神,跟他描述了下我搭的redis集群及遇到的问题。

他问我,测试环境的redis为什么要搭集群啊?

我说,我是按照开发环境一样的结构来搭的。

他说,使用主从结构是为了保证高可用,测试环境只需要一个master就够了,而且没有主从结构,也不需要哨兵。

然后他指导我排查了下问题,最后发现是配置中docker中的ip和宿主机ip没用对导致的。

之前查看开发代码,redis的配置文件中是指定了哨兵ip和mastername,但因为之前没有用过java代码去连redis,更不清楚java代码连接redis的方式有几种,还是不知道能不能只用一个master就够了。我去咨询了下开发,他说不行的,因为代码中是通过哨兵+mastername来连的,现在的代码不支持直接连单个master。后面又自学和实践了redis的哨兵机制、主从切换,对redis有了一些更深的了解,后面会专门写一篇关于redis的文章。

以后有新项目需要搭redis的话,我想我会这样做:搭1主1哨兵结构,或者跟开发商量下代码中能否支持只有一个master的情况,这样测试环境直只需要搭一个master就可以了,这样可以节省很多时间。

总结

写到这里,之前计划的一些点都基本写完了,但跟写总结之前在一些想法上也发生了一些变化。写总结之前是想分析分析做过了哪些无效的工作,走了哪些弯路,但真正挖下去,发现其实并没有绝对无效的工作。每个人都会走弯路,特别是在工作年限比较短的时候,走得弯路更多。但是如果在感觉不对劲的时候能够及时总结反思,那么走这些弯路吸取的经验和教训,都能够成为自己的宝贵经验,让以后的路能走得更顺利。而且自己经常是抱着学习的心态去尝试一些工作,这本身就是一个学习的过程,而学习本没有捷径,都是一个循序渐进的过程,通过一次次遇到问题、分析问题,解决问题的过程,不断挖掘,才会对所做的事情有更深的理解。

记得上次我去找小团队的测试负责人策策聊下关于在项目中的实践、学习以及自己的输出的时候,他提醒了我一点,对我很有帮助。他说,学东西要有个目标,自己定一些标准,要能量化地评估学习的成果,怎么样算是学得很好,怎么样算是一般。自己之前也有思考过要评估学习的效果,但一般都只是把学习及遇到的问题记录成文档,但感觉这样在深度上还远远不够。就拿redis来说,搭redis的集群的过程我都记录成了文档,但对于redis内部主从切换及哨兵的机制还不太熟悉。从我自身经验来看,在新学一项技术的时候可能还不具备自我评估的能力,我觉得可以去请教一下擅长这项技术的同事,让他们问自己几个核心的问题,带着这些问题,可以学习得更深入一些。

写这篇总结花的时间比我之前预估的要长很多,思考的深度也更深了一些。但写总结确实是一个很好的自我梳理和提升的过程。自我感觉在日常工作中思考得不够多,特别是一忙的时候,就光顾着干活而懒得跳出来多思考思考。以后的工作中,要通过定期写总结的方式来反思和总结近段时间的得失,做到清晰地思考和高效地行动。

补充

这是一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

结语

最后再唠唠一句,如果想以测试为长期发展职业目标,是需要时刻保持学习的,要使自己具备竞争力,无论你现在工作几年,只要行动起来,你就已经占优势了,好啦就到这里了,祝大家2022年能升职加薪,没入职的就早日拿到心仪公司的offer,事事顺遂。

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

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

相关文章

机械键盘、口袋打印机,万元奖金等你拿!「万象格新」AI绘画X海报设计大赛即将开启...

号外!「万象格新」大赛开启 如果阳光暖到你心里,那一定是一格在想你~ 春夏交替,万物焕发生机,明媚色彩娱情惬意 在这样一个美好的时节 如果你: 心中荡漾着色彩斑斓的 AI 绘画创意 想要 show 出独到的审美与非凡设计能力…

【系统集成项目管理工程师】项目干系人管理

💥十大知识领域:项目干系人管理 项目干系人管理包括以下 4 个过程: 识别干系人规划干系人管理管理干系人参与控制干系人参与 一、识别干系人 输入工具与技术输出项目章程采购文件事业环境因素组织过程资产组织相关会议专家判断干系人分析干系人登记册 …

servlet(1)—javaEE

文章目录 1.认识servlet2.使用servlet2.1创建项目2.2引入依赖2.3创建目录2.4编写代码2.5打包2.6部署2.7运行2.8验证 3.开发步骤4.部署方式4.1打包4.2安装插件 5.访问出错的情况5.1 4045.2 4055.3其他 6.servlet的三大生命周期方法7.servlet api7.1HttpServlet7.2HttpServletReq…

想攀登金融领域高峰,中国人民大学与加拿大女王大学金融硕士是重要途径

每个人都希望自己的职场攀登是优质路线,最短路线。金融业招聘注重学历,最早外资投资银行招聘只要清北复交,现在知名金融机构工作也只招985。还有一个特点是,宁要国内清北复交,也不要海归留学。学历到底重不重要&#x…

响应式布局

文章目录 响应式布局概述viewport 视口CSS 常用单位CSS 媒体查询语法直接使用使用style标签使用link引入 自适应布局栅格系统响应式布局案例rem媒体查询 响应式布局 概述 响应式布局是指网站或应用程序可以自适应不同的屏幕尺寸和设备类型,简而言之就是一个网站兼…

ERTEC200P-2 PROFINET设备完全开发手册(8-2)

8.2 IRT通讯原理及API PROFINET RT通讯的特点: 典型的PROFINET网络如下图所示。 其中: T1: 采样输入 T2: IO背板周期 T3: Profinet I/O 通讯周期 T4: CPU组织块OB1执行周期 T5: Profinet I/O 通讯周期 T6: IO背板周期 T7: 建立输出 在PRO…

Java35-85

这里写目录标题 steam流collect超详解 方法引用静态方法中没有this!!!引用本类或者父类的成员方法 引用构造方法引用方法成员引用数组的构造方法转成自定义对象获取部分属性并收集到数组 异常异常中的常见方法抛出 处理自定义异常File的概述和…

实验8 梯度下降法

1. 实验目的 ① 掌握深度学习框架中的自动求导机制; ② 掌握梯度下降法的基本原理,能够使用梯度下降法求解一元和多元线性回归问题。 2. 实验内容 ① 使用TensorFlow的可训练变量和自动求导机制实现梯度下降法; ② 使用梯度下降法训练线性…

2023-04-23 算法面试中常见的动态规划问题

动态规划 1 什么是动态规划 以菲波那切数列求和为例,通过 1.普通的递归2.引入记忆数组memo3.自下而上地解决问题,即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for solving a complex problem by…

Redis-cli Go代码

Redis-cli Go代码 安装 go get github.com/redis/go-redis/v9 建立连接 import ("context""fmt""github.com/redis/go-redis/v9" )client : redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", …

支付宝 网站支付Demo 案例【沙箱环境】IDEA如何配置启动Eclipse项目

前言 在跑支付宝提供的支付案例Demo的时候,遇到了一些问题。支付宝提供的Demo是用Eclipse跑的JAVAEE项目。我想用IDEA来跑一下看看、结果使用习惯了Mavne管理jar包和SpringBoot项目。启动web项目的时候,还遇到一些问题。特此记录遇到的一些小问题。顺便回…

c++之常见函数

文章目录 一、inline函数二、函数重载三、函数模板 一、inline函数 1.当进行函数的调用时,系统要建立栈空间,保护现场,传递参数等等,这些工作都需要系统时间和空间得开销然而inline 函数是以空间换时间的做法,省去调用…

FL Studio 21最新发布的版本主要的新功能

FL Studio 21是最新发布的版本,其主要的新功能有: 1. 全新的UI设计:FL 21采用全新的 FLAT UI 设计风格,简洁而不简单,颜值大大提高。 2. 多窗口支持:可以将FL Studio窗口分别显示在不同的显示器上,实现屏幕间切换和多视图编辑。 3. 混音台增强:新增后置通道、多输入输入和多…

反垃圾邮件产品技术要求和测试评价方法

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品等级划分 根据产品功能要求和安全保证要求的不同,以及反垃圾邮件产品适用应用环境的不同,将…

ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)

参考B站古月居ROS入门21讲:常用可视化工具的实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一、日志输出工具:rqt_console二、绘制数据曲线:rqt_plot三、 图像渲染工具:rqt_image_view四、图形界面总接口:r…

FE之TSNE:基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略

FE之TSNE:基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略 目录 基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例 # 1、定义数据集 # 2、数据预…

docker部署springboot(jar)项目的方式概括

1、docker挂载目录 实现原理:docker中只需要安装一个JDK镜像,把该镜像的目录挂载到外部的Linux中,如挂载到/usr/data/jar,我们只需要把Jenkins构建的jar文件传输到该目录中,在通过docker命令启动jar即可: …

【代码随想录】刷题Day5

1.链表重复节点删除 82. 删除排序链表中的重复元素 II 前后指针实现 1.做这道题最大的感受就是:不要觉得开辟空间浪费,多用临时变量去记录。越精确越容易成功 2.首先没有节点或者一个节点直接返回 3.因为头部会出现一样元素的情况,以至于我不…

C语言之详解静态变量static

在C语言中static是用来修饰变量和函数的,这篇文章详细介绍了static主要作用,文章中有详细的代码实例,需要的朋友可以参考阅读 在C语言中: static是用来修饰变量和函数的 static主要作用为: 1. 修饰局部变量 - 静态局部变量 2. …

linux软件安装指令---yum和rpm

这里写目录标题 一 yum指令1. yum install 软件名2. yum remove 软件名3 检查已经安装成功的软件 二 rpm指令1 rpm -q2 rpm -qa|less3 rpm -qa| grep python4 搜索文件的详细信息5 查询一个rpm中的包安装到哪里去了6 查询一个文件属于那个包7 软件包的卸载 三 总结四 示范安装 …