Google测试之道节选-SET(软件测试开发工程师)的招聘

SET(软件测试开发工程师)的招聘题:

    假如你第一条上不,你被要求去实现一个函数acount(void*s),返回一个字符串中大写字母A出现的次数。

不要一上来就直接开始写代码,而是问清楚,这个函数是用来做什么的?我们为什么要构建它?这个函数的原型看起来正确吗?SET的时间是优先的,我们希望应聘者能够寻找最有效的解决问题方法

普通应聘者会花几分钟通过提问和陈述的方式来理解需求文档,如:

1.传入的字符串编码是什么?

2.函数名字比较糟糕,一个是驼峰式?需要更多说明描述还是这里应该遵循其他的什么命名规范

3.返回值类型是什么?

4.void*是危险的,应该考虑更合适的类型,如char*

5.如果只有一个A的情况,计数结果是多少?它对小写字母a也计数吗?

6.在标准库中不是已经有这样的函数了吗?

更好的应聘者则会考虑的更多一些:

7.考虑扩展性,或许返回值的类型应该是一个64位的整形因为Google经常涉及海量数据

8.考虑一下复用性,为什么这个函数是针对大写字母A进行计数的,一个好的办法是参数化,使得任意字符都可以被计数,而不是使用不同函数来实现

9.考虑一下安全性,这些指针都是来自于可信任的地址吗

最佳的应聘者会这样考虑:

10.考虑扩展性:(1)这个函数会在Shared data的一部分运行吗?或许这才是调用这个函数最有用的形式。在这个场景需要考虑一些什么问题吗?针对整个互联网的所有文档运行这个函数,该如何考虑性能和正确性

                          (2)如果这个子程序被每一个Google查询所调用,而且由于外部的封装层面已经对参数做了验证,传递的指针是安全的,或许减少一个空指针的检查会每天节省上亿次的CPU调用周期,并缩短用户的响应时间。

11.考虑基于常量的优化:我们可以假设输入的数据是已经排好顺序的吗?如果是那样,我们或许可以在找到第一个大写字母B之后就快速退出。输入的数据是什么结果,多数情况下都是A吗?多数是字符的混合,还是只包含字母A和空格?如果那样,在我们比较指令的地方获取可以做些优化。当在处理大数据,甚至小数据的时候,在代码执行的时候,对于真实的计算延迟也会有比较显著的亚线性编号

12.考虑安全性:(1)在许多系统上,如果这是一段对于安全敏感的代码,可以考虑更多的非空的指针做测试

                          (2)增加一个字符长度的参数,用以保证代码不会运行到指定字符串之外的部分。检查字符串长度,这个参数值是否正常。那些不是以null结尾的字符串是黑客们的最爱

                           (3)如果指针指向的数据能被其他的线程修改,这里就有潜在的线程安全问题

                           (4)我们是否应该使用try/catch来捕获异常的发生,或者如果未能如预期那样正常的调用代码,我们或许应该返回错误代码给调用者。如果有错误代码的话,这些代码经过良好的定义并有文档吗?

在面试中会考虑是否与公司文化上匹配。应聘者在面试过程中是否在技术上有好奇心?当面对一些新的想法的时候,应聘者是否能够把它融入到解决方案里呢?又是如何处理有歧义的地方?是否熟悉质量方面的理论学术方法?是否理解治理度量或其他领域的自动化?例如土木工程或航空工程方面的自动化。当你发现在实现中存在缺陷时,是否心存戒备,私聊又是否足够开阔?

应聘者不必具备所有这些特质,但仍是越多越好。

如果应聘者在SET岗位没有具备足够强的编码能力,这并不意味着此人不是一个合格的TE。

关于SET招聘的一些观点,如果SET是一个优秀的编程者,他应该只去做功能开发的工作吗?如果他们很擅长做测试,就应该只是专注于解决纯粹的测试问题吗?事实总是存在于两者之间,但一个明星级的SET能够对一个团队产生巨大的影响。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值