微软总部常有很多测试工程师的招聘名额,有面向刚出校门的大学生、研究生的,也有面向有工作经验的。美国的大学中,除了佛罗里达州的Florida Institute of Technology(FIT)外,几乎没有其他学校设置软件测试专业,而只是设置涵盖软件测试内容的一、两门课,甚至只是讲述软件工程书里的若干章节。所以微软没有要求测试工程师的应聘者有软件测试学位,但当然希望学习的是计算机专业或其他有关专业,如电子工程、数学、信息技术、通信工程等。当然,也并不完全局限于这几个专业,只要申请者具备所需的编程能力和其他软技能就可以。
一般来说,第一个技术面试的考官会测试你的基本测试概念:比如边界条件(boundary condition)、有效用例(valid case)、无效用例(invalid case)、等价类(equivalent class)等等。你开始不懂也没关系,面试官会给你耐心解释定义。等你明白了以后,就要看你是不是能应用这些概念来回答测试问题,看你能不能很快地学会新知识并应用于实践。
测试人员的面试主要看三类能力:一是重要的软技能,二是测试能力或潜能,三是编程能力。软技能包括:分析解决问题、替用户着想、联络沟通、交际、自信度、学新知识、系统思维、追根溯源、处理困难、团队精神和协作、管理、组织、分清优先度等能力。还要执著。遇到困难不放弃才能克服困难按时保质完成任务。
怎样评价测试能力主要是看给你一个测试问题后,你是否能够有由浅入深地分析出所有基本的、重要的、特殊考虑的测试用例。而且能否系统性地进行分析是很关键的。因为在微软测试工程师要能独立承担多个功能产品测试,我们要求测试工程师系统性地计划、执行和检查测试,不然很可能会漏掉重要的测试用例。有的应聘者能答出很多很好的测试用例,但却不能系统性地列出测试用例,而是无条理地、东一下西一下地找。比如,怎样测试一个自动卖饮料的机器?
理想的测试工程师候选人应该能考虑到以下方面:包括外表感觉、颜色搭配、各部件相互位置等用户界面设计、内部结构、电源系统、投钱孔、灯、说明书、商标、饮料保持温度、机器室外最低最高承受温度、饮料补充和拿取、拿取口位置、拿取难易程度、重量、材料、饮料之间空隙、振动承受度、各种极端条件、特殊用户需求(小孩、老人、残疾人)等。针对投钱孔的功能测试应该有很多测试用例。比如测试输入钱的功能,应考虑用不同种的市面流通的所有钱币或钞票。比如硬币像一分、五分、一角、五角、壹元,纸币壹元、两元、五元、十元、一百元、五百元、假币、假钞、有缺损的真币、真钞票等。还有找钱的功能。边界条件应包括该输出的硬币或钞票用光了,没钱找时,应给消费者提示。还有很多可考虑的测试用例。就留下给大家做练习吧。
编程能力方面的问题可能和开发人员的面试问题有类似的地方,但应该简单一些,因为主要是基本的编程问题。微软从2005年前后开始对测试工程师必须要求有编程能力,因为现在初进微软的测试工程师的级别和开发人员是一样的,这主要是因为测试人员也要能编程,以便把大部分测试实现自动化。
对测试工程师的编程有关的面试题,不单单是看你能不能写出正确的代码,还要看你的代码能不能正确处理不同的数据或本程序需要处理的信息。你应该考虑到边界条件、包括有效和无效数据在内的不同数据类型、出错信息处理、给用户提供提示等做测试时需要考虑的测试用例。