惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
T
Threatpost
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
Security Latest
Security Latest
C
Cisco Blogs
Spread Privacy
Spread Privacy
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
Know Your Adversary
Know Your Adversary
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
H
Hacker News: Front Page
Scott Helme
Scott Helme
C
Check Point Blog
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
罗磊的独立博客
C
CERT Recently Published Vulnerability Notes
美团技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
Attack and Defense Labs
Attack and Defense Labs
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
Latest news
Latest news
I
InfoQ
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Y
Y Combinator Blog
J
Java Code Geeks
S
Security @ Cisco Blogs

博客园 - ξ箫音ξ

HP PCS 云监控大数据解决方案 HP “云图”GPU虚拟化工作站解决方案 如何使员工能力和收入相匹配? 基于微软Dryad分布式并行计算平台云技术的研究 得云计算者得天下 微软Windows Phone 7新特性详解 微软Share Point 2010企业应用解决方案 微软Windows Azure Platform技术解析 微软MSDN中文网络广播(Webcast)——Visual Studio 2010 & ALM应用实践系列课程预告(2011) 架构抉择:享用微软SQL云平台就像吃烤鸭 微软Visual Studio 2010架构设计功能应用 微软北京.NET俱乐部免费活动(2010年7月18日)–Visual Studio 2010 敏捷开发与云计算Azure WCF与Hprose在微软云计算平台Azure上的对决 深度解析:微软云计算平台的通信技术与应用开发 博客园新书《构筑敏捷的开发团队—VS2010实战兵法》已经出版 Visual Studio 2010 Ultimate中MSF过程模型设计 博客园添新书《Windows Powershell 2.0应用编程最佳实践》出版 Visual Studio 2010 Ultimate测试体系结构 在Visual Studio 2010中实现数据驱动Coded UI Tests
Visual Studio 2010 Ultimate架构代码分析
ξ箫音ξ · 2010-03-23 · via 博客园 - ξ箫音ξ

       VSTS 2010新的架构工具可以让我们了解应用程序和功能设计,并帮助验证设计和执行不偏离。它除了支持一般系统分析设计流程(需求→实体)外,也支持

另一类的流程—逆向工程(Reverse Engineering)。

    通过逆向工程可以理解应用程序之间的部分是重要的相互依赖关系,以确定可能会出现的问题。此外,直观图可以帮助我们找到最佳位置来执行新的功能。

DGML文件可以使解决方案产生依赖矩阵和布局,每个视图可以在项目结构中提供一个不同的视图,如图1所示。

 

                       图1  程序集关系分析图

    通过高级的视图功能可以来分析模型的整体结构。在一个区域中,可以根据需要修改15分钟到一个小时之间的变化差异的依赖关系,如图2所示。

 

                          图2  类关系分析图

单击相应的类,在出现方向箭头处单击可放大局部类之间的关系图,如图3所示。

           图3 类关系局部放大分析图

       VSTS 2010逆向工程类型可分为静态与动态:静态指的是整个程序代码的静态结构,如组件或类间的关系;动态则是程序代码执行的顺序,如某个程序代码区段的相关方法引用与响应顺序。

1.静态逆向工程(Static Reverse Engineering

        VSTS 2010提供针对不同功能层面的分析工具来辅助程序代码进行逆向工程:Layer Diagram可从高阶面看架构;Architecture Explorer能从特定点切入,只探索我们所关心的部分;.net Class Diagram则可分析最细节的Class结构。它支持静态的逆向工程,主要有三个工具:Architecture ExplorerLayer DiagramClass Diagram

1)层图(Layer Diagram

Layer Diagram可以让我们以高层的角度来分析整个软件结构,细腻程度可以自由选择,从项目、NamespaceClass、到方法皆可。

①首先打开一个Web Application工程,打开VS新增一个Modeling Project,命名为DemoReverseEngineering,新增空白Layer Diagram,命名为MainLayerDiagramArchitecture|New Diagram|Layer Diagram),然后从Solution Explorer中拖曳ClassLibrary1WebApplication1MainLayerDiagram,然后可以看到两个方块(Layer),单击方块并单击鼠标右键,选“Generate Dependencies”命令,VSTS 2010会自动生成之间的关系,如图4示。 

                       图4  关系层图

    ②我们可以定义每个Layer包含的工作产品(Artifact),并可以直接用相关文件对应到Layer,然后在Layer上单击鼠标右键选择“View Links”命令,

即可检视此Layer的相关工作产品,如图5所示。

                图5  层浏览器

      Layer Diagram基本上为快照(Snapshot)图形,后续即使程序代码有了变动,该图形也并不会自动跟着更新,所以必须定期执行Validate Architecture

2)架构浏览器(Architecture Explorer

    架构浏览器可以让我们从特定点开始分析相关类(Class)、方法(Method)、成员(Member)间的关系。打开VS IDE,选择“View|Architecture Explorer”或者“Architecture|Windows|Architecture Explorer”命令可打开架构浏览器,如图6所示。

                  图6  架构浏览器类视图

      打开架构浏览器窗口,单击左上角的“Create a new graph”图标,显示类关系视图,如图7所示。

                       图7  类关系视图

     外,解决方案视图(Solution View):从项目角度出发到程序、类等。选择文件(Select Files):可以选择多个程序文件,如.exe.dll等,此将由实体程序展

开到类、方法等。当没有原始代码时,可以用此功能来分析动态链接库。

3)类图(Class Diagram

        VS.Net类图不同于UML Class Diagram,它提供了图形与程序代码双向实时同步功能,若修改程序代码,视图会自动更新。可在Solution Explorer下选择目标项目,

单击工具栏的“View Class Diagram”按钮,即可自动生成.Net Class Diagram,如图8所示。

              图8  类关系图

2.动态逆向工程(Dynamic Reverse Engineering

       VSTS 2010新增架构工具支持动态逆向工程,主要有两个工具:依赖图(Dependency Graph)和Sequence Diagram(时序图)。以前的程序开发人员,当分析程序代码

完全没有头绪时,需要从程序代码中直接理解程序流程是一件很困难且痛苦的事,新增的两个工具会大大提高代码分析的效率。

1)依赖图(Dependency Graph

    依赖图可以协助理解程序代码的结构与关系,可以透过架构浏览器(Architecture Explore)来生成依赖图。

首先在Architecture Explorer中选择“Class View|WebApplication1|_Default|Button1_Click1,按“Ctrl+”包含的所有方法键,并选择其所包含所有方法,然后单击“Create a new graph…”按钮,即可将刚才类(Class)阶层与方法(Method)关系绘制成依赖图(Dependency Graph),如图9所示。

                图9  展现依赖图

2)顺序图(Sequence Diagram

          顺序图是用来表现程序流程的图像工具,在VSTS 2010中也用于对象导入系统的设计,可以手工直接绘制Sequence Diagram功能,也能通过

逆向工程选择代码段自动生成图形。

        ①在VS 2010中,打开Default.cs程序文件,找到Button1_Click1()方法,单击鼠标右键,在弹出菜单中选择“Generate Sequence Diagram”命令。

设置顺序图,如图10所示。

                图10  设置生成顺序图

l   Maximum call depth:决定扫描程序调用层数来产生顺序图,默认值为3,意指超过3层的呼叫不纳入Sequence Diagram

l   Include calls in:决定哪些范围的方法调用要纳入顺序图,默认值为当前解决方案(Current solution)。

l   Exclude calls to:决定哪些方法调用要略过,不纳入顺序图。

    ②单击“OK”按钮,生成顺序图,将可以帮助分析了解程序流程,如图11所示。

                图11  从程序代码生成顺序图

     对于生成后的顺序图可以手工修改方法名称,但它不会反映到程序代码中(它只是时间点的快照(Snapshot)。不支持图形与程序代码双向互动。

3分组生命线(Lifeline Grouping

     在VSTS 2010中,顺序图具有合并功能,可以通过Group功能把Lifeline合并起来,按“Ctrl”键选择多个Lifeline后,用鼠标右键单击选择“Collapse”

即可合并成LifelineGroup。例如,可以将两个Class1合并起来,若要展开,用鼠标右键单击选择“Expand”即可,如图12所示。

        图12  合并分组生命线顺序图

    更多的功能将在我们的新书《构筑敏捷的软件开发团队—VSTS2010实战兵法》中详细描述,该书得到了微软方面的大力支持,将在2010.4月出版。

有兴趣的网友可以关注。