测试人员掌握代码的重要性

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在测试中心做了一年的测试,从一个对业务不熟悉的小白到能独立掌握一个两个或者更多业务;从一个连ORACLE都没有接触过,连LINUX都不知道是什么东西小白到能在平时测试时稍微写写存储过程,写写shell脚本提高测试效率。

在测试中心做了一年的测试,从一个对业务不熟悉的小白到能独立掌握一个两个或者更多业务;从一个连ORACLE都没有接触过,连LINUX都不知道是什么东西小白到能在平时测试时稍微写写存储过程,写写shell脚本提高测试效率。点点滴滴的成长都使得自己在测试的发展上继续保持兴趣。想想当初点开界面左点点,右点点,程序偶尔出现BUG,自己便会兴奋地记录QC,截图加日志给开发排查,当时想想可能还是蛮有成就感的,毕竟程序在自己的手中得到了提升。

我相信大家都是慢慢成长过来的。但时间久了,就比如说一年这个时间点,我们不难发现,我们和同时进来的开发同事的差别在哪里,我们对程序的代码逻辑会比较陌生。当然,毕竟两个职位的职能是不一样的。但是,这里我还是想说,测试其实也是很有必要掌握代码,理解程序的代码逻辑。我也经常和身边的测试小伙伴强调,平时测修改单的时候,也可以稍微关注下开发人员修改的代码。

上周周末,我和部门的测试经理一起对HT客户的现场问题做了一次复现和测试。这里先说明一下,这个问题其实在之前的版本上已经发布过临时补丁进行修正,但近期又反馈回来说没有修正正确。

OK,那我先描述一下问题。具体如下,系统中存在一张记录持仓的表TUNITSTOCK,由于这张表存在过多的0持仓的数据,影响了客户的使用,在某次修 改中增加了一个功能“日初清除0持仓”,而这个功能在零持仓的数据达到1000条以上时,会重建TUNITSTOCK的一个唯一索引。问题就出现在这里, 之前发布的临时补丁,在重建索引时,只是产生了一个NORMAL类型的索引,而不是UNIQUE类型的索引。而程序又正好莫名其妙的产生了一条原本不会产生的错误数据(原先不会产生,是因为UNIQUE类型的索引),这就导致了日终归档的时候发生了主键冲突。

那作为测试,首先第一点肯定是要重现问题了。这里也就会引申出“测试掌握代码必要性”。

 

第一点:提升测试效率

有时候,客户返回的信息并不是很完善,根据客户提供的信息我们不一定能成功复现出问题。但如果了解代码逻辑,就像这个清除0持仓的功能,我们知道它是在一个存储过程中,我们便会去找它进入“清除0持仓,重建索引”的匹配条件。这时候找到匹配条件,只要将测试数据一一匹配就能重现问题。

并且掌握代码,就比如一些简单的sql。也非常有利于批量测试数据的生成。依旧是这个例子,我们需要有1000以上的0持仓,为了不使TUNITSTOCK产生主键冲突,需要某些字段不一致,但又要和基础数据相互匹配。这时候笛卡尔积的运用,select t.vc_inter_code,a.* from tstockinfo t,tunitstock a where t.c_market_no='1' and t.c_stock_type in ('1','2','3')

and a.c_market_no='1' and a.l=1 and a.l_unit_id=15;便可以很好的解决问题。所以有时候小学问加小技巧是十分管用的。

测试数据准备完成之后,就是要走流程使程序按照理想的预设出错。但对于当时我们测试的软件,流程非常耗时。如果按部就班走流程,就需要好几个小时,如果再加上后续测试修复,那真的可以睡在公司了。

所以,在知道程序一些实现逻辑上,我们将很多不影响这个测试的流程全部关闭。力求最快重现问题。并且我们知道这个是因为某一个存储过程造成的,我们也就直接在PLSQL中 test了这个存储过程,顺利的重现了问题。

 

第二点:定位问题

对于一些简单的问题,我相信在掌握了代码之后,我们自己在通过日志跟代码也是可以很轻易的定位到代码的错误地方。而不是,只是将错误的截图和日志直接扔给开发,让他们去排查。长而久之,会让他们觉得随便从一个地方拉一个人过来都是可以进行软件测试行业的。

这里我依旧以上面的例子为例,像上面描述,当0持仓达到了1000以上时,索引会重建。错误版本是从unique重建成为了normal。当我们把正确的代码替换后,原本的就是unique,重建后还是unique类型的索引,这个时候我们必须要自己确定这个索引是没有重建前的,还是重建后的。

这段代码开发并没有进行日志的输出,那为了确定程序是否修正,我们就必须要自己进行日志打印。这时候掌握一点程序日志输出的代码就很好用了。(之前测试人员就是因为观察到清除0持仓的前后索引类型都是unique,而没有关注到这个unique是否是重建的,而导致再次遗漏)。

第三点:清晰程序变动

其实这个0持仓清除,重建索引的修改是非常简单的。就是把原先create index修改成了create unique index。如果我们测试时候有关注代码的变动,就会发现修改的代码中还是没有添加unique这个关键字段,那我相信这个问题就不会再一次的遗漏出去。

时常关注修改单代码的,也可以很好的避免测试没有测试全面,出现遗漏的情况。也可以预防某些开发不正规递交修改单,修改单描述修改A,但代码其实修改了A和B。

第四点:提升自我能力和测试形象

经常性的关注程序代码逻辑,可以有效地提高自身代码水平和思维方式。为之后性能测试,安全测试提供支撑,例如自己写写测试工具等。

当有了比较好的代码能力,和开发沟通会更加顺畅,理解开发的设计和实现。

当然掌握代码不只以上说的几点好处,总之就是一句话,掌握代码对于测试如虎添翼。

作者:卢凯



作者:恒生开发者社区
链接:http://www.jianshu.com/p/26f7c088bdb8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
424 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
305 1
|
3月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
414 0
|
1月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
2月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
4月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
207 0
|
5月前
|
测试技术 Go 开发者
如何为 gRPC Server 编写本地测试代码
本文介绍了如何使用 Go 语言中的 gRPC 测试工具 **bufconn**,通过内存连接实现 gRPC Server 的本地测试,避免端口冲突和外部依赖。结合示例代码,讲解了初始化内存监听、自定义拨号器及编写测试用例的完整流程,并借助断言库提升测试可读性与准确性。适用于单元及集成测试,助力高效开发。
105 1
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
7月前
|
存储 jenkins 测试技术
Apipost自动化测试:零代码!3步搞定!
传统手动测试耗时低效且易遗漏,全球Top 10科技公司中90%已转向自动化测试。Apipost无需代码,三步实现全流程自动化测试,支持小白快速上手。功能涵盖接口测试、性能压测与数据驱动,并提供动态数据提取、CICD集成等优势,助力高效测试全场景覆盖。通过拖拽编排、一键CLI生成,无缝对接Jenkins、GitHub Actions,提升测试效率与准确性。
581 11