转:网络模拟利器NEWT的前世今生

在我研究院多年的工作中,从被应用的广泛程度来讲,NEWT(Network Emulator for Windows Toolkit)无疑是我做过的所有项目中最有影响力的项目了。自从2004年发布第一个内部版本以来,公司每天都有很多大大小小的部门和小组在使用NEWT。有些部门不仅自己长期使用,还帮我们大力推广,极大地提高了NEWT的知名度。在公司内部的工具箱站点上,NEWT的下载量超过10000多次,在所有的相关工具中名列前茅。对此,我深感自豪。 

NEWT的前世今生

 NEWT随产品正式发布后获得的SHIP-IT荣誉奖章

 

NEWT一世,纯粹自娱自乐的产物

 

NEWT是一个简单实用的网络模拟工具软件。它可以在一个可靠的物理链路(比如Ethernet)上模拟出其它各种类型的网络连接(比如WiFi,GPRS,ADSL等)。基于成熟的数学模型,NEWT能够精确地模拟各种网络参数(带宽,延迟,丢包,乱序等)和排队模型。它直接作用于实际的网络报文,可以实时地把Ethernet变成用户所需的网络类型。无需搭建实际网络,用户就可以方便地测试应用程序在不同网络环境下的性能,从而能够大大加快开发周期和节省大量成本。

NEWT的前世今生

 NEWT早期的用户界面

 

正如标题所示,NEWT有一段相对“悠久”的历史。其诞生要追溯到2002年。那时我所在的研究组(无线与网络组)刚成立一年。由于我们组主要做网络尤其是无线网络的研究,就需要各种不同类型的网络来验证我们的算法和演示我们的结果。因为搭建和配置实际网络耗时长成本高,我们迫切需要一款网络模拟软件工具。那时候市场上相关的软件工具还很少。我们曾经购买过一款软件,但其功能有限,不能满足我们的很多需要,而且价格昂贵。我记得一个许可证要1000多美元,搭建一个10台机器的系统就要一万多美元了(相比之下Windows真是太便宜了)。因此,我们决定自己开发。这样,NEWT一世就诞生了。那时候我们称它为WiNE(Wireless/Wired Network Emulator),主要服务于我们组的研究工作。

 

NEWT二世,痛并快乐着

 

2003年,研究院成立了微软亚洲工程院(简称ATC)。当时其主要工作是立足于研究院的研究成果进行产品转化。但与以往不同的是,其运作模式是由产品部门提供经费来支撑ATC的人员和运营费用。由于“有钱可图”,ATC项目一时成为各研究组竞相追逐的对象。WiNE有幸成为第一个ATC项目(由Windows Networking部门赞助),而我也有幸作为研究人员和主要开发人员之一全程参与了整个项目。ATC项目与研究项目最大的不同在于:研究项目只要证明想法可行并有一个可用的系统就可以了,出了问题可以随时修改;而ATC项目是完全严格按照产品的开发周期进行的,非常强调代码质量和可靠性。这就是做研究和做产品的区别。我们前院长张亚勤去总部做了产品部门的VP后回来给我们做报告时曾经形象地描述过这种区别。大意是说,做研究时我们经常兴奋地讲“Yes! Let’s do it!”,而做产品时却要时刻控制住自己的冲动说“No, don’t do that.”。所以做研究往往是后来做了很多原来没有想到的东西,而产品则常常是在最后删除了不少原已设计的功能(feature cut)。通过这次ATC项目,我深深地体会到了这一点。

 

于是,我们组建了一个包括开发人员和测试人员大概七八个人的队伍,开始了轰轰烈烈的ATC项目。但没想到的是,我们的痛苦历程也随之开始了。由于我们的队伍主要由研究人员和新员工组成,基本上没有做过产品的经验。而当时的情况是我们已经有一个可以使用的系统,只是所有的核心算法都是工作在用户态。所以主要的开发工作是把已有的算法移植到内核态以提高系统性能。因此大家乐观地认为这是小菜一碟,很快就可以完成任务。然而事实证明我们错了。虽然代码很快就写完了,但一测试就发现问题很多。测试过程就是写一大堆测试程序和设计各种使用场景(统称为test case)来测试代码所有的功能和逻辑。测试讲究的是代码覆盖率(code coverage),理想情况是100%,即每一行代码都要测试到。当时我们大概有上百个test case,而且要测试不同的操作系统版本(包括Windows 2000, Windows XP, Windows Server以及它们各个不同的SP版本)。除了32位机器,还要测试64位机器。测试中发现的每一个错误都要反馈给开发人员进行修改。例行流程是开发人员每天发布一个版本(daily build)由测试人员进行测试,这样开发人员每天早晨就能看到前一天的测试结果,立即着手解决所发现的问题。这种测试的严格程度和我们平时做研究时的日常使用完全不是一个级别,从而很多潜在的问题就出现了。而我们当时已经和产品部门定好了时间进度表(当然是基于我们的过度乐观估计),请求延期实在是很没有面子。这样,我在研究院所经历的最为艰巨的时期之一就开始了。至今我还清晰地记得我和倪征(当时另外一个主要开发人员)一起战斗过的那些夜晚。

 

NEWT的前世今生

NEWT 所拥有的技术专利

 

像很多故事一样,结局是好的。我们充分发扬了研究院艰苦奋斗的传统,战胜了困难,完成了任务。就是那时(2004年),我们的成果有了一个新名字N.E.W(Network Emulator for Windows),是我们当时产品部门的合作伙伴起的(因为WiNE这个名字已经被人使用了)。我们称之为NEWT二世吧。也就是从那时起,N.E.W开始在公司内部得到了广泛的应用。当时我统计过,在不到一年内就有70多个有据可查的大小部门在使用。现在具体的数目已经无从查起了,但可以肯定的是NEWT已经成为公司内部进行网络模拟的事实上的标准工具了。在N.E.W之后,Windows Mobile部门还赞助了一个新的ATC项目叫做CENEW,把N.E.W移植到了Windows CE平台上。我那时已经回到我所在的研究组,不再担当开发人员的角色,只是作为顾问做了一些辅助工作。再之后,随着队伍成员逐渐调往其它项目,从2005年后期起,N.E.W没有了专门的技术支持和维护人员。虽然倪征和我还经常抽空回答一下用户们的问题,但N.E.W的开发已经完全停止了。

 

NEWT三世,走出微软服务大众

 

N.E.W再次焕发青春已经是2007年的事了。在多年的使用中,用户报告了不少问题。而随着公司的机器逐步升级到Vista,N.E.W在新的系统上也遇到了一些新问题。很多用户纷纷希望N.E.W能够推出新版本解决这些问题。研究院的老大们敏锐地注意到了用户的需求,决定自费投入人力继续开发维护N.E.W。这个任务落到了邹欣和他的精兵强将(主要是杨帆和梁潇)身上。他们不负众多用户所托,干净利落地解决了各种新老问题,并且增加了一些新功能,完善了用户手册,改进了用户界面,使得N.E.W更加强大易用。邹欣是一个严谨的人,他觉得NEW不是个名词,不适合做名字,也不便于被搜索,就起了一个新名字NEWT(Network Emulator for Windows Toolkit),也就是现在的名字了。NEWT全面支持Vista和Win7,是一个新的里程碑,成功进化到第三世。更重要的是,依托邹欣多年在产品部门的经历和人脉,NEWT的核心代码已经先后成功地转移到了微软的产品Xbox XDK,Games for Windows Live,以及Visual Studio 2010(当前是Beta 版本,即将推出RTM版本)之中。这样,NEWT就走出了微软,能够为更广泛的人群服务了。

  

回想过去这几年参与NEWT的经历,我觉得我为之付出的时间和精力非常值得。虽然NEWT本身没有很高的学术价值,但如果让我选择我至今在研究院做过的最成功的事情,我仍然会选择NEWT,因为每天都有很多人在使用它。通过NEWT,我学到了很多,对于软件开发和项目管理有了更深刻的认识,从而也能更好地开展我所从事的研究工作。NEWT进入了Visual Studio,更是让我感到非常满足,因为这意味着NEWT能够帮助无数的开发人员开发出更好的程序。而微软作为一个平台软件的提供者,我一直认为从某些意义上讲赢得程序员比赢得用户更重要,因为一个成功的程序员背后往往站着众多忠实的用户。

 

致谢

NEWT是很多人心血的结果。在NEWT随着Visual Studio发布之际,谨以此短文献给所有为NEWT努力过的同事们,感谢他们为NEWT所做出的贡献,感谢NEWT所有的用户。有些同事没有看到NEWT开花结果就离开了,希望他们看到此文能和我一样欣慰。文中如有谬误不实之处,恳请指正。

 

作者介绍

刘云新:1998年获中国科学技术大学学士学位,2001年获清华大学硕士学位。之后加入微软亚洲研究院,现为无线与网络组研究员,从事系统和网络方面的研究工作。

原文地址:https://www.cnblogs.com/gaozehua/p/2993435.html