标题：SDET
简介
SDET是微软三大核心技术工种之一（其它两个是PM和SDE），是任何一个产品开发团队中必不可少的一份子。SDET是产品质量和用户的代言人，主要的工作是从客观的角度去分析产品的质量以及给出系统化的反馈和建议，从而使整个开发团队能够及时地做出对正确的抉择。要做到这点，SDET需要积极的参与产品的计划、设计、和代码检验，找出并分析问题的根本原因，以及提高产品和流程质量的系统化的方案。
SDET 和SDE的区别
SDET和SDE都需要有扎实的计算机科学基本功，包括编程能力。所不同的是，SDET的工作重点是用反向思维分析的方法找出对产品质量有负面影响的问题，带领整个团队解决这些问题，从而提高产品的质量。SDET需要掌握多种技术，用不同的方法去分析产品各个方面可能产生的种种问题。这里所强调的是对问题的系统分析能力，以及预见到常人没有想到的潜在问题。
SDET对人员的要求
SDET要求人员对质量的要求很高，并且喜欢拆东西，弄明白它是怎么工作的，而且喜欢改善它。一个SDET的最基本要求就是对质量的热情：一定要找到所有的瑕疵从而达到完美。其次，喜欢钻研、分析、并改善事物是成功的SDET的又一潜质。另外，喜欢学习并掌握多种不同的技能和知识也是SDET所需的技能。
SDET事业发展途径
在微软，SDET有非常明确的事业发展阶段。从入门SDET开始，到与总监同级的Partner SDET，每一个阶段都有充足的挑战和机会。喜欢做技术，可以一直顺着IC的事业模型做到Partner SDET甚至Distinguished Engineer；如果你喜欢管理，可以从测试组长一直做到VP of Test。而最好的一点是，不管是做技术还是做管理，在同一级别的待遇是同等的，也就是做技术没有“顶”，不做manager也能晋升。
SDET，属于开发和测试中间，属于白盒测试范畴，要求发现代码中的问题。
1. 基本情况测试在微软公司是一项非常重要的工作，微软公司在此方面的投入是非常巨大的。微软对测试的重视表现在工程开发队伍的人员构成上，微软的项目经理、软件开发人员和测试人员的比例基本是1：3：3或1：4：4，可以看出开发人员与测试人员的比例是1：1。对于测试的重视还表现在最后产品要发布的时候，此产品的所有相关部门都必须签字，而测试人员则具有绝对的否决权。
测试人员中分成两种职位，Software Development Engineer in Test（测试组的软件开发工程师）实际上还是属于开发人员，他们具备编写代码的能力和开发工具软件的经验，侧重于开发自动化测试工具和测试脚本，实现测试的自动化。Software Test Engineer（软件测试工程师）具体负责测试软件产品，主要完成一些手工测试以及安装配置测试。
2. 测试计划测试计划是测试人员管理测试项目，在软件中寻找Bug的一种有效的工具。测试计划主要有两个作用，一是评判团队的测试覆盖率以及效率，让测试工作很有条理的逐步展开。二是有利于与项目经理、开发人员进行沟通。有了测试计划之后，他们就能够知道你是如何开展测试工作的，他们也会从中提出很多有益的意见，确保测试工作顺利进行。总之，有了测试计划可以更好的完成测试工作，确保用户的满意度。
测试人员在编写测试计划之前，应获得以下文档：
1）程序经理编写的产品功能说明书或产品开发计划；
2）程序经理或开发人员提供的开发进度表。
根据产品的特性及开发进度安排，测试人员制定具体的测试计划。测试计划通常包括以下内容：
1）测试目标和发布条件：
a. 给出清晰的测试目标描述；
b. 定义产品的发布条件，即在达到何种测试目标的前提下才可以发布产品的某个特定版本。
2）待测产品范围：
a. 软件主要特性/功能说明，即待测软件主要特性的列表；
b. 特性/功能测试一览，应涵盖所有特性、对话框、菜单和错误信息等待测内容，并列举每个测试范围内要重点考虑的关键功能。
3）测试方法描述：
a. 定义测试软件产品时使用的测试方法；
b. 描述每一种特定的测试方法可以覆盖哪些测试范围。
4）测试进度表：
a. 定义测试里程碑；
b. 定义当前里程碑的详细测试进度。
5）测试资源和相关的程序经理/开发工程师：
a. 定义参与测试的人员；
b. 描述每位测试人员的职责范围；
c. 给出与测试有关的程序经理/开发工程师的相关信息。
6）配置范围和测试工具：
a. 给出测试时使用的所有计算机平台列表；
b. 描述测试覆盖了哪些硬件设备；
c. 测试时使用的主要测试工具。
此外，还应列出测试中可能会面临的风险及测试的依赖性，即测试是否依赖于某个产品或某个团队。比如此项测试依赖性WindowsCE这个操作系统，而这个系统要明年2月份才能做好，那么此项测试就可能只有在明年5月份才能完成，这样就存在着依赖关系。如果那个团队的开发计划往后推，则此项测试也会被推迟。
3. 测试用例开发一个好的测试用例就是有一个合理的概率来找到Bug，不要冗余，要有针对性，一个测试只针对一件事情。特别是功能测试的时候，如果一个测试是测了两项功能，那么如果测试结果失败的话，就不知道到底是哪项功能出了问题。
测试用例开发中主要使用的技术有等价类划分，边界值的分析，Error Guessing Testing。
等价类划分是根据输入输出条件，以及自身的一些特性分成两个或更多个子集，来减少所需要测试的用例个数，并且能用很少的测试用例来覆盖很多的情况，减少测试用例的冗余度。在等价类划分中，最基本的划分是一个为合法的类，一个为不合法的类。
边界值的分析是利用了一个规律，即程序最容易发生错误的地方就是在边界值的附近，它取决于变量的类型，以及变量的取值范围。一般对于有n个变量时，会有 6n+1个测试用例，取值分别是min-1, min, min+1, normal, max-1, max,max+1的组合。边界值的分析的缺点，是对逻辑变量和布尔型变量不起作用，还有可能会忽略掉某些输入的组合。
Error Guessing Testing完全靠的是经验，所设计的测试用例就是常说的猜测。感觉到软件在某个地方可能出错，就去设计相应的测试用例，这主要是靠实际工作中所积累的经验和知识。其优点是速度快，只要想得到，就能很快设计出测试用例。缺点就是没有系统性，无法知道覆盖率会有多少，很可能会遗漏一些测试领域。
实际上在微软是采用一些专门的软件或工具负责测试用例的管理，有一些测试信息可以被记录下来，比如测试用例的简单描述，在哪些平台执行，是手工测试还是自动测试，运行的频率是每天运行一次，还是每周运行一次。此外还有清晰的测试通过或失败的标准，以及详细记录测试的每个步骤。
4. Bug跟踪过程在软件开发项目中，测试人员的一项最重要使命就是对所有已知Bug进行有效的跟踪和管理，保证产品中出现的所有问题都可以得到有效的解决。一般地，项目组发现、定位、处理和最终解决一个Bug的过程包括Bug报告、Bug评估和分配、Bug处理、Bug关闭等四个阶段：
1）测试工程师在测试过程中发现新的Bug后，应向项目组报告该Bug的位置、表现、当前状态等信息。项目组在Bug数据库中添加该Bug的记录。
2）开发经理对已发现的Bug进行集中讨论，根据Bug对软件产品的影响来评估Bug的优先级，制定Bug的修正策略。按照Bug的优先级顺序和开发人员的工作安排，开发经理将所有需要立即处理的Bug分配给相应的开发工程师。
3）开发工程师根据安排对特定的Bug进行处理，找出代码中的错误原因，修改代码，重新生成产品版本。
4）开发工程师处理了Bug之后，测试人员需要对处理后的结果进行验证，经过验证确认已正确处理的Bug被标记为关闭（Close）状态。测试工程师既需要验证Bug是否已经被修正，也需要确定开发人员有没有在修改代码的同时引入新的Bug。
5. Bug的不同处理方式在某些情况下，Bug已处理并不意味着Bug已经被修正。开发工程师可以推迟Bug的修正时间，也可以在分析之后告知测试工程师这实际上不是一个真正的Bug。也就是说，某特定的Bug经开发工程师处理之后，该Bug可能包括以下几种状态。
已修正：开发工程师已经修正了相应的程序代码，该Bug不会出现了。
可推迟：该Bug的重要程度较低，不会影响当前应提交版本的主要功能，可安排在下一版本中再行处理。
设计问题：该Bug与程序实现无关，其所表现出来的行为完全符合设计要求，对此应提交给程序经理处理。
无需修正：该Bug的重要程度非常低，根本不会影响程序的功能，项目组没有必要在这些Bug上浪费时间。
五、成为优秀测试工程师的要求
要成为一名优秀的测试工程师，首先对计算机的基本知识要有很好的了解，精通一门或多门的编程语言，具备一定的程序调试技能，掌握测试工具的开发和使用技术。同时要比较细心，会按照任务的轻重缓急来安排自己的工作，要有很好的沟通能力。此外，还要善于用非常规的方式思考问题，尽可能多的参加软件测试项目，在实践中学习技能，积累经验，不断分析和总结软件开发过程中可能出错的环节。这样，一名优秀的测试工程师就从软件测试的实践中脱颖而出了。