010年4月12日是微软Visual Studio 2010正式版发布的日子。作为Visual Studio的用户,您是否还记得自己使用的第一个Visual Studio版本?是否还记得CODE出第一段代码时的兴奋?是否还记得那无数个寻找Bug的日日夜夜?51CTO开发频道带您一起走进Visual Studio历史,今天我们要介绍的是——Visual Studio 2010。
Visual Studio 2010建模概述
在微软Visual Studio 2010(Visual Studio 2010 Ultimate)中,应用程序生命周期(ALM)是其重要特性和SDLC实现方式之一。我们将一个软件的生命周期(SDLC)划分为几个阶段,而利用各种工具辅助每个关键环节进行管理,就称为应用程序生命周期管理(ALM,Application Lifecycle Management)。微软的Visual Studio 2010将会努力打造一个功能平等、共同分担,易用便捷的平台,以用于组织内的应用程序生命周期管理过程。在Visual Studio 2010的工具中,真正主角已经不在是作为编码工具的Visual Studio IDE,而是ALM的核心TFS(Team Foundation Server)。
其中,在架构方面则是通过新的架构浏览器(Architecture Explorer)和架构层图(Architecture Layer Diagram),以图形化的方式描述系统架构,从而使得项目中的技术人员或非技术人员都能以模型透过图形化的方式进行协作,以及定义企业与系统功能。另外,VSTS 2010也同时支持统一建模语言(UML,Unified Modeling Language)及特定领域语言(DSL,Domain Specific Language),架构设计人员在Visual Studio 2010中可以进行架构与建模设计,从而摆脱了传统使用非VS架构设计工具,使得设计师可以更有效率的进行.NET架构设计工作。
微软在最初的时候,项目中的技术人员使用一些单独的开发工具进行软件开发,例如架构师使用Rose进行架构设计,开发人员则使用Visual Studio进行编码。同时,项目中的非技术人员则使用一些通用的项目管理工具进行项目管理,例如项目经理使用Project,Excel等制定项目计划,进行任务划分和分配等。Visual Studio经过近十年左右的发展,已经不再是仅仅面向某一个角色(开发人员)的工具,而是要服务于软件开发过程中的所有不同的角色(开发人员、测试人员、架构师、项目经理等),使其覆盖在整个软件开发生命周期(SDLC)中,所以,在Visual Studio 2010中的各个功能之间,彼此相互关联和互通也大大增强。
我们可以通过Visual Studio 2010架构泳道(swim-lane)图,来对Visual Studio 2010建模过程功能应用更直观的了解。如图1所示。
图1 Visual Studio 2010建模过程结构
在架构建模设计过程中,同样遵循ALM的过程定义(理解代码、域理解、控制维护、扩展性等)。我们可以根据产品所针对的问题,将通过上图中的4个主题的方式来分析Visual Studio 2010建模功能过程。例如,“理解代码”描述如何利用Visual Studio 2010中的代码分析和可视化技术帮助用户分析理解已有的系统。最终,用户可以利用这些技术在已有的代码库基础上帮助客户实现最新的功能需求。
Visual Studio 2010新增了UML Modeling Project,提供了对类图,时序图,用例图等的支持,这也是基于VS.NET DSL来实现。如图2所示。
图2 DSL设计模型
VSTS2010架构分析工具
VSTS 2010全新的架构工具可以让我们了解应用程序和功能设计,并帮助验证设计与执行过程中不偏离开发目的。它除了支持一般系统分析设计流程(需求—>实体)外,也支持另一类的流程——逆向工程 (Reverse Engineering)。
通过逆向工程可以理解应用程序之间的部分是重要的依赖,以确定可能会出现问题。此外,直观图可以帮助我们找到最佳地方来执行新的功能。DGML文件可以使解决方案产生的依赖矩阵和布局,每个视图可以在项目结构中提供一个不同的视图。如图3所示。
图 3 程序集关系分析
通过高级的视图功能可以来分析模型的整体结构。在一个区域中,可以根据需要修改15分钟到一个小时之间的变化差异的依赖关系,也可以放大局部类之间的关系图。
VSTS2010逆向工程类型可分为静态与动态,静态指的是整个程序代码的静态结构,如组件或类别间的关系;动态则是程序代码执行的顺序,如某个程序代码区段相关方法调用与响应顺序。
静态逆向工程(Static Reverse Engineering)
VSTS2010提供针对不同功能层面的分析工具来辅助程序代码进行逆向工程。Layer Diagram可从高阶面来看架构;Architecture Explorer能从特定点切入,只探索我们所关心的部分;.net Class Diagram则可分析详细部分的Class结构。静态的逆向工程,主要有三个工具:Architecture Explorer、Layer Diagram和Class Diagram。Layer Diagram可以让我们以高层角度来分析整个软件结构,细腻程度可以自由选择,从项目、Namespace、Classs、到方法都可以。如图4所示。
图 4 关系层图
我们可以定义每个Layer包含的工作产品(Artifact),并可以直接用相关文件对应到Layer,然后对Layer右键单击选择View Links,即可检视此Layer相关工作产品。Layer Diagram基本上为快照(Snapshot)图形,后续即使程序代码有了变动,图形并不会自动跟着更新,所以必须定期执行Validate Architecture。如图5所示。
图 5 层浏览器
动态逆向工程(Dynamic Reverse Engineering)
在以前程序开发等人员,当分析程序代码完全没头绪时,需要从程序代码中直接理解程序流程,这是一件困难且很痛苦的事。 VSTS2010新增架构工具支持动态逆向工程,主要有两个工具:依赖图(Dependency Graph)和Sequence Diagram(时序图),使用这两个工具会大大增强代码分析的效率。依赖图可以协助理解程序代码的结构与关系,可以透过架构浏览器(Architecture Explore)来生成依赖图。顺序图是用来表达程序流程的图像工具,VSTS2010也用于对象导入系统设计,可以手工直接绘制Sequence Diagram功能,也能通过逆向工程依选择代码段自动生成图形。
图6 展现顺序图合并
如图6所示,分组生命线(Lifeline Grouping)。在VSTS2010中,顺序图具有合并功能,可以通过Group功能把Lifeline合并起来,按“Ctrl”键选择多个Lifeline后,右键单击选“Collapse”,即可合并成LifelineGroup。例如,可以将两个Class1合并起来,若要展开,右键单击选“Expand”。
VSTS 2010模型浏览器
在实际的项目开发实践中,大多数情况下都是在已有代码的基础上构建新的系统。在这种情况下,架构师或者开发人员遇到的一个典型的问题是:没有好的工具可以帮助他们很好的理解现有代码的架构,从而很难有效地在现有代码的基础上,添加新的功能以满足新的需求。为了解决这个问题,VSTS 2010提供了新的两个重要的建模工具:UML模型浏览器(UML Model Explorer)和架构浏览器(Architecture Explorer)。新的模型浏览器可以让架构师为已有代码创建完整的架构图,并且能够理解原有系统的各个组件是怎样协作在一起的。这将为架构师决定如何设计、使用、复用或者是否放弃现有代码,提供了非常有价值的参考信息。
UML模型浏览器(UML Model Explorer)
在VSTS 2010 Architecture和Ultimate版本中,新增加了一个新的工具窗(UML Model Explorer)来帮助用户理解和使用所创建的UML模型。它是一个树状结构的WPF组件,用来展示UML模型中的层次结构。在这里,模型是指所创建Modeling Project(工程模板)中的内容。通过这个工程模板可以创建模型工程,在模型工程中再创建UML图。也就是说UML类图、活动图、用例图、组件图,只能在模型工程中才能创建,并且可以按照模型架构进行设计与创建层次。
Modeling Project是模型数据、图表文件和其他用户想要存储的资源(比如Excel、Word文档)的容器。用户可以在任何新建的或者已有的解决方案中添加该工程,在解决方案中同样支持不同程序工程(C#、VB、Web等等)。模型工程Modeling Project同样也支持版本控制。一般来说,UML Model Explorer中的根节点用来表示Modeling Project本身。如图7所示。
图7 模型工程创建
创建模型工程后,在Solution Explorer下有一个默认创建的文件夹“ModelDefinition”下面的*.uml文件是建模工具自动添加和维护,不需要用户任何手工干预。它们存储了UML图内部所对应的模型关系定义,这是整个模型工程的核心。uml文件和模型中Package对象是一一对应的,当创建好一个新的模型工程后,会有一个默认ModelDefinition.uml文件被创建,它对应了整个模型的根Package,也就是“UML Model Explorer”窗口中的根节点。
架构浏览器(Architecture Explorer)
在Visual Studio 2010中,提供了构架浏览器(Architecture Explorer)工具来辅助广大开发人员来分析和理解已有代码或者编译好的.Net Assembly。它能够以Class View、Solution View和 File System的方式来浏览已有的系统代码。Class View和Solution View支持对Visual C#和Visual Basic.Net工程的浏览,而File System -> Select Files方式则可以用来浏览任何基于.Net的编译好的Assembly文件的内容,类似Reflection反编译工具的功能。如图8所示。
图8 架构浏览器
另外,可以通过鼠标拖拽的方式,直接把构架浏览器中的内容通过拖拽的方式添加到已有的依赖图上。除了能浏览打开的工程之外,构架浏览器还可以直接浏览编译好的Assembly文件中的名字空间、类型等,只是不能双击导向到相应的代码,其它都与直接浏览工程差不多。如图9所示。
图10 架构浏览器选择类视图生成依赖图
规格浏览器(Spec Explorer)
Spec Explorer是微软发布的一款与Visual Studio 2010紧密整合的基于模型测试的工具,也是一个Visual Studio集成开发环境的插件。它已经被大量用于微软内部技术团队的测试,并已在Windows协议测试工程(超过两百工程师参与并协同工作)。Spec Explore与VS整合工作环境是基于模型的测试(Model-Based Testing,MBT)技术,它是一个轻量级的,形式化的验证软件系统的方法,并可以对测试软件系统(System Under Test,SUT)进行形式化的建模,设计出机器可读的模型;目前完全验证一致性的代价非常高,重量级的形式化方法往往难以被应用到实际工程中,而基于模型的测试在这方面体现了优势,并已被运用到很多大型项目中。如图11所示。
图11 Spec Explore与VS整合基于模型测试
用户可以通过Spec Explorer对一个软件系统的期望行为进行建模,并自动生成能够在Visual Studio的测试框架下运行的测试代码。模型可以用当前主流的程序设计语言C#开发,然后通过Cord语言脚本对模型进行配置和裁剪。
Spec Explorer工具可以自动探索规格说明(Specification,Spec)的所有潜在行为,并将其行为模型表示为状态机。一次探索的输出有可能非常大,所以Spec Explorer提供了Cord语言对输出进行裁剪,并选出测试中真正关心的场景。并能够高效的解决状态爆炸的问题。
SpecExplorerVisual Studio 2010.msi插件可以在
http://msdn.microsoft.com/en-us/devlabs/ee692301.aspx下载。
开发设计模型
Visual Studio 2010 Ultimate的ALM涵盖了系统设计到测试阶段的工具。其中,在架构方面包括新的架构检视工具(Architecture Explorer),增加对统一建模语言(UML)的支持,例如类图、用例图、活动图和时序图等;以及架构层图(Architecture Layer Diagram),以图形化的方式描述系统架构,从而使得项目中的技术人员或非技术人员都能以模型透过图形化的方式进行协作,以及定义企业与系统功能关系等。
VSTS 2010架构功能组成,主要功能分为三部分:1)理解现有代码;2)明确结构设计;3)团队合作。如图12所示。
图12 VSTS2010架构功能模型
新增Visual Studio 2010的Architecture功能,可供软件架构师和开发等人员使用模型图可以帮助理解代码和用户需求,使软件系统具有更好的质量。例如,可以使用统一建模语言设计用户需求的用例,活动类和序列图功能等,来描述和沟通用户需求,从而增强ALM的周期管理控制。Architecture工具模板,如图13所示。
图13 Architecture工具模板
当在系统需求确定之后,我们便进入基于UML的面向对象的设计(Object-Oriented Design,OOD)系统设计阶段,在这个阶段中,将通过以下UML图来呈现Visual Studio 2010在设计阶段的支持和应用。
Visual Studio 2010的Architecture工具包括以下UML图(参考图9):
◆活动图(Activity Diagram):在参与者之间阐明业务用例实现的工作流程。
◆组件图(Component Diagram):组件图的主要目的是显示系统组件间结构或接口的关系。
◆类图(Class Diagram):展示了系统的逻辑结构,类和接口的关系。可以用于存储和系统之间的关系交换数据类型。
◆顺序图(Sequence Diagram):主要是显示对象之间发送的消息的时间顺序。
◆用例图(Use Case Diagram):描述角色和用例之间的关系,着重展示系统必须实现的功能,用于在需求分析阶段分析客户需求。
此外,可以从已有代码创建:层图(Layer Diagram),代码之间的不同部分依赖;类图,
类型及其.NET关系代码;顺序图,在方法调用.NET代码顺序。
UML 2.1.2规范定义了13种图,Visual Studio 2010支持其中最常用的5种图(类图、用例图、活动图、组件图和顺序图)。它们的底层的Meta模型是完全符合UML2.1.2规范定义的模型关系。