欢迎莅临我的小站 lovetostudy.me.
写在前面
今天算是在北京最安安稳稳的一个周末,从周五开始陆陆续续和不同的朋友吃了饭,想起来之前落下的文章还没写。等到项目忙起来的话,没有时间来总结,自然又要忘记,姑且先下笔乱诌个提纲出来。
从4月中旬下定决心换工作,到6月末如愿入职阿里,这场社招面试持续了三波。由于我下一站毫无商量余地的选择北京,从第一次裸面,到痛定思痛准备之后的第二波,再到坚定不移的第三波,自己简直身心俱疲。不过真的是感觉收获满满,无论是测试相关的测试方法和测试理论,还是认识测试开发的能力要求,都有了一定的积累和努力方向。
所以这篇日志大概有以下内容:
- 总结互联网测试/测试开发常见面试内容
- 对测试/测试开发的理解
- 未来的学习规划
- 对有志于从事软件测试行业的同学的指导
首先介绍下我之前任职的公司:某知名外企(貌似在国外知名度高一些),行业为传统BI,客户主要为美国大型银行、投资机构、大型制药公司以及上市集团等,主要产品为BI报表,仪表盘等。
在某乎上关于互联网行业与传统软件行业有什么不同?有这样一条回答,“互联网行业属于【服务业】,而传统的软件开发行业属于【制造业】”,虽然有点以偏概全的嫌疑,但是基本说出了互联网行业与传统行业的根本区别:服务的对象不同。互联网行业服务的对象是普通的用户,有着成千上万不同特征的用户画像;传统软件行业的服务对象是特定行业的从业者,有着严格的约束,比如Product Manual(用户手册)。
在笔者看来,落地于软件测试,互联网与传统软件行业的区别主要如下:
- 更加关注用户体验
- 产品迭代快,需求变更快,测试周期短
- 信息安全敏感度高,安全测试要求高
- 用户量级大,更产品的性能测试、并发测试等
- 用户场景更多,更复杂,对兼容性测试、适配测试要求更高
……(欢迎补充)
正因为这些需求,相比于传统行业,互联网行业对软件测试从业者的要求更高。特别是TDD(Test Drive Development 测试驱动开发)、BDD(Behavior Drive Development 行为驱动开发)、DDD(Domain Drive Design 领域驱动开发)以及敏捷的理念逐渐被提出来并在国内深入实践,测试的重要性逐渐提高。**在这里特别更正一些同学对测试工程师的误解:随着技术的不断更新,敏捷框架的流行,测试工程师逐渐被淘汰甚至消失。**真的是这样吗?这种观点当然是错误的!而是恰恰相反,测试的地位在提升,对测试工程师,测试开发工程师的能力要求也更高了而已。新的时期的互联网行业对测试的要求是:
前面谈了那么多,表面上看都是一些纸面上的东西,实际上是笔者在投递130多份简历,20多家互联网公司,涵盖服务端、移动端专项、SDK测试、全栈测试开发不同领域的面试经历的深度总结。下面我就结合实际的面试题目去解读互联网行业对软件测试工程师的要求。
一般面试是一个双向的了解和选择的过程,我常常把面试过程比作买菜的过程,虽然难免出现“讨价还价”的环节,总体还是面试者对考察人的全面考察以及应聘者对所应聘岗位以及应聘公司的了解。所以窥一斑而知全豹,能了解到当下对软件测试工程师和测试开发工程师的要求。准备好了吗?干货来了:
初级:功能测试
相比之前的传统软件工程思维,互联网行业更需要的思维只有一点:关注用户体验:
- 新浪微博聊天分组列表页面
- 滴滴打车叫单
至于一些基本的功能测试点,每一个面试者基本能回答上来。一般笔者会通过按需求、模块、场景对测试用例划分,再分析不同环境、设备的测试用例,最后加上性能、压力、并发测试等。这样的思考方式看似是完美无缺,但都不是面试官想要的完美答案。笔者当时被批评最多的就是还是传统软件的思维,没有考虑到互联网关注的关键点。
这里对答案不再进行详细探讨,仅仅讨论按照普通套路会遗漏的case:
以新浪微博的题目为例,除了要保证基本的功能正常之外,还要考虑用户体验。当前很多互联网产品不再仅仅是一个工具,更是内容分发平台。以微博聊天分组为例,分组的List排列顺序并不是随机的排列,也不是按照时间顺序简单的排列。而是根据用户的兴趣,关注度,亲密度等有着清晰,有用户导向的排列。那么测试除了要关注功能测试,也要关注产品本身的特性和用户体验。(不过这里笔者对这个题目设计的稍有微词,一来是老哥我不怎么用微博,二来是像这种明显带有产品特征的case,在不同的version是肯定会有需求文档的,如果需求里明确了聊天List排列会跟何种参数有关,如果计算,我们作为测试工程师是肯定要cover的)
而滴滴打车叫单这个题目笔者就熟悉很多,当时笔者也是按照一般的测试用例设计思路说了一遍。面试官表示基本认可,但随即提出了,这些东西一般人都会想到,但是我们作为服务者,肯定不能考虑用户什么都正常的情况。比如用户定位错误,网络错误,没有有效联系方式,未安装地图等等,这些异常情况下的测试用例我们都要想到。因为既然是服务软件,在异常场景下产品需要有:异常处理机制、对用户友好的提醒和引导、纠错功能等。
总的来说,互联网产品作为服务大众的多媒体工具,更关注的是用户体验。在设计测试用例的时候,除了功能测试相关的用例,更要关注异常情景以及用户体验相关的测试用例。
功能测试用例的题目除了这两个题目之外,还有一些经典的题目:
- 水杯
- 电梯
- 窗户
- 自动售货机
- ……
这样的题目相对简单,基本考察的都是测试用例设计能力。基本按照模块、功能、需求、抗压等思路去设计用例即可。详细的答案大家直接求助网路就好了,这里就不复制粘贴了。
这类的问题基本上考察的是应聘者的计算机基础,总体感觉不难。主要要看应聘的公司对该岗位的要求和对面试者的定位。我把我遇到的题目主要总结为这几类:
- 语言基础知识:C++的多态,Java虚拟机,Python的深拷贝与浅拷贝。总的来说就是简历上写的熟悉的语言的基础题;
- 计算机网络:这类问题在应聘服务端测试的时候居多。例如TCP/HTTP原理,HTTPS与HTTP的区别,IP地址的分类,TCP与UDP的区别以及常见状态码等;
- 数据库:数据库范式,简单的命令,主键与外健,内联结等;
这些问题可以说是校招划水水平,不过我好多都忘了还觉得社招这些东西不会被问到,这恰恰是我们准备测试开发面试的盲区,测试开发还是需要应聘者有着扎实的计算机基础。不过问题不难,基本上百度“*****的常见面试题“都可以搜的到。
测试开发岗位要求从业者有着扎实的编码能力,未来测试开发的主要工作将从功能测试转移到专项和工具及平台的研发,编码的工作是不可或缺的。我遇到的问题能回忆起来的有这么几类:
- 基础类:
- 常见排序算法
- 算法复杂度
- 树的遍历,递归非递归,深度优先和广度优先
- 链表题考到的最多:链表反转,环相关问题,删除中间元素等
- 等;
- 字符串处理:
- 字符串反转
- 文本的规范化(首字母大写,单词规范化)
- 关键字查找及过滤
- 等;
- 综合编程题:
大都记不太清,会稍微有点难度,部分题目在LeetCode上也见到过,如经典的Longest Substring Without Repeating Characters。说真的,如果想拿到大厂或者新生代互联网公司的offer,题还是要刷的。这里分享我的个人经验,一般Python答起来会更轻松点,常见的面试题很多都是很有技巧性的,而Python在临场发挥时应对这些问题都比较简单。但是有些问题用Python就不够简洁,比如说Python严格来说是没有树和栈这些结构的。
总的来说编程题都不是太难,最好是Java/C++和Python都熟练,这样应对大多数的题目绰绰有余。
这类的题目会跟前面提到的很多问题相结合,考察知识的全面性,这里就直接列出来我遇到的问题吧,你们可以认真感受下每个问题背后潜藏的考察点:
- 代码实现,判断IP的合法性
- 输入到浏览器一个地址,到观察到页面这个过程中都发生了什么
这道题目很容易漏掉Cookie,也很容易漏掉该页面需要权限或者登陆的情况 - 如何测试一个IM系统
- 如何测试一个多线程安全的日志类库
- 对一个SDK网络协议接口进行升级,写出所有的测试用例
……
由于时间太过久远,很多题目都不太记得了。总的来说,情景设计题目的特点是整个情景考察的知识点多而全面,并且相互之间联系紧密,考察的是测试开发人员的知识全面性和考虑问题的全面性,所以归到了高级题目。
高级的题目主要集中在某个测试的专项上。正如前文所说的那样,未来的很大一部分测试工作,将会由开发人员承担,而测试开发工程师主要集中在平台开发和测试专项,所以面试最难的地方就是测试专项。不是说题目更难,而是考察的更深。因为我的经验主要集中在iOS和Web自动化,所以这块儿被问到的最多。
- iOS
- View和Viewcontroller的生命周期
- ARC和RC的区别
- Instruments测试内存泄漏
- EXC_BAD_ACCESS
- Xcode调试
- iOS证书
- APNs各个版本的区别
……
- Web
- 说出几个Web自动化测试工具以及区别
……
- 自动化测试
- 讲下做过的自动化测试的项目以及自己在框架中做的工作(甚至有公司还问了我某个函数怎么调用…)
- 列出几个移动端自动化测试框架,给一个项目,结合项目内容以及团队组成对框架进行选型
……
基本上到这里算是把两个月以来的面试总结了一波,希望能够让更多的人了解到测试开发的新要求和未来发展。两个月过去了,很多题目暂时回忆不起来,这篇文章长期更新,希望大家可以多多交流~欢迎关注我的微信公众号:尼克毛的技术小站
共同学习,写下你的评论
评论加载中...
作者其他优质文章