你是测试工程师,还是编写测试代码的软件工程师?这两者之间有什么区别?
目前我是测试工程师,但这两种角色非常的相似。作为测试工程师,你更多的是专注于产品的总体质量和软件发布的速度,而编写测试代码的软件工程师更多的是关注测试框架,自动化测试和为测试重构代码。我想这两者之间的不同更多的是关注点,而不是能力问题,因为在谷歌,这两种角色都需要能写出产品级质量的代码。例如,我所做的测试工程师的任务是引入自动化的发布过程,为团队划分模块来提高测试覆盖率,减少校验数据正确性时需要的手工操作步骤。
你的典型的一天的工作是个什么样的情形?
当来到公司,我首先去看哪些代码审查是需要回复的,看看哪些从技术客户经理发过来的bug是具有高优先级的,然后开始写代码。在当前的职务上,我的主要精力是放在提高大规模集成测试和测试框架上的测试有效性和覆盖率。我也会在我们的产品中增加一些功能特征,来改进测试有效性。我的时间的50%到75%会花在写代码上或代码审查上。
你只写测试代码吗?
不是的,我写的很多代码会留在发布的产品中。在谷歌做SET或TE的一个最大的好处是:你写产品代码就像写测试代码一样简单。我两者都写。我写的测试代码主要是用来改进测试框架,让开发人员能写出集成性好的测试程序。我写的产品代码主要是来改进对外部输入数据的验证。我还会写一些来提高可测试性的功能代码。这些代码能给产品带来质量更高的功能特征,避免了让产品依赖于测试程序来发现其中的问题。
你用什么语言开发?
测试代码和产品代码大部分都是使用Java。偶尔也会使用Python或C++。
手工测试会占用你多少时间?
目前,在这个岗位上,我手工测试的时间少于5%。经过某些探索式的测试能帮助提高对产品的认识、发现某些风险的存在,但这些不会反复的出现,也不多。需要手工的步骤很少,我的任务就行帮助减少这种操作,所以团队不会让我去做那些数据迁移中反复的手工测试工作。
你不是给自己的代码写测试代码吧?
在谷歌,测试的任务是在所有工程师间交叉分摊的,并不是只由测试工程师来做。每个人都要为他们的组件写出单元测试代码,就像集成测试工作一样。这就是说,我写的测试用例针对的组件并不是我开发的,但这些组件需要有说明如何为它写测试代码。这些组件通常牵涉到非常复杂的代码或需要用新的模拟框架,例如Mockito。
开发谷歌的广告产品,哪些是你喜欢的?
我喜欢我们需要解决的问题中的海量或高性能所带来的挑战——从处理海量数据到在毫秒级间实时对大量的广告请求进行响应。我还喜欢我们产品的影响力,因为这些产品会牵涉到很多的用户。这是工作在这样的产品上获得的回报。
依你的经验,谷歌的测试工作和你干的其它公司里有什么不同?
我感觉在谷歌,这个角色非常的灵活。在我的团队里很少区分这是SET的那是TE的,每个人可以灵活的选择他们认为最重要的工作去做。例如,我写了很多的产品代码,修改了很多产品中的bug,提高代码的可测试性,增加在迁移数据中对错误数据的可观察性。同时,谷歌的很多开发人员却在花大量的时间测试代码,所以说,测试不是我的唯一任务。
在谷歌柯克兰工作区工作和在谷歌总部工作有什么不同?
我真正喜欢谷歌的地方是它的各个办公区各有自己本地风格和个性。谷歌提倡这样。例如,位于柯克兰的办公区有攀岩和划船设施,我们办公大楼里的所有会议室都是以本地品牌命名的。位于西雅图的办公室有皮划艇,而纽约的办公区里在自主餐厅里有食品车。
谷歌的这种测试文化有前途吗?
我觉得前途一片光明。我们有很大的灵活性,能对产品的质量和可测试性产生重大积极的影响,能提高产品发布的速度。我们需要快速的产品发布和高质量的产品发布。问题是我们面对的问题很复杂,而且要求很苛刻。我们需要用技术来确保团队有有效的测试方式。这是所有在谷歌的测试人员和工作中这个领域的开发人员的努力目标。