比尔●盖茨曾经说过:“微软不是一家软件开发公司,而是一家软件测试公司。” 足见其对于软件测试的重视程度。 ATC( advanced Technology Center,微软亚洲工程院)测试组负责微软某些产品的测试工作。其测试工作的方法沿袭微软的工作习惯和软件测试的普遍方法,同时因其测试对象的特殊性,又具有其自身的特点。从本期开始,我们将陆续邀请ATC测试组的相关负责人来介绍他们所认识的测试工作,以及如何进行测试工作的。

  你喜欢“找茬儿”么? 或者你有着和别人不一样的思维方式,总能发现问题的存在?是不是从小被称之为“破坏”呢? 或者能够静下来,在纷繁复杂的事物里找到你想要的东西?如果你满足以上两条或者更多的条件,那么请关注一下你可能非常适合的行业――软件测试。

  认识测试工作

  由于种种原因,国内的软件测试并没有规范化,也没有真正地被重视起来,甚至没有被足够地了解。许多软件公司都没有自己独立负责测试的部门,也不会把测试工作外包出去,开发人员往往是自己开发自己测试,边开发边测试,这种很原始的测试方式,没有比较科学的方法指导,更没有文档可依。这样的局面让之前提到的软件测试天才们没有足够的用武之地。

  然而,软件测试是在有限的时间内提供高质量软件的保证,是一个完整正规的软件开发过程中非常重要的一个部分。在大型的软件公司里,往往软件测试工作被高度重视,在微软也不例外。ATC测试组负责Exchange Server、MSN Search、IE、Office Communicator等产品的测试工作。在这些产品发布之前,都要经历无数次严格地测试,并且测试工作不是从开发人员开始编写代码的时候才开始,而是从该产品建立研发项目伊始,一直作为项目进行的一项重要工作而伴随项目的进行贯穿始终的。

  软件测试的任务不仅包括通常认识中的找出软件中存在的缺陷和错误,在不同的操作平台下软件的兼容性以及是否存在安全漏洞等等,作为一个的软件,还要在用户使用习惯和体验方面进行大量深入的考虑,所以要找出软件提供的功能和用户需求有出入的地方,在检测软件 的执行效率和对于破坏性操作的承受能力是否在用户容忍度范围内等等,这些涉及到非软件功能上问题的测试工作同样很重要,但是通常容易在工期或者其他因素影响下被忽视。微软件的产品之所以能被广大用户接受,其良好的用户体验是一个非常重要的因素,其中有测试人员在改善用户体验和使用习惯方面所做出的巨大贡献。

  工作的角色和职业的发展

  如同大家对测试工作知之甚少一样,对于测试人员的职业道路的发展也不被大多数人熟知。兴趣和个人的期望发展方向因人而异,测试工作人员也能够选择驾驭还是领导团队。

  在ATC成为软件测试工程师)SET-Software Test Engineer)后,可以按照自己的喜好和特长继续发展。通过努力,可以成为在测试方面的软件设计工程师(SDET-Software Design Engineer In Test),之后,如果痴迷于具体技术的研究和应用,可以继续发展成为测试技术主管)Technical Lead), 后成为测试架构师(Test Architect)――测试技术方面的顶峰职位;若是有领导才能,钟情于在团队中扮演领导角色,可以尝试发展成为测试主管(Test Lead)和测试经理(Test Manger), 终成为测试总监(Test Director)。

  不同阶段的测试工作

  在微软,软件产品的研发项目一般都分为产品定义阶段、设计阶段、开发阶段、确认阶段和发行阶段,测试工作则覆盖到这里的每个阶段,在每个阶段的工作重点都有不同。

  通常大家认为在产品定义阶段,测试工作的介入还为时尚早,事实上测试人员在这个时候也已经开始忙碌起来。他们会根据产品规格书的描述理解产品,然后对照需求文档,找到其中不符点,并综合考虑项目的要求和资源,对纳入需求和开发目标的功能进行取舍,然后向项目经理反馈变更,同时开始构建测试的基础架构。在产品的设计阶段,测试人员在开发人员忙于设计产品同时,审视开发设计的文档并给出反馈意见,同时准备制订测试计划和开发测试工具的工作。开发阶段可能是Bug多的时期,ATC测试组的工作人员会将找到的Bug提交到开发组中一个共有的数据库中以供开发人员参考。为了防止针对某个Bug的修正引发更多的问题,他们在开发人员修正完Bug之后经过严格反复的测试,才能将修正后的代码重新发布到团队共有的代码库中。产品在确认阶段将不再有大的变动,这个时候测试工作仍然紧张地进行,不但针对功能进行测试,还会进行针对性能,压力和安全的测试。目的是为了保证产品的稳定性和提高用户体验方面。测试人员的神经在发布阶段通常仍然非常紧张,担心在这个时候出现较大的问题而影响产品的发布。然而众所周知,没有完美的软件,所以在这个阶段查找出来的Bug需要测试人员去全面权衡是否那么重要,一定要去修复,如果时间紧急并且不那么重要,要对这样的Bug进行有效的取舍了。

  在产品进行测试的过程中,有时候也会发现操作系统和其他产品的安全漏洞和Bug。与软件公司不同的是, ATC测试组将会把这些问题及时反馈给微软件负责相关产品研发的部门,或者累积到下一个版本集中解决,或者是发布补丁来进行修下。

  另外,由于测试工作是个“得罪人”的职业,测试人员如何能和开发人员进行有效且友好的沟通需要他们在平时提升自己的沟通水平和人格魅力了。

  人工测试和自动测试的选择

  对于一些大型的软件来说,测试工作确实是非常复杂和繁重的。在繁重的测试工作中,善于平衡人工测试和自动测试来进行工作可以节省很多的人力和时间,也能将工作做得更好。例如很多时候,对于软件测试中存在要在一定时间内完成类似枚举的大量重复或者需要模拟大量用户访问的服务器压力承载能力的工作时,测试人员往往会借助测试工具或者自己编写测试代码进行软件的自动测试来代替人工测试以节省时间和人力。例如,在测试BizTalk Server的时候,由于该产品涉及到26种人类语言,需要在多种不同的操作平台和不同的编码语言的情况下对软件进行全面的测试,浩大工作只能交给测试工具和软件自动测试来进行。在这种繁重的工作下,利用自动测试来能够避免由于人工的疲倦和其他影响因素造成的误操作带来的无效或者不准确的测试结果,而这是测试工具和自动测试所不会有的问题。

  在对于产品的性能、压力承载能力方面,自动测试能够模拟出例如大量的访问量这亲的场景来进行测试,这个优势是人工测试无法涉及的。对于像产品的功能以及本地化/全球化这样方面的测试,也同样是自动测试的优势所在。