这是一个很大的题目,作为仅仅在微软工作了半年的我,其实是没有资格来写这个的。
但是无论在当年找工作的时候,还是各种论坛上,总会看到对微软SDET(Software Design Engineer in Test)的疑问:软件测试,这不是低人一等吗?
即便在微软内部,也曾听到有人说:哎,SDET最轻松了,不过是测试一下而已---当然,说这个话的本身也是一个刚到微软不久的新手(他不是Dev,而是属于一个比较旁支的组,所以不是很清楚具体Product team的分工)。
实际上,以上的观点,把SDET和STE(software testing engineer)/QA(Quality Assurance)搞混淆了。
STE/QA的工作,的确仅仅负责测试,比如说新开发了IE版本,那么STE的任务就是验证各方面运行正确(例如菜单等等)。
但是问题来了,你怎么去测试HTML解释器工作正常?怎么去测试Javascript会否造成系统不稳定?怎么去测试其他程序调用IE组件的时候不会产生问题?(我不是IE Team的,只是大概一个例子)
于是,SDET就诞生了。实际上,软件工程师一般把develop+unit test都单独完成,而微软是把这两项工作划开来,SDE负责写Code,SDET则负责写其他的Code来测试。
举个简单的例子,要实现quick sort,SDE的任务是实现qsort这个接口,而SDET则写一个完备的程序来从各方面调用这个接口并验证其结果正确。听起来很简单,有兴趣的不妨试一下,你能在20分钟内无误实现qsort和完整的test程序的话,恭喜,你写代码的能力达到了微软的基本标准。
quick sort是一个简单例子,SDE也可以自己做unit testing,但是因为微软的产品大多涉及到非常底层的东西,绝大部分情况下,对一个功能的测试需要设计非常复杂的Scenario. 再拿个例子,TCP/IP实现的测试,Developer可以写一些简单的unit testing来验证,但绝对无法覆盖现实情况下各种可能。比如,如何测试TCP/IP模块能保证在你看PPStream的时候仍然能正常保证网页浏览或者视频对话?当然,这个东西也可以让Developer去做,但微软把这一部分工作分离了出来,并设立了专门的Software Design Engineer in Test (SDET)来完成。
类似的例子很多,例如测试C#,你怎么测试一个Compiler工作正常并的确把内存正确管理起来?又例如加密算法接口(Vista新提供了一套),你怎么确认其正确完成了RSA?后者和我正在做的project有些相关,很汗的是为了验证某个算法API是正确的,我得自己把它完全实现一遍再进行对比,如果我的结果和标准API结果不同,那么再看是我错还是Dev搞错。
其他公司如google/amazon/etc.,近年来也开始设立SDET职位(从某个意义上说是想模仿微软的设置),但是毕竟他们的业务过度集中于Web+Database,也过于狭窄,其工作内容和传统的QA比较接近。而微软的SDET之所以仍然保留了Sofware Design Engineer的名称,的的确确是因为其工作内容绝大部分在设计和开发软件,花在写程序上的时间并不比一般的Developer少,同样要经过code review/group discussion等阶段确认你的测试工具代码是高效且正确----实际上,每一版的Windows,都配备了一套涵盖各方面的测试工具(除了内部使用,外部公司也可以向微软要求,具体不太清楚)
暂时先写这些。
本文解析了微软SDET(Software Design Engineer in Test)的角色与职责,强调其与传统软件测试的区别。SDET不仅负责测试,还需设计并开发复杂的测试工具以确保软件质量。
&spm=1001.2101.3001.5002&articleId=2861794&d=1&t=3&u=8c21ed4e39c84b998f7392ebd3b32857)
2828

被折叠的 条评论
为什么被折叠?



