做软件测试需要懂代码吗?
随着大数据、机器学习时代的到来,不少人有了“测试不需要懂代码,那我就试试”的想法。这就引发了一系列疑问:不懂代码可以做测试吗?测试人员到底需不需要懂代码?测试人员需要写代码吗?
其实,在软件测试初级阶段,测试人员确实不需要懂代码。但如果想要追求月薪20k、30k,接口、自动化等是避免不了的,这就必然涉及到了代码层面。
正如《mob编程指南》的作者Llewellyn Falco回应“QA工程师应该学习编码吗”这个问题时,曾说:“每个人都应该知道如何编写代码,这就像阅读和写作。你可能没有写过书,但你应该知道如何阅读和写作。”
一、软件测试的Q&A
作为测试人员,我们可以一起考虑几个问题。
问题一:哪些测试需要懂代码?
软件测试人员会使用各种测试技术来执行此操作,包括手动测试、自动测试等。不同的测试策略要求不同的测试技术,我列举了一部分:
问题二:软件测试的门槛高吗?
近年来,经济下行加速功能测试转向自动化测试,软件测试的求职门槛确确实在提高。
研发流行敏捷开发,运维部署逐渐自动化,版本高速迭代。这意味着过去“点点点”的手动测试已经跟不上互联网行业产品的更新迭代速度,已经逐渐被自动化测试技术接管。原本手动测试需要10个人完成的工作量,现在的自动化测试团队只需要不到5个人就能完成。
当前各企业正在想尽办法建设自动化测试体系,实现手动测试到自动化测试的升级,通过提高测试流程的有效性和效率来消除测试瓶颈。因此,企业对测试人员的要求已经基本上过渡到了自动化测试要求。除了要懂功能测试,还需要懂代码、接口自动化、UI自动化等。
在求职门槛大大提高的情况下,测试人员仅凭借手动测试的技能,很难找到工作,也很难晋升。
问题三:不懂代码在实际工作中会出问题吗?
有一定的代码知识可以帮助测试人员更好地理解软件的内部逻辑,进而设计更有效的测试用例,但并非所有测试工作都需要深入理解代码。如果测试人员看不懂代码,实际工作会出现哪些问题?
(1)当测试人员无法准确解析代码时,报告的Bug描述可能含糊不清,导致开发人员难以复现问题或误解问题的严重性。即便是较为表面的错误,也可能被测试人员误判为关键缺陷。
(2)如果测试人员对开发知识掌握不足,可能会将有争议的问题错误地标记为Bug,或者提出的改进建议难以实施,且无法提供切实可行的解决方案。、
(3)在发现Bug时,若测试人员无法精确定位其根源,可能会导致与开发团队沟通成本增加。频繁的交流不仅浪费时间,过多的沟通也可能引发其他问题。因此,测试人员对开发知识的掌握显得尤为重要。
(4)缺乏开发知识可能会使测试人员在讨论Bug时处于劣势,面对开发人员的解释,如果测试人员不了解背后的技术细节,可能无法有效回应。
(5)在自动化测试、性能测试和项目管理等领域,对软件开发有深入的理解是必不可少的。设计高效的自动化测试框架、性能测试案例,或管理开发团队,都需要对软件开发有一定的掌握。
问题四:软件测试人员需要掌握什么技能?
除了沟通技巧、分析思维、团队协作等必备的软技能,软件测试人员又需要具备哪些硬技能:
(1)全面了解软件开发生命周期 (SDLC)
随着软件项目的复杂性不断增加,测试人员必须精通从规划和设计到部署和维护的每个阶段。这些知识使我们能够预测潜在问题,设计有效的测试策略,并确保测试活动与总体项目目标保持一致。
(2)熟练掌握自动化测试工具
自动化继续改变测试领域的游戏规则,熟练掌握自动化测试工具是我们测试人员的一项关键技能。掌握 Selenium、Appium、Jenkins、禅道ZTF等工具可让测试人员自动执行重复任务、增加测试覆盖率并提高效率。随着越来越多的组织采用 DevOps 和持续集成/持续部署 (CI/CD) 实践,能够将自动化测试集成到 CI/CD 管道中的测试人员将在加速产品发布并保持质量标准方面发挥重要作用。
(3)测试设计和执行方面的专业知识
测试设计和执行方面的专业知识仍然是软件测试人员的一项基本技能。在 2024 年,制定全面的测试计划、编写清晰简洁的测试用例并有效执行测试的能力比以往任何时候都更加重要。测试人员必须确保他们的测试是稳健的、可扩展的,并且能够有效地识别缺陷。那些擅长设计和执行模拟真实场景的测试的人将为开发可靠且用户友好的软件产品做出重大贡献。
(4)编程和脚本语言知识
熟悉Java、Python、PHP等语言使测试人员能够编写自动化测试、了解代码库并与开发人员更有效地协作。随着开发人员和测试人员之间的界限越来越模糊,具有编程技能的人可以参与单元测试、审查代码以查找潜在问题,甚至修复错误,从而提高软件的整体质量。
二、软件测试人员懂代码的好处
1. 可视化和测试
测试人员可以更好地可视化和理解应用程序背后的代码,从而帮助测试人员识别更多有用的测试用例。例如,软件测试人员知道某个页面元素正在使用 if/then 逻辑,他们能够确保测试该算法的两条路径。对于循环也是如此,众所周知,循环的终点通常是发生错误的地方,因此通过了解循环构造的逻辑,软件测试人员可以更准确地查看边界条件。
如今,随着越来越多的开发团队执行单元测试,白盒测试的实践变得越来越不重要;但测试人员仍然可以通过对代码的理解来了解应用程序的更细微的方面,并创建测试来提高测试覆盖率。
2. 自动化测试
懂代码的测试人员更容易创建自动化测试脚本。这是持续集成 (CI) 的必需品,甚至 UI、API 和性能测试都可以自动化。这有助于加快测试周期,并使测试人员能够专注于探索性测试以发现新问题。
使用 Selenium IDE等软件测试工具可以轻松执行自动化测试。这类软件测试工具所提供的GUI录制回放功能,能够达到提高测试用例复用率的目的。但这些好处是有限,它们无法自动执行某些测试的步骤,并且在应用程序更新时很容易崩溃,如Selenium默认不提供测试报告和错误恢复机制。
3. 与开发人员更好地沟通
懂代码的测试人员能够与开发人员更好地沟通,因为他们能够理解开发人员的思维方式和代码逻辑。这有助于他们更精确地报告Bug,深入讨论问题的解决方案,并减少误解和沟通障碍。同时,懂代码的测试人员能够更快地理解新功能或变更,设计出有效的测试用例,提高测试效率。
三、软件测试人员共勉
自动化测试是趋势,只会做手动测试的人未来会逐渐失去竞争力。测试专家陈霁在《测试人员路在何方》中也提到了“做测试必须会写代码。如果不懂编程,从事测试工作是非常吃亏的。”具体内容,我就不多讲了,大家有兴趣可以看一下这个视频。
最后,我们测试人员共勉:
大多数人都会觉得你那么努力或做这些稀奇古怪的事情干什么,他们都觉得你像个“异类”。请耐住寂寞往前走,然后你会在路上碰到跟你志同道合的这些“异类”,当你们在一起一握手,你会发觉,原来我终于走到了别人走不到的路。
*参考资料:Brian Borg: Should QA Testers Be Able to Read Code?