标签:
微软亚洲研究院技术转化newtvisualstudio2010 |
分类: 技术 |
创新工程中心就好像是婚姻介绍所,研究员带着他的女儿(研究成果)来,希望嫁到一个好的家庭(产品组)去。作为工程师,我们的工作就是为这些成果缝制一件嫁衣,把它们包装得漂漂亮亮,让产品组满意,促成一段美好姻缘。
NEWT正是这样的一个例子,它是研究院无线与网络组交给我们的研究成果,用来在高速网络上模拟各种不同的网络特性,从而实现在一台计算机上测试各种网络环境(比如拨号网络、ADSL、WCDMA等等)。我们的工作就是为它提供更加友善的交互方式,解决各种各样的兼容性障碍,让它可以在各个操作系统、硬件设备下工作正常。当然,我们最终的目标是找到一个产品组,把这个技术转化到真正的产品中。
“内修涵养”——完善功能,让用户叫好
想要得到产品组垂青,不但需要软件本身的质量过硬,还需要在公司内部扩大它的影响力。什么叫“好”,这不由我们说得算,而是要真正的用户告诉我们。于是,我们将NEWT提供给公司内部用户,并开设了用户反馈信箱,借此收集用户的意见和反馈。一天3-4封的用户来信量看似轻松,其实对工作也是不小的负担:为了慎重,我们需要对每封信认真阅读、研究原因、找到解决方案,最后才能回信。根据用户的反馈,我们还积极调整改进界面交互,修正软件中的错误,务求让普通用户能够放心使用。用户对NEWT寄予的厚望,也成为我们加快新版本开发速度的动力。
实际上,发布一个新版本有很多的步骤。程序的功能可能有变化,安装流程也可能有变化,想要保证产品的稳定和兼容,就必须在各种不同的用户环境做充分的测试。虽然请了专门的合作团队进行独立测试,我们仍需要自己对它做全方位的测试。
在我们脚下一共堆积了8台机器,安装了不同的操作系统,模拟不同的用户环境。相信你也知道,想要充分模拟不同环境,8台机器远远不够。每次开始测试,我们需要依次进入不同的操作系统、测试,然后重启切换系统。物理机器测试完成后,还要对各种虚拟机测试。测试时,8台机器一起运转,虽然用的是静音风扇,声势仍然可观,同事们也都会投来“景仰”的目光。
8台机器齐运转,声势可观
NEWT整个安装包才1M多一点点,但是测试工作一点也不轻松。由于涉及到系统的驱动层,任何一个错误都可能给系统带来灾难性的损失,轻则蓝屏,重则给黑客留下漏洞用来攻击或窃取数据。说到这里不得不感谢公司内部的用户,虽然早期版本不稳定,经常使得他们系统崩溃,耽误正常工作。他们依然会耐心地帮我们排查问题,甚至不顾时差,在深夜协助我们找到问题的根源。
每个测试环节都以天为单位,即使用脚本来辅助测试,运行全部测试样例仍然需要1周的时间。之后,我们会给程序签名(就好像是 Windows真品保障的认证戳),然后将安装包提交到公司内部的软件共享站点。就算只是一个内部工具,我们还是会郑重其事地写一份发行公告(Release Note),并且发邮件通知所有内部用户。
“外练体魄”——提高质量,使众人放心
经过半年多的试用,大家对NEWT的反应不错,这也更加增强了我们的信心:将NEWT推广到外部市场去!如果提供给普通用户,我们需要考虑的事情就更多了。漏洞不但会给众多用户带来不便,还会直接影响公司的声誉。为此,公司会给每个产品指定一名安全专家,协助检查程序的安全隐患,并为此安排了一套严密的流程,务求将这种风险降到最低,这就是“安全审查”(Security Review)。
在这里“安全”是广义的范畴,可以是代码的质量,也可以是在文字图片上的疏失。考虑到程序会被发行到世界的每一个角落,任何遣词造句都需要再三推敲,使用的图片也需要考虑各地人们的文化和习惯。
就算是做代码安全的审查也不轻松,我们先要画出系统数据流图(Data Flow Diagram),通过一次又一次的电话会议让专家理解系统的整体流程,之后根据安全专家的建议逐步分析哪里会有潜在的风险。风险需要一个一个分析排查,并找到解决方案。事实上,我们找到了超过100个潜在风险处,经过排查后只有不到5个是真正的隐患,但就为了这5处修改,我们却花去4个月的时间。任何一个解决方案都会带来激烈的讨论,同事会指出存在的问题,又会去找新的方法,得到共识后才开始着手在代码上进行修改。而每次修改又需要进行回归测试(Regression testing),确保新的修改没有带来新的问题。
在修改代码的同时,我们也在不断学习。比如,最初NEWT的核心代码是用C++完成的,然而有专家提出“驱动程序应该用C语言完成,最好不要用C++,以避免潜在的风险”。这一消息有如头顶一声惊雷,因为我们的核心代码少说也有8000行。如果说把中文翻译成英文,我们还能找到一定的对照关系,而C++语言和C语言的从思想上就有着不同,就好比试图将唐诗翻译成宋词,简单不来。此刻重写代码不现实,我只好临危受命,硬着头皮接下了这个“翻译”的任务。我认为,“翻译得好”应该尽可能少改动代码(多改多错,少改少错),让代码看上去漂亮(大家应该都不喜欢那些蹩脚的译文吧),多人翻译的标准应一致。于是,我作为先遣部队用3天的时间试着“翻译”了约500行代码,并根据代码的特点和过程中遇到的问题制订了一套“翻译原则”,这套原则足足写了4页纸。有了具体的方法,剩下的就是开个“动员大会”,把任务布置下去。经过同事们一番努力,预计3周的工作只做了2周就结束了,而且效果比我们预想的要好,只出现了一个小问题,其余的部分一次测试通过。
前前后后花费了半年的时间,我们成功通过安全审查。在最终文档上签字画押的那一刻,大家都深深吸了一口气,深知胜利来之不易。虽然时间很长,但是我们都觉得很值,不论从自身的经验见识方面,还是从产品的质量方面,都获益良多。而事实也证明了我们的感觉:用户对新版本的NEWT反应很好,从反馈信件的内容来看,系统的稳定性有了明显的提高,很少接到系统崩溃的报告。最近的一次问题报告发生在虎年春节前,美国的同事发来报告,说在某种型号的网卡上运行20小时后,会出现一些问题,这时我们大部分同事都已经启程回家过春节了,经过留在北京的同事紧张的分析,判断问题不是出现在我们的模块,才结束了一场虚惊。
在这一系列努力过程中,产品组对NEWT的质量更加有信心了,于是就有了几次技术转化的机会。Visual Studio最终决定将NEWT的功能内置到Visual Studio 2010中,我们的“红线”也就“牵”成了。
-------------------------------------------------------------------------------------------------
作者简介:
梁潇,浙江大学本科及硕士毕业,2007年加入微软亚洲研究院,现为创新工程中心工程师,从事技术转化工作。
相关博文: