您认为所有优秀的开发人员都能够成为优秀的测试人员吗?

所有的人都知道应该如何进行测试,但是却未必知道要成为一名优秀的测试人员,真正需要哪些素质。

摘自 IBM WebSphere 开发者技术期刊。

优秀的系统验证测试人员应该具备哪些素质?

在 8 年多的软件开发工作中,我曾从事过各种项目的设计和开发,并且从初级开发人员成长为高级开发人员,最终成了一名软件架构师。在此期间,我意识到测试工作的重要性和挑战,甚至曾自愿地对自己设计的程序进行测试,这是出于“自己解决自己的问题”的考虑。大约在一年前,我成为了系统验证测试 (SVT) 组的负责人。我之所以想到要撰写这个专栏,是因为与所在部门的一名测试人员的闲聊,情况是这样的,该测试人员以前的一名同事申请了我部门中的测试职位。当我向这名测试人员询问有关申请者(当时他正从事开发工作)的情况时,她的回答是“对这个人我已经记不大清楚了,但他肯定是一名优秀的测试人员,因为他是一名开发人员”。

听到这样的评论我感到震惊,但是后来我发现,对于开发和测试团体来说,这是一个普遍存在的观点。的确存在许多优秀的开发人员和优秀的测试人员,但是在某个方面非常一流,并不一定就意味着在其他方面也同样优秀。所以作为一名测试管理人员,我需要说明成为一名优秀的 SVT 测试人员所面临的挑战和应该具备的独特品质,这不仅仅是要吸引高素质人才加入到这个行列,同时还可以分享这项工作给我们带来的自豪感,并且或许可以为测试工作赢得更多的尊重。

发现客户价值

按照规定,SVT 组负责进行系统级测试。什么是系统级测试呢?这是一个常见的问题。我的理解是,进行系统级测试的目的是为了确保通过产品所提供的功能,实现既定的客户价值。

那么,什么是“客户价值”呢?其答案正是为什么客户购买和使用某种产品的原因之一。例如,我使用 Microsoft® Word 已有许多年了。回忆我个人使用该软件的经历,在早期的版本中,最苦恼的事情是它容易在编辑的过程中发生崩溃,这样就会丢失最近一次保存以来的所有工作。幸好,现在的版本不再出现这种情况了。甚至更加完善,它会定期地自动保存文档,这样一来,即使在退出的时候忘了保存文档,仍然可以恢复到最近一次自动保存的副本,对我来说这是个非常好的特性。这种作为客户的经历使我意识到,尽管该产品提供一般性的功能,但正是其独特的特性使得它能够从众多的竞争产品之中脱颖而出,并且正是这些提供价值的特性使得其客户钟情于该产品。因此,对于优秀的 SVT 测试人员来说,最重要的品质是能够清楚地了解每个特性的客户价值。

尽管可以很容易地从设计文档或用户手册的简介部分中找到每个特性所允诺的客户价值,但是要有效地将它们合并为测试设计方案的核心,并不是那么简单。要实现这一点,测试人员需要了解技术的采用周期,以及该技术当前位于其采用曲线中的什么位置。他还需要了解提供类似客户价值的竞争技术,以及有可能共同使用的协作性技术。

测试更广泛的场景

我观察到新的 SVT 测试人员常犯的一个错误是,他们总是从局部而非整体的角度来看待某种技术(或者产品特性)。结果,测试工作重点关注于产品与设计的符合性,而不是它所提供的真正价值。例如,当在 J2EE™ 技术中引入容器管理的持久性时,其目标是为数据库的访问提供一种更简单并且更具可移植性的编程模式,它的竞争技术是其他持久性技术,如 JDBC 和持久的数据对象。如果该技术或特性不易于使用,并且不能够伸缩或至少执行其竞争技术所能完成的任务,那么该特性就难以获得接受,即使客户购买了这个产品,他们也不会使用该特性。因此,SVT 测试人员的任务是发现问题的本质,并在产品发布之前进行报告。

是可以工作,还是工作得更好?

不久之前,一名测试人员向我解释她正在测试的新的安全会话特性,如何通过在每次调用中与信任服务器联系以便进行身份验证,从而使得 Web 服务能够更好并且更安全地执行。我很怀疑向信任服务器进行附加调用的时间是否短到足以避免抵销这个新特性所节省的时间,以及这个信任服务器是否向系统中引入了单点故障。

对于 SVT 测试人员来说,对该特性及其相关特性的技术知识同样重要,并且仅仅有技术上的知识是不够的。使用客户价值作为特性测试的核心,还需要测试人员考虑更多的内容,在有些情况下,需要跨越组织的界限。当我提出关于信任服务器性能方面的担心时,该测试人员的回答是“我不负责测试性能,那是由性能团队负责的”。还有一次,有个客户向我询问关于产品如何在重负载下处理事务恢复的问题。执行这个测试场景的测试人员无法回答这个问题,因为她根本没有进行负载测试。

在一定程度上,这反映了组织中的定义受到很大的限制。当然,很少有能够很好地处理各种情况的组织结构。我认为,优秀的 SVT 测试人员不仅仅只是完成特性本身的测试工作,并且对任何可能妨碍该特性实现其允诺的客户价值的问题保持高度的警惕,无论是性能优于该特性的竞争技术、或未能很好集成的协作特性、或特性本身没有达到预期效果、或在系统中产生了附加的缺陷。

加速学习

正如特性和产品无法单独工作一样,它们也无法保持一成不变。产品和技术以比以前任何时候都快的速度向前发展。优秀的测试人员将不断地学习,更重要的是,需要快速地学习。SVT 测试人员的学习环境非常具有挑战性。通常在该特性尚处于设计阶段时,没有可用的文档,代码库可能很不稳定,但是 SVT 测试人员必须对其进行研究。当他们开始真正理解该特性时,发布日期已迫在眉睫。所以,许多 SVT 测试人员根据经验、通过反复试验来了解相关的特性。尽管这通常是一种有效的学习方式,但是对于测试人员来说,仅仅依靠这种单一的学习机制还是不够的,因为这样难以分辨特性的行为是来自于设计还是由错误产生的。这还隐含着另外一个危险,是否将来自开发人员的所有信息都认为是正确无误的,对于这一点,我更倾向于作一名学生。

一种更好的学习方法是从该特性打算解决的问题入手,无论它是业务问题或是技术问题,然后了解该特性如何解决问题的关键思想。特性的功能表现了这些关键思想的具体形式。换句话说,优秀的 SVT 测试人员将用更多的时间来研究问题,而不是解决方案。测试是一种度量用该特性作为问题解决方案的能力的方法。

开发测试场景

SVT 测试人员开发出好的测试场景,以便高效地演习该特性,这需要全面地了解特性及其相关的特性、以及它打算解决的问题。大多数情况下,测试场景无法按照最初的预期工作。这正是测试的目的,即找出具体的问题。优秀的 SVT 测试人员能够分析系统中每个组件所扮演的角色、确定问题、找出系统中的瓶颈、收集相关的证据以证实他们的预测。如果系统的行为继续与预期相反,测试人员可以重新设计测试方案或对该特性的设计提出质疑。总之,优秀的 SVT 测试人员同时也是优秀的系统分析师。例如,我们的一个测试应用程序着重对 J2EE 功能(如 EJB 组件、Web 服务,等等)进行测试。然而,该系统在数据访问逻辑中存在瓶颈,所以当 CPU 使用率较高时,这个测试场景就成了压力测试,尽管压力特性并不是这项测试的任务。

权衡风险和实用性

所有测试人员常常面对的另一个挑战是实用性和优先顺序设置。通常,几乎不可能测试“所有情况”。可以进行测试的整个范围通常太大,难以在给定的时间内完成测试工作,当多个特性组合在一起时测试的范围将变得更大,其排列组合呈指数上升。对于中间件产品,如 WebSphere Application Server,您可以在其基础上构建各种应用程序。应用程序的设计方式是无限的。因此,问题变成了如何对测试场景进行优先顺序设置,以及多少测试工作能够实现成本和效益之间的最优化。这仍然取决于客户价值、技术采用周期和该特性打算解决的问题。然而,优先顺序可能被取消,重要的测试场景可能缺失,所以始终存在着一定的不确定性,但是优秀的 SVT 测试人员将注意到危险的存在、积极地确定相关的危险、并根据进展的情况对它们进行管理。在产品发布之前,他们记录下假设和遗漏之处,并在发布之后,根据客户反馈信息进行确认和修正。通过使用经过证实的 SVT 方法学中的检查、平衡和预防措施,最终将弥补这种内在的不确定性。

测试人员应该是程序员

我坚信,优秀的 SVT 测试人员应该是优秀的程序员,并且我这样认为是出于下面几个原因:

    除非使用某种技术,否则无法完整地理解它。
    如果没有基本编程技能,测试人员无法进行研究、调试、并逐步确定问题的根本原因,而这将帮助开发人员更好地解决问题。
    测试人员需要具有足够的编程技能,以便与开发人员进行有效交流,并且可能更重要的是,赢得开发团体的尊重。

根据我的经验,对于那些不具备很好的编程技能的测试人员,他们的测试效率比较低,并且他们的意见也常常被开发人员忽视,而对于那些具有很好的编程技能的测试人员,他们可以更快地解决问题,并且他们的反馈信息也得到更高的重视。

毫无疑问,编程技能对于中间件产品的测试人员来说非常重要,但是对于那些从事最终用户产品测试的测试人员来说,技术技能同样非常重要。所有的软件产品都在不断地发展,回归测试的成本也相应地越来越高。没有合适的自动化测试方法,就难以可靠地再现测试的结果并进行高效地回归。随着产品的成熟和客户基础的增加,回归测试的成本变得非常高,以至于如果不实现各种测试工作的自动化,那么最终将阻碍产品的革新和深入的改进。没有合适的编程技能的支持,开发和维护自动化的测试场景将可能付出很大的代价,甚至还不如手动测试经济。重复性的手动回归测试不仅使得测试任务变得乏味,而且代价高昂,以至于管理人员必须面对回归测试、新的测试或服务成本之间的艰难抉择。

做一名具有外交能力的伙伴

最后一点也非常重要,一名优秀的 SVT 测试人员需要各种素质技能:交流、协商、和人际关系技巧。对于任何工作来说这些都是非常重要的,许多人可能不会将这些技能与软件测试联系起来,但是对于测试人员来说,这些也是非常重要的技能,因为他们的主要工作是使别人相信的确有些地方需要进行修改。开发人员的目标是创建产品,而测试人员的目标是找到出现问题的地方。优秀的测试人员将能够清楚地交流问题,有策略地协商更改事项,并且有效地消除各种不同的意见,而不会制造紧张气氛。优秀的 SVT 测试人员不会仅按照开发人员的指导进行工作,相反,他们是开发人员真正的伙伴,共同使得产品更加完善。


结束语

总的说来,优秀的 SVT 测试人员具有对每种特性所提供的客户价值的深入认识,并将这些价值作为测试工作的核心,即使这意味着必须完成更多的工作。测试人员不仅仅善于快速地学习,而且从学习过程的开始到结束,他们一直关心着这些特性需要处理的问题。他们小心翼翼地管理危险并证实假设,他们是优秀的系统分析师和程序员,并且他们具有高超的交流、协商和人际关系技巧。

可以将责任进行划分,一个人不可能拥有所有这些技能。但这是一项挑战,谁能说测试工作是简单的呢?作为 SVT 测试管理人员,我工作中最重要的部分是获得并培养自己的这些技能,并为我的团队提供帮助。SVT 测试工作比大多数人想象的更加复杂,我希望本文可以帮助说明测试任务的范围,以及很好地完成这些任务所需的各种技能。我希望那些已经具备了这些技能的人不要认为他或她非常优秀而不愿意成为测试人员,并且能够意识到在开发周期中,测试工作是专门的并且非常重要的一部分。



你可能感兴趣的:(您认为所有优秀的开发人员都能够成为优秀的测试人员吗?)