测试管理 测试人员如何看懂开发代码?要掌握到什么程度才能自己调试?

梦途 · 2021年11月18日 · 最后由 天邪泪 回复于 2021年11月23日 · 6353 次阅读

背景:

来自一个 Java 大佬的嘲讽:我们之前有个测试,是会调式前后端代码的,直接告诉我们哪里写错了,这样就能很快解决问题

编程语言:

公司后端 java,前端是 react,vue,rn 等,而我个人比较熟悉 Python,Java 还是一个小白,懂一点 js

思考:

起初也会想,java 的东西好多啊,真的要再学习一门语言吗,但是后来想了想,目前作为主流语言,大部分后端用的都是这个,还是要会一些的,起码能看的懂,这样做接口测试和问题排查的时候会方便很多

问题:

Python 不足以支持问题排查时,Java 要学习到什么程度,才能进行接口调式和问题排查,能够看的懂代码

共收到 18 条回复 时间 点赞

来自一个测试小白的质问:调试前后端代码是开发的职责,要测试直接告诉你们哪里写错了,要改成什么样子,这样你们才能解决问题吗?

灵魂拷问,那我指出来帮你改了,你的工资给我吗

我见过的后端代码通常都比较简单粗暴,并不难懂,稍微熟悉一下 spring 框架,了解下分层思想和基础写法就可以了。时常感叹用 python 来写业务,代码少一半都不止。

这个问题和是否掌握自己调试没关系,我前后端自己都能写,一样把 bug 修复交给开发去做,各个系统都有各种坑,这些坑开发都趟过,代码也是开发自己写的,设计细节,写法这些都是他本人最清楚,测试 debug 还要去理解每个开发的写法、思路、业务细节、实现细节,比开发自己调试慢很多。我通常只有在很明显能判断出大致错误原因时,才会给出自己大致的判断,然后走读代码确认是否和自己的判断一致。走读代码和 debug 程序只是为了提升自己,能提升效率时顺带提升效率,所有 bug 都自己去 debug,就谈不上效率了 。

前面歪楼了。。。我来回答下楼主留的问题吧。

首先,不要觉得学 java 是从零学另一门语言,编程语言除开各个语言的一些设计理念外,核心逻辑不外乎就是那几个,而且 python 和 java 都是面向对象的,两者很多地方都比较接近,能看懂 python 不至于看不懂 java。

然后,从提高开发的问题解决效率来说,并不见得还得把解决方案都给到才能提高,能找到并给出相关的关键错误日志(如异常堆栈)已经帮助非常大了。进一步的可以拿开发代码本地跑起来后,给错误日志所在代码行加断点,便于看到此时各个变量的信息,排查为何报错。

最后,如果真的是要掌握到知道怎么修 bug 的程度,那得知道怎么写代码。那可以找开发拿到项目代码后,仿照开发的形式基于这个项目自己去加一个对某个库表的增删改查接口,从 controller 写到 service 再到 dao,三层结构都写一遍并调通(过程中你会学到项目用到的框架最常用用法,特别是各个注解的用法和含义,这个对于读懂代码非常重要)。做完后相信你就可以掌握了。

我能说开发脸都不要了?都让测试调试出问题,都告诉他们怎么改,那他们干嘛吃的?

我司测试部门同事针对此问题有过一些思考,发在了我们的公众号上,欢迎大家共同探讨哈,链接如下
为什么测试人员要懂代码?https://mp.weixin.qq.com/s/uFJcgh7KlZnzBMb9LoxoNw
谈看代码 1 https://mp.weixin.qq.com/s/0c29QAQ_jm3ERUxUDKgytQ
谈看代码 2 https://mp.weixin.qq.com/s/w0ju6SSQiWy0hKDqRnmsSA
谈看代码 3 https://mp.weixin.qq.com/s/bBUtf1lu599h7CV-8RSRUg

如果已经掌握 python web 开发能力的话,简单熟悉 java 语法,花几天看一看 spring 的课程应该就可以看懂。
如果仅仅是告诉后端,代码那里错了其实是很容易的,有了上述的前置,要来项目权限,本地起来服务(大多数基础稍差的测试走到这一步,就不好意思弄了,因为发现自己前置知识严重不足,一步一坎,都得问后端)。通了之后,拉对应分支,哪个接口报错了,本地起服务,请求一下,堆栈信息一截图,贴到 jira 里就完了。

和上面一样把后端项目在本地跑起来,java IDEA 下断点就可以调试啦。单步调试,对了解代码很有帮助。

综上所述,难者不会,会者不难,我是难者😂

我觉得测试人员 debug 的前提是 有时间 + 有兴趣 + 有能力
兴趣和能力上面几位回答的很透彻了,但时间也是一个很重要的考量
测试任务很重的情况下,根本没时间 debug 找问题,除非被某个开发惹急了,找出原因打脸用

个人觉得还是业务理解方面挺重要的,如果你熟悉业务流程,就很容易看懂代码为什么这样做,而看不懂的骚逻辑,要么是大神,要么是他绕圈子了。

游测领域,自从有了项目源码权限后,出现 BUG 如果理解够深入的话实际上是可以自己 debug 出来具体是什么地方出问题,而且有几个好处:
1.基于源码理解功能实现原理
2.项目就是最好的学习经验,多看源码有助于个人发展
3.不会被开发看扁,拥有更大的话语权(体现在你提的 BUG 不会被回怼)

tester 回复

同意,不是不行,只是没必要,没时间。调试代码这个本来就是开发的职责。况且一旦你开始做了,后面就会变成你该做了,会无情的压榨你的时间。

没真正的学习过 java,之前引入 agiletc 时,由于是没有权限控制,以及获取用户信息等等功能,被逼营业,通过 web 的 react 代码,理解一遍功能,再通过 web 上所用的接口,慢慢去理解,过程大概 1-2 天的样子,然后添加了这部分功能,学习与拷贝现成的代码。

目前,能够写写 python,golang,nodejs,vue,react,java。除了 python 是深入学习过,其他基本上临时上马,当我第一次看到开发的 golang 代码时,卧槽,原来看得懂,并没 c++ 那样难以理解,以及各种符号,然后慢慢学习了,并在 locust 压测中,使用 golang 来开发压测脚本,当然最重要的是 boomer 开源。哈哈哈

我认为,需要掌握到什么程度的话,除了看得懂外,还可以使用该语言做一些事情,这里面又涉及到,为什么要用这个语言 (说明充分理解了)。

先回答楼主原先的疑问:

Python 不足以支持问题排查时,Java 要学习到什么程度,才能进行接口调式和问题排查,能够看的懂代码

如果只是常规的 web 前后端代码,如果要读懂并且能调试(先不说要自己实现编码吧),其实难度一般,Java 基本语法熟悉了,业务使用的框架(一般也就是 spring 全家桶吧)的一些基本用法,或者业务实现中你看到的用法都了解了,这个程度就够了。

其实不需要你对框架、对 Java 底层有多少了解,那些都是唬人的,就好比你要玩游戏玩得很厉害并不需要你去自己开发游戏一个道理。编程语言、框架都是工具,用法知道了,如果只是实现常规需求,其实大多数是熟练度的问题,深入编程语言虚拟机、框架原理什么的,只是追求更极致更优雅的编码实现。所以不要给自己设限,把它假想得很可怕。

来自一个 Java 大佬的嘲讽:我们之前有个测试,是会调式前后端代码的,直接告诉我们哪里写错了,这样就能很快解决问题

不少同学对这个开发都是负面态度,不评价这个开发的观点。既然开发不排斥你去调试他们的代码,那你就上呗(以前我对接的业务是公司的安全业务,很多代码权限都不给测试开的,我想看都没得看)。

web 后端代码本身阅读理解难度就低,逻辑清晰,多数就跟你在 web 前端操作获得的直接反馈很接近,调试也方便。这是一个学习机会,也是一个增加个人影响力的机会,可遇不可求。如果不是常规 web 后端,而是一些服务后端,也是一样,就自己多花些心思啃一啃就好了。

先尝试不去管架构,先从业务逻辑代码开始,会简单的多。

我会开发就不搞测试了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册