开发和测试的囚徒困境

简介: 探讨开发与测试之间困境相关内容

引言

作为一名测试人员,每天工作中接触最多的除了产品就是开发,而如何与开发人员和平相处是每个测试都在讨论的终极话题。相信很多测试在面试时都被面试官问到:“你是如何和开发人员相(si)处(bi)的?和开发之间的关系是怎样的?遇到开发不认可的bug应该如何处理?”

一、测试与开发之间的困境

要说起测试人员和开发人员之间的博弈,有一个特别具有代表性的例子—囚徒困境。此故事讲的是,两个嫌疑犯作案后被警察抓住,分别关在不同房间里审讯。警察知道二人有罪,但是缺乏足够的证据。因此警察告诉二人:“如果两人都沉默,各判刑2年;如果两人都认罪,各判刑5年;如果出卖同伴,自己获得自由,对方判刑10年。”于是,每个囚徒都面临两种选择:认罪或沉默。从自身利益考虑,认罪比沉默的好。但就如下图所示,两个人互相出卖,他们的结果就是一起服刑5年。但如果两人从整体利益出发、为对方考虑下,两人都沉默各判刑2年,显然这个结果才是对大家最好的。

看完这个案例有没有觉得测试与开发之间的关系很像上图的囚徒困境呢?在整个项目中,开发和测试的关系其实不是对立的,测试和开发是一个团队,都朝着统一的目标:让软件更完美而努力。但在实际工作中,为什么开发和测试却搞的剑拔弩张、针锋相对呢?

二、困境的起源

总结了一下经常出现摩擦的场景:

  • 关于流程:提测单里不写测试范围或者寥寥几句跟没写一样!系统中提交的bug开发都不及时处理,也不看测试邮件!
  • 关于标准:为什么开发写完代码都不自测就扔给我们?测试提的bug不能复现、优先级还设置为major!
  • 关于资源:谁在测试环境调试?谁动了我们的测试数据?我们开发环境没数据,不用你们的用谁的?
  • 关于态度:测试什么都不懂....跟你说不清楚用户根本不可能这样用,你们整来整去净瞎耽误工夫你们安排计划时根本不考虑测试,三天,三天怎么可能测得完!

在这些情况下,即使测试是90后肤白貌美大长腿的小姐姐,开发是技术大牛、性情温和的小哥哥,也难免双方不争吵起来,以至于影响了项目进度和工作效率。

三、解决办法

那么如何打破开发与测试之间的囚徒困境、避免无谓的争吵呢,下面结合自身的工作经历给出几点建议:

  1. 与开发约定统一的项目流程及规范,比如目前工作中使用的奇效项目管理平台,就涵盖了需求单、提测单、bug管理、测试报告等功能,产品和开发同学均在此系统中创建需求、新建提测单,测试也在系统中录入bug、创建测试报告等,提高了工作效率、降低了沟通成本;另外,如果有紧急的问题待开发解决,可以迈开腿当面与开发沟通,开发认真写bug的时候有可能不会查看邮件;
  2. 关于自测问题,不仅与开发自身代码质量的要求有关、也跟团队的管理制度有关。首先leader应该明确规定开发自测后才可提测,若测试因自测不通过打回可以有相应的处理措施;其次,开发自测至少应该保证主流程、前后端交互、接口均正常,这样也减少了提测打回、影响排期的事情发生。
  3. 测试在报告问题时要尽量描述清楚,操作步骤、测试数据、问题出现的关键点都详细记录下来,帮助开发尽快解决问题;对于不容易复现的问题,可以保留现场让开发过来现场分析,这样既可以让开发根据目前情况查原因、也可以避免今后不复现时开发抵赖不承认此问题; 另外开发和测试对于bug严重级别产生争议时,可以与产品参与讨论,是否是用户很在意的点,如果是,就可以让开发解决啦。
  4. 关于资源问题,开发和测试难免有资源的冲突,但是让工作卡在环境上,是最影响项目进度的事情。开发在使用测试环境配置和数据时,征询测试人员的许可,哪些可用、哪些不可用,避免影响测试;另外,也可以在技术上解,比如使用docker让开发测试环境一致又互不影响,也不会有“这段代码在我机器上没问题”情况;
  5. 关于态度,测试和开发同在一个项目中,都有着共同明确的目标,这个目标是大家的。多站在对方的角度考虑问题,开发不应该在技术优势上藐视测试,测试不能因开发态度反而对开发有意见,这样只会嫌远丛生,影响大局。端正态度对事不对人,积极沟通解决问题,让项目顺利上线。

四、写在最后

总之,在工作中不是仅仅把自己工作做好就结束了,大家是同一个团队的为了同样的目标努力。打破囚徒之境,“没有自我,只有大道”的原则在项目工作中同样适用,携手前进吧!

相关文章
|
13天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
110 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
53 2
|
3月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
315 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
2月前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
3月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
82 2
|
3月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
166 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
4月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
100 1
|
4月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。
|
5月前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
128 0