更新:Adam Cogan 发布了本篇博客的英文版。
在这篇博客中,我想和大家讲述一个真实项目的故事,在这个项目中,我和我的团队以及Adam Cogan先生倾注了大量的心血,完成了很多不可能完成的任务,最终证明了Team Foundation Server作为一个优秀的项目管理平台,可以为超大型团队提供完美的支持和性能。
与 Brian Harry 在 MVP Summit上的合影
每年2月,我都会飞到美国西雅图的微软总部参加一年一度的微软最有价值专家峰会,这一次的会议之所以有所不同,是因为在会议之前来自微软中国DPE部门总裁的一通电话,问我是否可以与微软中国一起完成一个“不可能完成”的任务,为中国一家重量级的企业完成Team Foundation Server的验证工作。带着任务,我在西雅图与TFS之父 Brian Harry 进行了沟通,获得了来自TFS产品组的支持,并在回到北京的第二天飞赴中国南方的某个城市,开始了这次征程。当时我没有想到,这将是我10余年软件研发中所遇到的最具挑战的项目,也是对微软的这款企业级产品的性能极端测试。
关于这个项目的一些背景:这家中国的企业拥有世界上最大最复杂的开发团队,有超过2万人的开发人员,并且对于服务于这些开发人员的研发平台有着近乎苛刻的性能要求。我们所要实现的系统,需要支撑这些开发人员的复杂应用场景,同时经受住高并发同时快速响应的考验。这一切都需要构建在微软的TFS平台之上,在这个项目中,我们大量使用了TFS对象模型以及TFS Integration Platform来支撑这一系列的需求。
项目开始的时候,我们并没有有意识到这将是怎样的一场考验;因为我们知道TFS已经在微软内部经过多个产品组的长期使用,微软管这个叫做:Dogfooding,也就是自己使用自己产品,用自己对于软件研发的苛刻要求来磨练这款产品。
但是,如同每一个现实中的故事,事情永远不会按照你期望的方式发生。当我们完成了大多数功能的编码的时候,我们得到了第一组性能测试数据 …
你看到的创建和查询操作不是简单的数据库操作,其中已经封装了大量复杂的业务逻辑,但是我们使用了高性能的SQL Server数据库服务器,虽然我们的数据库中有着超过2千万条数据,我还是对这个结果非常惊讶。
当然,如同每一个现实中的故事,事情还是会有一个完美的结局,这里你看到的是经过了一系列调优后的测试结果。
最终,由于我们各个指标上都达到了客户苛刻的要求,客户对于结果满意。不过你需要知道的是,这样的数据量和指标是TFS产品组都没有遇到过的,我们已经把TFS的性能发挥到了极致。
在这个项目中,我们遇到了很多的问题,在寻求这些问题答案的过程中,我们也学到了很多,在这里我仅列出那些我觉得非常重要的分享给大家:
经验1:团队协作
对于任何的软件开发来说,团队协作永远是最重要的,软件开发再也不是一个人的工作,特别是当你面对一个复杂的系统。我们所面对的系统有着非常复杂架构,仅就微软的产品来说,就包括了TFS 2012,SQL Server 2012,Windows Server 2012,IIS 8等,以及TFS Web Service及TFS Object Model。能够完成这样一个项目,很大程度上是由于我们获得了来自多个方面的支持,形成了这样的一个全球性的专家团队,大家目标一致,精诚合作。
在这个项目中,我获得了来自微软中国,微软总部,我的澳洲同事,以及来自全球各地的多位MVP的支持,绝对称得上是史上最精英团队,他们包括:Brian Harry (微软院士,TFS之父),Julia Liuson (TFS研发团队,全球副总裁),Aaron Hallberg (TFS研发团队),Tigao Pacoal (ALM MVP),Ramesh Rajagopal (微软研发团队),易永明(微软中国技术专家) 等等很多人。
简单来说,想把事情做好,首先你需要有足够并且正确的资源;这个精英团队是这个项目能够成功的决定性因素。
经验2:测试提前
在这个项目中,我们全面使用了Scrum作为项目管理模型,并引入了大量敏捷开发方法。我们在第一个迭代中就开始使用持续集成,单元测试,自动化性能测试。不过,我们仍然遇到一个巨大的挑战,这就是直到项目的后期我们才获得足够的硬件来完成真实的压力模拟。
在前面你看了我们的第一份测试报告确实非常糟糕,不过令人欣慰的是,由于我们的Scrum模型使得我们给予了客户足够的透明度,客户对于这样的结果并没有特别的失望和惊讶(因为大家都很清楚我们没有足够的硬件来测试足够的压力)。这也为我的团队争取了宝贵的时间,使得我们可以与正确的人取得联系,获得足够的支持,并最终解决问题。
(以上2个经验都与技术无关,但是对于软件项目的成功来说,他们至关重要;在第二部分中我会列出更多的技术细节)