本帖最后由 草帽路飞UU 于 2019-6-18 11:05 编辑
软件测试职业发展的 A 面和 B 面
1.所谓的软件测试技术到底包含什么? 梅子:我先来从传统意义上来谈一下测试技术,主要就是测试分析,测试设计,测试管理,测试执行,自动化测试技术,专项测试技术,缺陷分析技术等。 Monkey:对于测试技术,这的确是个很好的话题。首先在这样一个快速变化的时代,我们应该勇于拥抱变化。我觉得之所以现在测试行业很多测试人员会困惑于测试技术很大一部分原因就在于很多人冥顽不灵,不愿意接受新鲜的事物和变化。 在我看来,抛开以前书本上的死知识,软件测试技术现在包含两部分: - 我们自己认为的软件测试技术
- 别人认为测试应该学会的技术
那我们一个一个来讲吧,先说我们自己认为的软件测试技术。软件测试用例设计方法,软件测试思维,软件测试策略等等,这些其实我不想在这里浪费篇章去说明这些,为什么?因为这些并无法真正量化,也很难去考评,在现实的行业中也无法给你带来直接的升职加薪,所以我认为就算我写了大家也没有兴趣看。 那么别人认为测试理论上会的又是什么呢? - 点点点,很重要
- 所谓的软件测试思维,其实并不是那么的重要
- 编程能力,最好什么都会,很重要
- 很强的沟通交流能力,很重要
- 很强的业务理解能力,很重要
- 能兼职产品经理,项目经理等,很重要
- 质量意识,最好能够感染整个团队和企业,很重要
- 加班能力,很重要
这些为什么有的很重要,因为你跳槽需要,KPI考评的时候需要,这些就足够了,不是么? 我们回到这个问题上来看吧,就如同很多时候我们觉得自己做的怎么样并不重要,重要的是大家普遍到底觉得你是怎么样的。加强对于“我们自己认为的软件测试技术”的学习这是我们测试人员的情怀,但加强对于“别人认为测试应该学会的技术”的学习这是我们测试人员为了找到一份不错的工作,为了生存而需要面对的,其实就那么简单。 梅子:刚才monkey讲到了不那么重要的测试思维,让我又重新去思考到底什么是测试思维,以及测试思维是如何影响我的。 我对测试思维的认识主要有2个阶段: 第一阶段:我认为测试思维就是测试如何去分析被测对象的视角,可以概括为测试类型(性能测试、可靠性测试、兼容性测试这种)和功能交互分析(就是把很多功能放在一起考虑)。这个测试思维能够帮我系统的分析被测对象,让我可以很容易的就比别人发现更多产品的问题,而且问题还蛮有价值的。我还发现,这个思路还可以用在需求的评审,设计的评审上,可以帮我快速找到需求或者说设计考虑得不周全的地方,这让我慢慢的赢得了开发的尊重,他们会主动找我讨论方案,我后来才知道这就叫产品的失效规律,也是我当时对于产品团队的独特价值——缺陷预防。 第二阶段:慢慢的我发现我真的没有必要对所有被测对象都进行那么全面的分析,有的功能特性好像不怎么测试也可以,有些功能测试却真的需要非常深入细致的测试,并且哪些需要详细测试,哪些不需要详细测试是动态变化的,我认为测试的核心,就是要在项目中把握这种动态性,有策略的进行测试。我开始注意项目的成本,思考如何用最小的成本来获得最好的测试效果。我发现但考虑测试,策略无法做好,很自然的,我开始全局,端到端的去考虑策略,慢慢的我发现我可以做项目经理,可以做一些质量和流程方面的工作了。我觉得测试思维也许并不应该只是狭义的理解为测试中才需要考虑的思维,测试思维是一种探索式的思路,它不仅适合于测试,也适合于产品的其他角色。我觉得他重要,是因为我们需要有一种思考方式,来指导我们的行为,只要你在团队中,你的思考方式的演进,都可以帮助你更好的服务你的团队,也能给你带来更多的机会。 2.为什么说测试需要开发技能,测试策略和开发 技能到底哪个重要?梅子:对测试来说,开发技能是基础。我特别不喜欢”代码能力不行就去做测试”这样的论调,别的不说,如果测试一点代码能力都没有,你该要怎么和开发沟通?完全不在一个频道上又何谈协做。 但我也不认为,开发技能是测试的核心,我认为测试策略才是测试的核心。 无论产品开发的方式如何演进,用户对产品质量的期望都是客观存在的。质量=符合要求,而探索和评估质量最有效的方式就是测试,20年前如此,20年后还是如此。对被测对象的准确把握,是探索产品迷宫的罗盘,关键因素包括代码复杂度,开发的技能和经验准备度,需求的质量等。有了这些,就可以判断风险的所在,在把握失效规律和失效影响的前提下,有的放矢的来开展各种测试活动。而实际的情况却是,我们太缺少对被测对象的分析和思考,这让我们做了很多看起来必要实际却很低效的事情。 举一个回归测试的例子。如果开发修改问题改得非常好,我们的bug 99%都可以回归通过,那么我认为测试没有必要再做回归测试,因为投入产出比非常小。我们可以这样算一笔账,假设一个周期为两个月的产品有200个bug,测试人员一天可以验证10个bug,这就是20人天的工作量,这还不算回归测试中的测试设计或者是发散测试的工作量。我们完全可以把这个时间放在测试其他的更值得测试的地方,或者干脆把发布周期提前一周又为何不可呢。 再举一个自动化的例子。某测试团队加班加点把某个功能接口全部自动化了,大概有1000多个自动化脚本,运行却只发现了2个问题,后面反复运行都再也没有发现过问题了。换句话说,上面提到的这部分系统,可能本来就是不太需要测试的系统,就算是完美的回归流程、测试设计、自动化测试,意义又有多大呢? 所以对相对于自动化测试,测试设计,流程等相对固定的东西之外,测试还需要一个可以审时度势,动态的分析和调整的技术,让测试可以聪明的工作,关键是,我们要能意识到,测试最核心的东西是动态的,是和整个研发过程和市场定位紧密捆绑的。不管测试的竞争力如何变化的,唯一不变的是我们的应对原则:根据被测对象和测试团队制定合适的测试策略。 所以,我个人认为,测试策略是测试技术中最核心的部分。测试,简单来说就是,测什么和怎么测,这都是策略的范畴。相比自动化、工具、测试设计等,测试策略往往更能更举足轻重地影响测试的质量和效率——测什么和怎么测决定了质量,实际也决定了效率。如果能在深入分析的基础上大幅度减少测试用例,测试效率提升一定比自动化还高。然后再对最值得自动化的部分进行自动化,而不是为了自动化而自动化,测试效率又会大幅度提高。实际上,系统越来越复杂,我们总有分析不清楚的时候,如果自动化平台足够强大,我们多测试一些也没有关系,可以避免一些低级遗漏。所以,策略是重要的,但是毕竟是基于经验的,总会有不完善的地方,工具和自动化可以很好的补充。测试还没有达到科学或者工程定量的程度,但也不是只有少数人才会的艺术,而是一门基于经验,可复制性的工艺学科,只是还没有达到可以给出明确标准的批量复制程度。也正是因为如此,才更需要我们去做深入的思考和分析。 Monkey:这个的确是个好问题,但我觉得很多会问这个问题的主要问题在于 - 自己根本就没有怎么做过测试,跟风问题
- 对测试策略的理解太浅
在我看来测试策略其实已经是一个很高等级的词汇了,能做到这个根本就是屈指可数,其根本就和所谓的开发技能不在一个水平面上,所以不能去做一定的对比。行业中很多次拿出来对比在我看来就是大家的理解太过浅层次。 拓展开来这里先说测试用例设计方法,现在实际项目中一板一眼的根据设计方法去设计的应该已经是不存在的了,测试用例的设计方法更多的是为了培养测试人员的测试思维,如何通过一些总结出来的方法去测试产品。这也是作为一个测试人员最最基本要明白的。 其次就来讨论下开发技能,这里的开发技能更多的其实指的就是看代码能力和写代码能力,现在行业里基本上都是考核写代码能力了。我们撇开所谓的自动化(因为在我看来,很多测试做的最多只不过是半自动化,远远达不到自动化的程度)和测试工具来讲,我们要了解一个复杂的项目的时候必须去深入了解其技术设计和实现,那么对于一个测试人员的研发能力就有着很高的要求。无论是代码能力还是架构思维都是为了能够更快的更准确的去理解被测对象打下扎实基础的,从而才能够制定出正确的测试策略。所以从我的理解上来讲,测试人员越往上走就需要越强的研发技能,否则只会依赖于PRD或者与研发鸡同鸭讲,最终只了解产品的皮毛。 最后来谈下测试策略吧,在我理解的测试策略并不是你掌握了一个很厉害的用例设计方法或者看看几个PRD,会写几行代码就能够制定出来的,测试人员制定一个真正的测试策略应该至少满足以下几点: - 丰富的项目经验
- 拥有不错的代码能力和架构思维
- 经历过大项目复杂业务,对业务有深入的理解
- 深入正确的理解PRD和项目架构
- 了解项目在企业中的定位
- 了解项目需要哪些团队来合作
- 测试团队目前资源分配的现状
- 等等
只有一个测试人员同时了解这些的情况才可能真正的去制定所谓的测试策略,所以无论我们说的研发技能还是测试用例设计方法还是沟通交流能力等等这一切都是制定测试策略的基础。对测试人员真正重要的就现在而言真的就是一个综合的能力,而不是单独的某一个技能。
|