软技能实际上是指那些“不易看见的技能”,是一个人“激发自己潜能和通过赢得他人认可和合作放大自己的资源,以获得超越自身独立能力的更大成功的技能”的总和。
软技能其实是情商 EQ(Emotional Intelligency Quotient)的社会学术语,它由一系列能够反映个人特质的要素组成,这些要素包括一个人的人格特质、社交能力、沟通能力、语言能力、个人行为习惯、待人友善、积极乐观等。软技能与硬技能(那些作为工作硬性要求并能够部分反映一个人智商的能力)是互补的。软技能(情商)可在一个组织的成功中扮演非常重要的角色。总的来说,软技能一方面体现在工作和生活中解决问题、处理问题的能力;另一方面体现在通过赢得他人认可和合作,放大本人资源以获取更大成功的能力。
测试人员在软件开发生命周期中,除了独立完成测试任务以外,还需要和项目的不同利益相关者进行合作,包括项目经理、开发人员或者用户等。测试人员需要向项目经理/测试经理反馈测试进度、产品质量等信息,同时还需要从项目经理/测试经理处获得项目的进展和状态,例如:项目内容或进度的变更。在测试过程中,无论是提交缺陷还是文档评审,测试人员都离不开和开发人员的合作和沟通。测试人员还可能需要从客户那里了解用户是如何使用产品的,或者因为产品的质量问题,从用户那里得到反馈甚至抱怨。因此,在复杂的测试工作环境中,测试人员除了必备的专业知识和测试技能以外,还需要具备一定的软技能。下面介绍测试人员在测试过程中需要具备的软技能。
发现缺陷是测试过程中的主要目的之一,因此,测试人员对被测产品要有怀疑精神,即怀疑测试对象存在缺陷或者是无法正常工作的。很难想象,缺乏怀疑精神的测试人员能够有效地发现软件产品中的缺陷,从而达到尽量多地发现缺陷这样的目标。在静态测试过程中(例如:评审),无论是系统的需求规格说明还是设计规格说明,测试人员都应该以怀疑的态度去对它们进行分析和评估;在动态测试过程中,也同样需要怀疑精神,这样才能更有效地发现缺陷。同时,怀疑精神不仅仅适用于开发活动的交付物上,同样也适用于测试团队的交付物上,例如:对于测试团队设计的测试用例,也不能盲目相信它们不会存在错误和缺陷,这些测试用例同样需要经过项目利益相关者的评审,例如:开发人员或客户,在测试执行的时候,发现实际结果和预期结果不一致的时候,首先需要确保测试用例是否正确,同时确保测试执行的过程、数据、操作等没有问题,然后确认是否是测试对象没有实现规格说明中要求的功能或者不一致,这都需要测试人员具有怀疑精神。如图 1:软件测试人员职业能力框架图。
图 1. 软件测试员职业能力框架图
好奇心是人们希望自己能知道或了解更多事物的不满足心态。好奇心不仅是要对某一事物感到疑惑和好奇,还要继续思索以求明白事情的真相,所以好奇心是创造的出发点、动机和推动力,也是产生无穷毅力和耐心的源泉。测试人员尤其是参与集成测试和系统测试的人员需要了解很多知识,他们不仅要掌握软件系统的多个功能模块,甚至是整个系统的需求和设计,同时还要从用户的角度思考系统的使用方式。如果测试人员只关注很小范围内的信息或知识,那么他不会成为一名优秀的测试人员。测试人员对整个产品和用户环境要充满好奇心,才能驱使自己不断地学习和进步,掌握更全面的知识。
另外,除了怀疑精神,好奇心也是测试人员找到更多缺陷的基础。当测试人员在测试软件系统的过程中,碰到了一个异常的系统表现行为,对于有好奇心的测试人员而言,他会深入研究为什么会出现异常行为,并通过不断地分析和探索,找到其中的原因,例如:由于软件产品中存在的隐秘缺陷,在偶然触发的情况下导致了这样的异常行为。而对于没有好奇心的测试人员,可能就会遗漏了这样的缺陷。
创新能力是运用知识和理论,在科学、艺术、技术和各种实践活动领域中不断提供具有经济价值、社会价值、生态价值的新思想、新理论、新方法和新发明的能力。创新能力能够根据已经存在的基础事物来创造一些新的特别的元素。创新能力可以通过一些好的实践来进行提高。在日常工作中,对问题的思考角度能够影响一个人的创新能力,当出现问题的时候,要尝试从不同的角度来分析问题,这样才能创造性地解决问题。还有一些好的习惯都有利于提高创新能力。当人处于比较放松的状态下、全面阅读尽可能多的知识、认为每个问题都是特别的、推迟做出决定和对新奇的想法保持开放的态度都有助于创新能力的提高。创新同时也意味着要打破常规,避免重复性的思考。想要获得更好的创新能力,就不能害怕尝试新鲜事物,也不要对一个想法迅速做出肯定或否定的判断。从测试计划一直到测试结束活动,整个测试过程将会遇到各种各样的问题,这个时候就需要测试人员充分应用自己的创新能力,创造性地解决这些问题,以帮助项目获得更大的成功。
分析能力是指把一件事情、一种现象、一个概念分成较简单的组成部分,找出这些部分的本质属性和彼此之间的关系单独进行剖析、分辨、观察和研究的一种能力。随着软件系统和产品功能的不断增强,软件产品变得越来越复杂,这就使得测试活动也变得越来越困难,因此,对测试人员的分析能力要求也越来越高。测试过程是一个不断计划、分析和评估的过程,测试人员没有良好的分析能力,就无法高质量地完成测试任务,例如:测试计划和控制阶段,测试团队需要分析测试的范围、测试采用的技术和方法、测试的工作量、测试的风险等,根据测试过程中得到的信息和状态,分析计划和实际进度之间的偏差,调整测试资源、测试优先级和测试计划等;在测试分析和设计阶段,测试人员需要不断学习和了解被测试对象的测试依据文档(例如:需求规格说明),对被测试对象进行详细分析,确定如何采用测试计划中定义的测试技术和方法来设计相应的测试用例;在测试实现和执行阶段,根据测试执行过程中发现的失效,分析其失效的影响,并判断失效的严重程度和优先级,从而不断地调整测试资源的分配和测试任务的优先级。
软件开发一般被看做是建设性的活动,而软件测试常常在一定程度上被看成是破坏性的活动。但是软件测试的这种破坏性的活动并不是每次都能“破坏”成功的。在测试过程中经常出现这样的现象:尽管运行了很多的测试用例,但是没有在测试对象中发现任何的失效。这个时候,就要求测试人员具有足够的耐心。开发人员的重要输出是软件产品的代码,软件代码的数量会随着开发的深入持续不断地增长,这将极大地激发开发人员的成就感。但是测试人员不同,测试人员就像猎人一样,要经过漫长的“狩猎”过程才可能发现一个“猎物”。即使测试对象出现了异常行为,也需要测试人员经过耐心地分析和研究,才可能最终确定是否是缺陷。通常来说,测试对象的异常现象经常隐藏在大量的系统正常行为之中。因此,需要测试人员耐心检查各种数据、操作和系统表现行为,才能够发现其中的异常。
所谓沟通技巧,对软件测试者来说,是具有收集和发送信息的能力,能通过书写、口头与肢体语言的媒介,有效与明确地向他人表达自己的想法、感受与态度,亦能较快、正确地解读他人的信息,从而了解他人的想法、感受与态度。 沟通技能涉及许多方面,如简化运用语言、积极倾听、重视反馈、控制情绪等等。虽然拥有沟通技能并不意味着成为一个有效的软件测试者,但缺乏沟通技能又会使软件测试者遇到许多麻烦和障碍。测试并不是独立存在的,而是软件开生命周期中的重要组成部分。实际的软件项目通常是由各种不同角色的人合作完成的,这样就难免会遇到需要和他人合作完成一项任务的问题,这个时候沟通就很关键。尤其是在当今全球化程度越来越高的情况下,很多项目由位于世界各地的团队共同完成,沟通就更加重要。沟通的方式有很多,可以是面对面的交流、电话或 Email,也可以通过文档和缺陷报告来交流信息。测试人员在整个项目开发过程中可能需要和项目经理、开发人员或用户等多种角色进行交流,良好的沟通能力有利于测试活动的开展。
团队精神,在软件开发与测试周期过程中来说就是大局意识、协作精神和服务精神的集中体现。团队精神的基础是尊重个人的兴趣和成就。核心是协同合作,最高境界是全体成员的向心力、凝聚力,反映的是个体利益和整体利益的统一,并进而保证组织的高效率运转。随着社会的发展,社会的分工越来越细化,这同样适用于软件开发和软件测试,软件开发生命周期中的任务通常都需要通过团队来完成。团队并不是一群人的机械组合,真正的团队应该有共同的目标,其成员之间的行为相互依存和影响,并且团队成员之间能够很好地合作,从而追求集体的成功。团队是一个有机整体,团队成员除了具有独立完成工作的能力之外,同时还需要具有与他人合作共同完成工作的能力。团队的绩效源于团队成员个人的贡献,同时永远大于单个团队成员贡献的总和。团队精神是大局意识、协作精神和服务精神的集中体现。团队精神要求团队成员有统一的奋斗目标或价值观,而且需要相互信赖,需要正确而统一的企业文化理念的传递和灌输。团队精神强调的是组织内部成员间的合作态度,为了一个统一的目标,成员自觉地认同肩负的责任并愿意为此目标共同奉献。在测试人员的工作中,团队不仅是指测试人员之间应该有团队意识,作为项目的一分子,测试人员和开发人员也是一个团队。只有整个项目具备了团队精神,项目才能获得最终的成功。
测试活动充满了艰辛和挑战。测试人员只有始终保持积极的态度和工作热情,才能够出色地完成各种测试任务和接受各种挑战。没有激情的测试人员,只会满足于完成基本的测试任务;而充满激情的测试人员不仅能够完成基本测试任务,还能够用积极的态度思考测试过程中遇到的各种问题,努力寻找解决方案,创造性地解决这些问题。同时还可以积极地对自己进行反省,不断地寻找团队和自己的不足,从而进行持续的改进。
就总体而言,大多数开发人员对那些不懂技术的人有时或许持一种轻视的态度。一旦测试小组的某个成员做出了一个错误的断定,或者在没完全正确理解产品特性的基础上冒失的提出一个错误的软件缺陷,那么测试团队的可信度就会受到开发团队以及项目经理的挑战。测试人员必须既熟悉被测软件系统的原理、流程又要掌握一定的代码能力。既能读懂开发人员写的代码,同时也要能发现代码中存在的问题。
一个优秀的软件测试人员应该具备超强的记忆力。能够把之前遇到过的各种产品缺陷深入理解后,进行分类记忆存储。当在以后的测试中遇到与之前软件缺陷缺陷类似的软件缺陷时,从记忆深处快速挖掘出之前的软件缺陷,相互比较,找到该缺陷的根源。这一能力在测试过程中的价值是无法衡量的。因为许多新出现的问题和我们已经发现的问题相差无几。
同时干测试工作,尤其是经常用手工进行回归测试时,由于该测试已经在各个场景下跑了太多的次数,所以会让测试人员变得索然无味,同时很难调动测试人员的工作积极性,同时容易使你变得懒散。当测试人员是一个具有自我督促能力的人才能够使自己每天正常地工作。认真全面的执行每一条测试。
学习能力为智力结构中与学习密切相关的那一部分能力,主要包括理解力、记忆力、问题解决能力及评价能力。软件测试人员必须保持不断学习的状态。计算机技术日新月异,无论从理论还是实践,知识更新都非常快。所以测试人员必须不断学习,了解掌握最新的测试理论、测试技术、以及其他领域的计算机技术例如云计算、敏捷开发与测试等。并在测试中,将这些理论知识付诸实践,让测试人员的测试边变得更有效、更高效。