1999年6月,微软开始重新评价Visual Studio在软件开发过程中的作用。虽然微软的Developer Division多年来一直支持开发社区,但是没有能够解决在团队环境下的软件开发所面临的挑战。例如,在Team System之前,微软用于架构师的工具是什么?Microsoft Visio是最重要的工具,用于UML图的设计。在Visio中还有一些更不为人知的设计工具。然而,在Visio图和Visual Studio的代码之间,并没有健壮的双向集成。另一个问题与工具本身有关。对于建立一个有效的软件开发团队而言,你必须购买很多第三方的工具(或使用开源工具),用于版本控制和团队沟通等任务。这些工具根本无法集成。 以下为常见的场景:你使用如Microsoft Excel、Word或Project等程序,编写任务或需求列表,发送给你的团队。接着你不得不与你的团队沟通这些任务,当他们完成任务或状态改变时再反馈这些任务。为此,你不得不进行多次复制和粘贴。过程完全是手动的,没有任何自动化帮助或捷径。你也不得不通过电子邮件来进行沟通。电子邮件的问题是你的团队成员可能会丢失信息,可能服务器也会阻止你的邮件传递等。 在Team System之前,微软唯一的版本控制产品是Microsoft Visual SourceSafe。SourceSafe对于单个开发人员或小型团队而言是很好的工具。但是,当有很多开发人员并发工作时,它的可伸缩性不能满足要求。此外,不可以在Web上使用它。 Visual Studio的Enterprise Tools团队启动了一个代码名为“Burton”的项目,创建一个可以与Visual Studio集成的团队产品,处理集成和可伸缩性的挑战。 “Burton”这个代码名来自于位于Vermont的十分有名的滑雪板和服装公司。很多微软的员工喜欢在业余时间滑雪,于是很多产品的代码名都是用与滑雪相关的地点和设备来命名的。例如,Windows XP的代码名来自于位于British Columbia的 Whistler山。 在2004年5月,经过了5年的研究、计划和开发,微软发布了Visual Studio 2005 Team System。Team System由在微软内部使用多年的经验和工具组成,例如PREfast、Product Studio和Source Depot。Rick LaPlante(Team System的总经理)做了keynote演讲和端到端的演示,从而改变了人们对Visual Studio的看法。Visual Studio产品的第一个主要改变是按照IT组织的角色来集成工具:架构师、开发人员、测试人员和项目经理。另一个主要的改变是专注于软件开发生命周期(SDLC)。在此产品中,可以使用Microsoft Solutions Framework,它不仅为软件开发提供了框架,而且包括过程指南和集成。 现在,已经可以从市场上购买Team System的产品了,同时你也可以通过本书学习它。本书将为你提供Visual Studio Team System所有重要功能的端到端的介绍。依照Wrox的精神,本书将包含很多实践信息和动手内容,按照Team System的角色逐个进行介绍,可以适用于担任各种角色的读者。 Team System的一个重要方面是它可以适应用户的特殊需求。与其他的微软产品不同,例如Office,Team System不是直接拿来就可以使用的。你应该花些时间配置它,应用你的策略和最佳实践—— 本质上,按照你的软件开发流程来裁减它。如果你已经建立了很好的开发过程,并且工作良好,为什么你要改变它呢?相反,如果你的开发过程是即兴的,那么Team System将为你提供很好的框架和可用的过程。 Team System是一个很大的产品,可以将本书作为你学习Team System的起点。与Wrox的其他专业书籍一样,本书不仅介绍重要的功能,而且将研究其详细内容。 Team System由几个逻辑层组成。图1给出了一个非常高级别的Team System架构。 图 1 以下是Team System中各层的详细介绍。 客户层 客户层由几个Visual Studio 2005基于角色的版本组成,以及一些用于连接Team System应用层和数据层的其他工具。下面介绍Team System客户层的4个产品: ● Visual Studio 2005 Team Suite包含Visual Studio 2005 Team Edition for Software Architects、Visual Studio 2005 Team Edition for Software Developers、Visual Studio 2005 Team Edition for Software Testers。这个产品适用于具有多种角色的团队成员。Team Suite也适合于安装到Team Foundation Build服务器,用于发挥Developer和 Tester版本的测试功能。 ● Visual Studio 2005 Team Edition for Software Architects包含了很多工具,在软件项目的设计阶段和开发阶段,支持应用程序架构师和基础设施架构师。它包括几个设计器,例如应用程序建模、基础设施建模、部署建模工具。不应将这个产品与Visual Studio .NET 2003 Enterprise Architect产品相混淆。以前的Enterprise Architect工具主要是为Visual Studio .NET 2003而设计的。Team System中对应的工具是为Visual Studio 2005 Team Suite而设计的。 ● Visual Studio 2005 Team Edition for Software Developers包含了托管代码和非托管代码的静态代码分析器、动态代码分析器(AppVerifier)、单元测试、代码覆盖率和代码性能工具。 如果你希望在生成过程中进行静态代码分析或动态代码分析,那么应该将这些测试添加到一个测试任务中,并且在你的生成服务器上安装Team Edition for Software Developers版本(或者安装Team Suite)。 ● Visual Studio 2005 Team Edition for Software Testers具有测试用例管理、性能和负载测试、单元测试、代码覆盖率、手动测试等功能。如果你希望在生成过程中进行测试,那么你应该在生成服务器上安装Visual Studio 2005 Team Edition for Software Testers(或Team Suite)。 完成Visual Studio安装之后,还需要安装团队资源管理器。团队资源管理器是客户端插件,可以使用它连接到Team Foundation Server,创建团队项目,管理项目的详细信息。团队资源管理器也可以作为独立的工具单独安装。它与Visual Studio看起来一样,但是占用的存储空间很少。注意,不能在这个工具的独立安装版本中编写代码(需要安装Visual Studio才可以)。也可以使用它进行源代码管理操作,与Visual Studio .NET和其他开发工具一起使用。项目经理也可以使用它。 虽然不是Team System的官方组件,但是Microsoft Office Professional 2003(特别是Word和Excel)以及Microsoft Project都可以用于与应用层和数据层进行交互。Excel 和 Project可以用于管理工作项和需求,Word用于创建手动测试。通过直接连接到数据层,Excel可以使用透视表来生成项目数据的视图。 第1~17章包含客户端工具的内容。如果对项目管理和报告感兴趣,那么应该阅读第19章。 应用层 Team Foundation Server具有应用层和数据层。Team Foundation Server具有很多集成的功能,包括项目管理能力(基于SharePoint的团队项目门户站点、工作项跟踪、报告)、自动生成和版本控制系统。Team Foundation Server也提供对细粒度安全性、策略和其他管理能力的支持。第18~24章涵盖了每个功能。 我们不介绍Team Foundation Core Services。其原因是在本书编写时,编程功能和API经常变动。关于目前的文档和实例,我们强烈推荐你访问Visual Studio Extensibility Center 网站。 数据层 Team System的数据层构建于Microsoft SQL Server 2005的基础上。选择这个产品可以减少应用程序的复杂性,缩短投放市场的时间。因此,Team System不能与第三方数据源兼容,也不与Enterprise Data Services (EDS)进行集成。Team System的数据层用于存储Team System的数据,例如源代码、工作项、报告数据、项目设置。第19章涵盖数据仓库的内容。第24章将介绍如何备份和恢复数据库。 现代软件开发面临的挑战 无论团队大小,软件开发人员都会面临一些相同的挑战。业务要求高度的稳定性,软件开发只有很少的时间,且不能失败。软件开发人员面临的一些挑战如下: ● 集成性问题。在Team System之前,用于软件开发的大多数工具来自于第三方提供商。集成这些工具是很困难的—— 在很多情况下,为了使用它们,必须将项目数据复制到不同的软件包中。每个应用程序都需要学习和培训,从一个应用程序向另一个不兼容的应用程序传递信息是很困难的,且很费时。 ● 地理上分布式的团队。很多开发和管理工具不能用于地理上分布式的团队。获得精确的报告是很困难的。对沟通和协作工具的支持很差。因此,从需求到规格说明书的映射有误,导致延迟和错误的引入。整个团队需要健壮的设计、过程和软件配置管理。但是,根本没有具有所有功能的软件包,而且现有的软件价格十分昂贵。 ● 角色分离。分工是团队很大的问题。人们可能会假设其他部门已经知道了某些重要信息,于是这些信息就没有出现在状态报告中,但是却对整个团队有重大的影响。部门之间的沟通存在很大的问题。 ● 错误报告。这也是分工问题。大多数情况下,每个团队都需要手动生成报告,于是降低了生产率。没有工具可以从不同的数据源收集数据。所以,项目的领导者缺乏用于决策的重要数据。 ● 缺少过程指南。即兴的编程风格不适于大型项目。如果在代码中引入变更,那么可能导致严重的问题,需要几个小时或几天来解决。当今的软件具有很高的依赖性。不幸的是,大多数工具不能与过程指南相集成。这可能造成工具和过程之间的不一致。 ● 低估测试的重要性。测试周期短暂或没有测试,可能导致过程后期存在很多代码缺陷。在Visual Studio中没有集成的测试工具。 ● 沟通问题。大多数公司使用各种各样的沟通方式,例如电子邮件、即时通信、备忘录、张贴公告,将信息发送给团队成员。如果不小心,可能很容易丢失一页纸,或者删除了一个重要的电子邮件。为了保持团队按照计划工作,就必须频繁召开费时的状态报告会议,并且使用很多手工过程(例如发送电子邮件,复制粘贴报告)。重要的问题是在工具和项目经理之间缺乏有效的沟通方式。 很多公司引入方法论和实践,以简化和组织软件设计过程,但是应该平衡这些方法论。目标是使过程具有可预测性,因为在可预测的情况下,方法论才保证项目能够按时完成。然而,方法论也向软件过程添加了一些新任务,例如生成报告。如果你的开发人员在这些任务上花费了过多的时间,那么就降低了他们的效率,也降低了你的公司的竞争力。 Team System如何解决这些问题 Team System的设计目标是转移或根除这些问题。在Team System背后有三个基本原则:生产率、集成性和可扩展性。 Team System通过以下方法提高生产率: ● 协作。Team Foundation Server集成所有团队协作。团队门户管理工作项、源代码和生成。所有的报告也是集中式的,使项目经理很容易跟踪所有的过程,而不用考虑这些关键指标的来源。 ● 复杂性。在Team System的项目中,可以集成和强制执行过程和项目计划。此外,通过可视化设计器,架构工具降低了面向服务的应用程序的复杂性。 通过以下方式可提高集成性: ● 集成工具促进了部门间的沟通。更重要的是,它们消除了信息障碍。Team System所有工具产生的报告都存储到Team Foundation Server。 ● Visual Studio的不同版本具有相同的工具。例如,Team System的Developer 和 Tester 版本中都有单元测试工具。这些工具用于在不同的版本之间移交工作。 ● Team System提高了项目的透明性。项目经理可以在团队门户中很容易地查看关键指标,通过识别模式和趋势来预先避免问题的发生。 Team System的可扩展性有以下三种方式: ● Visual Studio Industry Partner Program。多于190个合作伙伴参加,提供450多个与Team System集成的产品。 ● Team Foundation Core Services API。Team System大多数平台都开放给了开发人员,从而提供了很大的可扩展性。Team Foundation Core Services仍然在开发之中,是针对希望与这个平台进行集成的开发人员和供应商而设计的。 ● 元数据框架。为合作伙伴提供的框架,用于开发基于模型的设计器、Team System 和Visual Studio的插件。 软件开发生命周期示例 在真实世界的场景下,Team System如何工作呢?为了展现如何使用这些工具,我们虚构一个称为eMockSoft的软件开发公司来运行典型的场景。eMockSoft最近与一个发行商进行合作,发布目录查询产品。这个发行商要求使用安全的Web Service,在网络上传递货物清单和价格信息。我们将对此场景应用软件开发生命周期和Team System的工具。 软件开发生命周期的基本阶段,如图2所示。 图 2 需求 项目经理与出资者举行会议,收集项目需求。根据这些需求,项目管理团队创建规格说明书列表和模板。在Team Foundation Server中,项目经理使用MSF for Agile Software Development过程创建新的项目。在团队门户中,将自动在服务器上生成报告和模板。项目经理使用Microsoft Project创建工作项列表,并进行任务指派。然后,基础设施架构师将接到他或她的第一个工作项。 系统设计和建模 基于客户的规格说明书,基础设施架构师使用逻辑数据中心设计器工具,定义新的外部服务。他应该打开服务器的端口,允许向外提供Web Service。此需求包括在443端口上启动SSL。架构师接着添加合适的终结点和边界,以允许此服务向外通信。最后,给解决方案架构师指派工作项。 解决方案架构师使用应用程序设计器创建安全的Web Service模型,使用部署设计器针对网络拓扑结构进行验证。之后,她使用Visio来完成建模任务。Team System使她可以与基础设施架构师、开发人员、项目经理进行沟通,实时地修改她的设计。使用类设计器,解决方案架构师可视化地设计必要的对象和方法,从而完成她的工作项。 在这个场景背后,项目经理可以跟踪设计过程,包括生成的设计图。基于规格说明书,他可以给团队中的开发人员指派任务。项目经理在团队门户上创建项目计划,从而减少了很多状态报告会议。 代码生成 开发人员接到指派给他的工作和解决方案架构师创建的类图。已经从类模板自动创建了必要的类—— 开发人员仅需要添加业务逻辑。他在团队门户站点上查看规格说明书:应用程序需要使用WSE 2.0的安全的Web Service。开发人员编写必要的代码,并进行一些初步的测试。当天结束时,开发人员将代码签入到Team Foundation版本控制中。 测试和质量保证 测试人员检查她的每夜生成和自动测试。她执行Web和负载测试,从中发现了开发人员的代码缺陷。测试人员接着填写Bug工作项,指派给开发人员。 项目经理可以跟踪所有的Bug报告和工作项,于是他就可以为eMockSoft的管理团队提供状态报告。使用SQL Server 2005 Reporting Services,项目经理可以实时地提供可视化的报告和关键指标。 部署 项目完成后,就要部署解决方案。在最初阶段,解决方案架构师就可以针对目标基础设施的约束来测试应用程序。接着由发布经理部署应用程序。部署变得十分顺利。 本书读者对象 本书主要适用于商业或企业的软件开发专业团队—— 换言之,本书适用于中高级读者。如果你符合以下条件之一,那么你将会发现本书十分有价值: ● 希望学习微软新一代开发工具的开发人员、测试人员、架构师 ● 希望启动和管理项目的项目经理 ● 希望评价Team System的IT实施者 ● 希望学习如何维护和配置这个新产品的IT专业人士 本书和产品都不是为绝对的初学者而设计的。我们给出高级和实用的工具应用程序、代码实例、案例分析、场景和自动化脚本。本书的组织结构适合作为指导和参考,用于建模、设计、测试和实现企业解决方案。 Team System是为任意规模的软件团队而设计的,因此无论你是拥有一个五六个人的团队,还是拥有2000个人的团队,本书都包含对你有价值的信息。本书适用于架构师、开发人员、测试人员、项目经理和管理人员。 本书所涉及的内容 本书包含对Team System完整的介绍,从设计到部署。按照软件开发团队的角色,本书分为四个主要的部分。 ● 第一部分,Team Architect:基础设施和解决方案架构师 ● 第二部分,Team Developer:软件开发人员 ● 第三部分,Team Tester:软件测试人员和质检测试人员 ● 第四部分,Team Foundation:项目管理 本书的结构 第1章介绍可视化设计及分布式系统设计器和类设计器。该章描述了可视化设计工具的功能,展现了分布式系统设计器和类设计器等工具的主要集成点。此章的亮点是StockBroker案例分析,实际演练这些设计器。 第2章使用应用程序设计器进行建模。可以使用应用程序设计器添加外部应用程序(例如Web Service和外部数据库),用于预定义系统。该章介绍了应用程序设计器的工具箱和原型,如何使用工具集进行分布式系统设计的过程,如何实现应用程序以及如何添加约束。 第3章使用逻辑数据中心设计器对逻辑基础设施建模。逻辑数据中心设计器是用于创建描述数据中心结构的逻辑服务器图。该章介绍了LDD工具箱组件和原型,展现如何创建逻辑数据中心,如何配置它以用于预定义的系统。也使用第1章中介绍的StockBroker案例分析来阐明示例。 第4章主要介绍系统设计器和部署设计器。该章的第一部分详细介绍了这两个设计器。该章后面,将学习如何使用应用程序连接设计器来创建部署。你也将学习如何定义和部署整个系统,创建部署报告。 第5章专注于介绍Visual Studio 2005类设计器。类设计器不是Team System的设计器(Visual Studio 2005标准版及其更高级的版本中都有),但可以使用它进行对象建模及创建模板(与架构师工具互补)。你将学习设计器和相关工具的功能,以及如何将类图转换为代码,反之亦然。最后,你将学习类设计器的高级功能,包括代码同步、模式建模和动态建模。 第6章描述Microsoft的域特定语言SDK。你可以使用SDK定义域特定语言(DSL),之后使用你定义的语言来自定义设计器。这些Visual Studio 2005的设计器可以用于生成代码或文件—— 事实上,可以做任何事情。 第7章深入介绍动态系统计划(Dynamic Systems Initiative,DSI)。你将学习有关DSI的核心原则,以降低基础设施的复杂性。该章也给出了Team System中DSI工具的总体介绍,DSI工具可以用于设计、部署和操作分布式系统。你也将学习系统定义模型(SDM)。SDM是XML文档,它在部署生命周期中的硬件和软件资源中定义系统。该章给出多种模型、类型和资源。你也将学习如何创建SDM和使用SDM设计。 第8章介绍本书的Team Edition for Software Developers部分的托管代码分析。它主要介绍托管代码分析工具(FxCop)。FxCop可以分析.NET托管代码应用程序集与.NET框架设计指南的兼容性。它检查安全性、性能和很多其他种类的问题。你也将学习FxCop的界面,如何实现代码评审,以及如何应用FXCop规则。 第9章介绍C/C++代码分析。C/C++代码分析工具(PREfast)可以检查C++代码的稳定性,捕捉编译器不能识别的错误。在此章中,你将学习它的工作方式、配置方法,以及实际调试错误的技巧。 第10章介绍应用程序验证工具。你将学习如何设置和配置应用程序验证工具,以检测堆损坏、加锁的错误、非托管代码中的无效句柄。此章也提供了产品的端到端的介绍,以及如何通过编程来控制Visual Studio动态测试引擎的信息。 第11章描述重构与代码段。重构是通过不断地整理代码结构,从而得到更松耦合和更高质量代码的方法。你将学习如何使用Visual Studio 2005对图和代码进行重构。你也将学习如何在VB.NET 和 C#中使用代码段管理器的实例。 第12章专注于性能分析与性能。你将学习如何使用Team System代码性能工具,通过采样和检测的方式来测试你的代码性能。代码性能工具是十分重要的,因为它可以发现效率低下的代码,从而帮助开发人员优化应用程序的性能。 第13章阐述如何在Team System环境中测试用例管理。在此章中,将学习如何使用测试用例管理器来创建测试项目。 第14章介绍了使用单元测试框架进行单元测试。此章给出单元测试的核心概念和最佳实践。你将学习如何使用Team System来创建简单的单元测试,如何利用框架来管理测试结果。你也将学习测试驱动的开发(TDD)和代码覆盖率。 第15章描述Web测试和负载测试。此章中,你将学习如何创建和配置Web和负载测试。你也将学习命令行工具,使用代理和控制器来搭建测试平台。 第16章主要介绍手动测试。本章描述了自动化测试和手动测试的区别。你将学习如何创建和配置手动测试,如何设计自定义模板。最后,你将学习如何运行测试,并将测试结果发布到Team Foundation Server。 第17章介绍一般测试。此章中,你将学习如何创建一般测试和注释错误代码。你也将学习如何使用Windows脚本主机来创建和运行外部工具,并且给出一个托管代码的实例。 第18章讲述Team Foundation Server的架构。你将学习Team Foundation Server的核心功能,包括客户端、组件和架构。 第19章介绍了项目管理工具和Team System中的报告。你将学习如何创建团队项目门户站点,如何管理项目的详细信息。接着,你将学习与工作项相关的内容。你将看到Team System中的报告怎样提供高级别关键指标和数据,用于度量你的项目状况。 第20章描述Team Foundation 版本控制。你将学习它的主要功能,例如签入和签出、搁置,以及如何使用源代码资源管理器进行源代码存储。 第21章介绍Microsoft解决方案框架(MSF)。你将了解MSF for Agile Software Development和MSF for CMMI Process Improvement。你将学习每个过程的相关角色和组件。 第22章描述过程模板。此章是第21章的延伸,介绍更深入的内容。你将学习如何修改和设计自定义的过程模板。 第23章介绍Team Foundation Build。介绍完强大的生成引擎之后,你将学习如何实现特殊的生成配置,例如连续集成(CI)。 第24章描述如何部署和管理Team System。此章介绍与IT专业人士相关的内容,例如工具迁移、备份恢复策略等。 源代码 在练习本书中的示例时,读者可以手动输入所有的代码,也可以使用随书附带的源代码。本书中的所有源代码均可在或www.tupwk.com.cn/downpage站点下载。登录Web站点后,只需找到本书的标题(可以使用Serach功能或标题列表)并单击显示本书详细内容的页面上的Download Code链接即可获取源代码。 由于很多书籍的名称类似,因此通过ISBN查找可能会更容易一些;本书的英文ISBN号是0-7645-8436-7。 在下载源代码之后,只需使用最喜欢的解压缩工具对其进行解压缩即可。另一个途径是到Wrox代码下载主页面/dynamic/books/download.aspx,这里有本书及其他所有Wrox书籍的源代码。 勘误表 我们尽最大努力确保本书在叙述和代码中没有错误。然而,没有人是完美的,错误时有发生。如果您在本书中发现什么错误,例如拼写错误或编码错误,我们将会非常感谢您能反馈给我们。通过将错误添加到勘误表中,您可以为其他读者节约数小时的时间,也可以帮助我们提供更高质量的书籍。 请给wkservice@tup.tsinghua.edu.cn发电子邮件,我们就会检查您的信息,如果是正确的,我们将在本书的后续版本中采用。 要找到本书的勘误表,可以登录Web站点,然后搜索本书的书名或者使用标题列表。然后,在本书的详细内容页面上,单击Book Errata链接。在这个页面上读者可以查看到所有已提交的、由Wrox的编辑发布的错误信息。也可以在/misc-pages/booklist.shtml页面找到一个完整的标题列表,这个列表包含了每本书的勘误表链接。 如果想参与讨论,可以加入P2P论坛,网址是。这些论坛是基于Web站点的系统,其作用是让读者发布与Wrox的书籍和相关技术有关的消息,并与其他读者和技术用户联络。这些论坛提供订阅功能,当有与您感兴趣的主题相关的新消息发布的时候,论坛会通过电子邮件把这些消息发送给您。Wrox的作家、编辑、其他行业专家以及和您一样的读者都会出现在这些论坛上。 在,读者将找到很多不同的论坛,这些论坛不仅能帮助您阅读本书,还可以帮助您开发自己的应用程序。要加入这些论坛,可按如下步骤操作: (1) 登录并单击Register链接。 (2) 阅读用途条款并单击Agree。 (3) 填写加入论坛所必需的信息和可选信息并单击Submit。 (4) 您将收到一封电子邮件,该邮件将告诉您怎样验证账户并成功加入。 没有加入P2P论坛也可以阅读该论坛上的信息,但是如果希望发布自己的消息,则必须加入该论坛。 加入之后,您就可以发布新消息或者回复其他用户发布的消息。您可以在任何时间阅读Web站点上的消息。如果希望某个论坛能将最新的消息通过电子邮件发送给您,则可以单击论坛列表中该论坛名称旁边的Subscribe图标。 要获得如何使用P2P论坛的更多信息,可以阅读P2P FAQ列表中的问题及其答复,这些问题与论坛软件的工作原理以及很多与P2P和Wrox相关的常见问题有关。要阅读FAQ,可以单击任意P2P页面上的FAQ链接。