首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

2013 MPD SZ集会小结及书评 - How Google Test Software

2013-10-08 
2013 MPD SZ会议小结及书评 - How Google Test Software9月份参加了MPD深圳会场的workshop, 其中一场测试

2013 MPD SZ会议小结及书评 - How Google Test Software

9月份参加了MPD深圳会场的workshop, 其中一场测试分场是Google的Jeff Carollo所演讲的Google是如何测试的.颇有启发. 

2013 MPD SZ集会小结及书评 - How Google Test Software

SET - Software Engineer in Test

Google非常注重软件的质量, 希望他们的软件质量能达到业界的顶尖水平, 于是除了软件开发和测试工程之外, 他们还设立了一个新的角色 - SET(Software Engineer in Test)即

软件测试开发工程师(对, 没听错, 就是这个头衔, 中文版就是这样翻译).  或者说是以前google的开发人员都不太注意质量, 或者把质量都推给测试人员, 而测试人员也没有足够的知识(或更深入到代码的知识)来写出足够有份量的测试用例出来. 所以SET横空出世, 即能写code, 又能写test case的文武全才, 其中Jeff就是一位! 他的老板在书中给予了他高度评价. 


SET的主要工作包括写自动化测试脚本,工具及框架, review代码(下面会有一个很好的例子)并重构. 比起一般的开发者(developer),她不会开发feature的代码,也没有一般developer那样专注于某个特定的领域, 而是会有一个非常广阔的视野和面向质量的软件开发原则, 如了解和布道普遍的软件开发价值观, 如如何重构, 了解设计clean code, 如何能使代码重用性, 如何使代码更易于测试, 如果更易于设计, 如果设计得更健壮等. 


SET是如何成长的. SET一开始的工作主要是学习, 要了解整个系统, 而不只是具体的一个或几个子模块, 大量的读代码和系统设计文档, 了解developer的"语言", 了解如何测试系统. 然后在此基础上, 才做进一步的自动化测试设计及重构, review工作. 


Jeff还谈到一个软件的技巧, 也是非常值得我们学习的. 如一个SET要足够的勤奋,大量的学习和讨论, 然后施加影响力. 要与developer保持parner的关系, 抓住他们一起讨论软件架构, 深入讨论代码的细节和质量问题, 与老板保持紧密同步等.


其他更具体的内容可以参加大会的ppt, 以及更全的是Jeff及他老板共同写的一本书<<How google test software>>. 


<<How Google Test>>

会后参考了这本书, 其中文版会于本月发布, 已可以在chinapub上预定, 大概9号发售, 中文名叫<<Google软件测试之道>>, 还算贴切吧.书中谈到了google中SET, TE(测试工程), TEM(测试经理及总监)的具体工作及google的文化, 还是非常有趣的. 其中讲到测试的未来之路, 所以的测试以后都会以云为基础以次节省开支和便于统一管理, 而且会更开放, 封闭的软件是昂贵的和反应迟钝的, 想想你们公司内部的封闭软件的影响力有多大, 是整个公司所有部门都会用吗?

2013 MPD SZ集会小结及书评 - How Google Test Software2013 MPD SZ集会小结及书评 - How Google Test Software


无码无真相

觉得本书其中一个微观的精华就是在实际的代码评审中出现, 在如何面试SET一节中, 出现了这样的一段分析, 大家可以先看看自己或自己公司的程序员或测试工程师会是如何设计及测试这段代码的.

设计和实现acount(void *)函数, 返回字符串中所有的A的数目.

你会怎么设计?

对于我自己, 一看这还不是一道简单的c笔试题吗, 虽然好久不写code, 但其实思路还是很容易实现的: 输入检查, 遍历字符串, 遇A则加1, 最后返回总数.

但真的有这么简单吗?

对于这样的回答, 会马上被Google鄙视的.一个合格的google SET, TE或SWE的思维不会是如此线性的, 会考虑到:

上下文, 如这个函数是用于什么? 为什么需要它, 这个函数命名本身有问题吗? 直接就跳到coding中会显得有些片面. 一个好的SET会往后退一步, 尝试看得更远一点:

输入的字符串是什么编码的(encoding), ASCII, UTF-8或是其它?函数命名有问题, 是否应该更符合命名规范, 而且更能表达它的意义? 返回类型是什么? 要加上Int吧输入的类型是void *, 这个比较危险, 如果确定是字符串, 为什么不用char*呢?计算A区分大小写吗?这个函数是否已经在标准库里已经有了?而更有经验的SET会这样分析:
return类型是否可能超出32位而应该用int64? 代码重用问题: 为什么只设计成计算A呢? 设计得更通用点可能会更好安全性问题: 所有的指针来源都是安全的吗?
而优秀的SET会这样考虑:
需要把这个函数转换成MapReduce在实现吗? 因为很多google的应用都会运行在此平台上这个函数是否有个wrapper函数, wrapper函数里面是否已经做了指针检查, 如果是这样, 这里就不需要再做指针检查以节省cpu.优化: 输入的字符串是否是已经排好序的, 如果是则可以节省大量时间, 如见到B就可返回; 输入的数据有什么规律, 如大部分都是A或是随机出现? 比较函数上可否做进一步优化.安全性: 运行的环境是否对安全性非常敏感, 是否要加入更多的安全性检查. 例如加一个长度参数来避免溢出攻击. 是否应该加一个try/catch, 是否应该定义错误返回类型并加以记录?
幕后花絮

Jeff已经离开了Google, 现在在一个startup里担任architect, 如他所说的, SET最终的目标还是一个优秀的设计师. 

Jeff提到其它一些公司听到SET这个概念后也非常有兴趣, 有些公司要求所有新来的工程都先做一段时间的SET才去做其它, 以此对项目和代码有个很好的全局观以及从开始就注重代码质量.最近出了部电影叫Internship (实习生), 是讲两位大叔是如何混进google的喜剧片, 想近距离观察google环境和文化的可以留意下. 
2013 MPD SZ集会小结及书评 - How Google Test Software




热点排行