谢邀。本文谢绝转载。
@上官人 @曲晓峰和
@酱油瓶答的都很有道理。尤其是曲晓峰从软件开发模式的角度来回答,角度很赞。我之前所在的测试团队经历了从瀑布式开发到敏捷式开发的转变,可是我看到这题的时候居然完全没想到这个point,汗颜不已。
看了一下题主的描述,问题集中在两个:
1、什么是软件测试?
2、测试工程师们总是在不断游弋在产品经理和开发之间,拿着产品经理的要求找开发的毛病,却很少有人真正意义上给出自己对这个产品的质量建议,测试究竟是什么意思?
第二问可以说是第一问的补充。这里我不自量力,想要再回答一下。
首先说的是,曲晓峰的答案说的很好,敏捷开发中测试的地位是要高于瀑布开发的。在敏捷开发中,产品(PM)、开发(DEV)和测试(QA) 三个团队对于开发流程都十分重要,缺一不可,真真正正的三足鼎立。尤其是敏捷开发中经常需要开讨论会议(基本每天一次),测试、产品和开发三个团队的交流沟通远远大于瀑布式开发。而且敏捷开发对于测试来说一个重要的意义就是,比起瀑布式开发,测试在软件开发过程中的参与感更强,测试对于产品的功能逻辑(来源于产品团队)和代码底层逻辑(来源于开发团队)了解的更加深入透彻,测试的质量也更高。
那么回到答主的原问题
什么是软件测试?
软件测试的英文缩写是QA。全称是QUALITY ASSURANCE,翻译成中文就是 质量保证。软件测试的工作说穿了就是这么几个字:保证软件产品质量。
至于如何保证软件产品质量,光看百度百科的定义理解的肯定不够透彻。我从个人的工作经验总结,主要有这三个大的方面。(个人总结,若有疏漏,欢迎各位大牛指正讨论~)
A. 发现软件问题
这个很好理解吧?就是通常所说的提bug。至于什么是bug?是不是bug谁说了算?这就需要QA和产品(PM)、开发(DEV)去沟通。QA和PM沟通产品功能的逻辑:PM希望功能做出什么效果?和DEV沟通产品代码的逻辑:DEV是如何实现这个功能的?有了这两大尚方宝剑,不符合功能逻辑、代码逻辑存在问题,就都是bug(bug当然不指这两种)。这时是不是bug当然是QA说了算。DEV和PM说不是bug?那好,QA翻出聊天记录,DEV和PM分分钟打脸。
所以题主发现:「测试工程师们总是在不断游弋在产品经理和开发之间」,大抵就是如此。QA和DEV、PM沟通,绝不是扯皮、没地位、和稀泥。恰恰相反,QA和DEV、PM的沟通有助于他们发现bug。
B. 确认软件质量
软件测试不仅仅是为了挑错。也是要确认保证软件功能的好用。一条case执行通过了,没有发现bug,并不说明这条case没意义。QA团队测试一轮,是要拿出一个report的。大意是这样:软件版本1.0.0.0,有5个功能ABCDE,功能ABC好使,没问题。功能D 还有10个bug,开发计划下个版本解决,不影响功能。功能E问题较多,还有4个影响功能的bug没有解决, 暂时无法上线。有了这样的report,才能决定迭代是否结束、开发是否完成、产品是否发布。
有人试过这东西好使,产品卖着也踏实,是不?
C. 提高软件体验
在客户之前,测试团队基本上是第一个使用软件的人。他们的使用感受很有可能就是用户的软件体验。有些设计虽然逻辑上没问题,但是用着就是别扭;有些case干脆就是PM和DEV之前没考虑到的盲点,PM和DEV拿不出合理的期望结果;还有的时候QA就觉得这个操作换一种处理方式更方便……这种情况就需要QA把问题提出来,大家凑在一起讨论下(或者是PM拍板决定下),究竟需要怎么做,期望结果应该如何合理。这些问题和bug不一样,很多时候就是feeling的事,比如一个选项究竟是下拉框还是check box,点关闭时究竟是最小化托盘还是完全退出……同样的操作,有些QA可能觉得合理,有些QA可能觉得不舒服,还有些QA可能觉得有问题。这完全是看QA个人的软件使用习惯而来的。这时候才是真真考验QA的时候。
别的团队不敢说,起码我所在的公司,QA遇到这种问题,就是PM、DEV三方坐下来一起讨论了。希望最终能拿出一个最合理,最人性化的解决方案,让客户用着、点着,不那么别扭。
这种问题,我们一般不叫bug。有时候是improvement,有时候是new feature。或者PM在迭代中干脆就改了产品功能逻辑——敏捷开发就这点方便~
说了这么多,题主再结合酱油瓶的答案看下,就会发现,一般的QA往往只局限于A和B类的工作,而能做到C类工作的,基本都是懂产品、懂代码(起码是伪代码)、工作经验丰富、资深电脑用户的骨干QA。(曲晓峰提到的自动化测试,主要是A和B类。C类很难用自动化测试来实现。)
以上说的只是QA的主要测试工作的目的。QA的工作还包括很多,设计测试用例、编写功能文档、整理测试报告、搭建测试环境等等等等……和题主问题关系不大,就不一一讨论了。
总结一下,QA不是拿着PM的要求找DEV的毛病,也不是不提软件的质量建议。会这样做的QA,才刚刚起步,离做好QA还远的很。软件测试虽然门槛低,但不代表它没什么技术性,相反,软件测试入门简单,但是做好不简单。