前言
前面两篇博客主要介绍了Visual Studio 高级调试-代码调试和Visual Studio 高级调试-Dump分析,
这几篇博客的目的都是为了帮助大家更好的认识和使用Visual Studio,Visual Studio企业版订阅价格为每月250美元,很多同学想知道企业版有哪些特别的功能,这次我们一起简单认识下Visual Studio企业版特有的三大技术:代码图,IntelliTrace,以及特有测试工具。
体系架构-代码图
开启该功能需要在Visual studio Enterprise Installer 组件库中勾选安装:代码图,(可选)实时依赖项验证。
Visual Studio Enterprise提供了代码可视化和建模工具,可以帮助项目负责人更直观的了解代码结构、类、项目之间的映射关系,更方便的评估当前代码是否符合设计或者存在潜在的风险。
★解决方案代码图★
这里我们以.NET经典的微服务项目dotnet-architecture/eShopOnContainers为例。
使用Visual Studio为该解决方案一键生成代码架构图,我们可以对代码图进行展开,编辑,更改布局方式等。
我们还可以使用代码图分析功能,查找项目中的循环引用,中心,以及未被引用的元素。下面是一张开启了分析功能的代码图:
使用代码图读懂DDD项目
假如你希望了解一个DDD项目,最好的方式就是去查看它的Domian定义,我们可以新建一个空白的代码图,然后将eshop项目中的Ordering.Domian拖到上面,查看领域层的设计。
我们可以看到eshop有两个聚合根:Order和Buyer;鼠标分别点击代码图上Order和Buyer两个类。
Order生命周期中会有Started,Cancelled,Shipped三种事件发出;
Order状态会有StcokConfirmed, AwaitingValidation, OrderPaid等事件
Buyer会有PaymentValidation领域事件发出。
我们可以很直观的通过代码图了解项目的主要业务逻辑,如果想了解的更细致,还可以继续选择展开代码图元素。
通常DDD项目中领域实体只能通过聚合根来访问,通过代码图我们也可以看到IRepository只能访问Order和Buyer两个聚合根。
体系架构验证
可以使用架构关系图对代码执行架构验证,在最新版本中,Visual Studio 采用 Roslyn 分析器提供的强大分析功能,可以实时进行依赖项验证。
比如下面,我创建了一个依赖项验证设计图,然后在Ordering.SignalrHub项目中引用Ordering.Domain中的类时,因为依赖验证图中没有Ordering.SignalrHub对Ordering.Domain的直接引用,所以编译器将会提示错误:
错误DV0001“属性”“Order”不应直接或间接引用“Order”,因为层“Ordering.SignalrHub.dll”在层“Ordering.Domain.dll”上没有依赖项
★ 项目负责人可以通过设置依赖验证图,以此来保证开发人员编写代码时是完全符合设计原则的,以此提高项目质量。
★IntelliTrace★
我们可以在Visual Studio中使用IntelliTrace记录和跟踪代码的执行历史记录,可缩短调试应用程序所用的时间。 还可以在部署后使用IntelliTrace收集器,来做问题诊断。
事件快照
IntelliTrace会为调试期间的事件生成快照,Visual Studio支持以下事件快照。
例如文件事件,当程序读写或者删除文件等操作时,IntelliTrace会记录下来;还有ADO.NET事件,当你的程序执行数据库操作时,IntelliTrace会自动记录下执行时的环境信息,以及SQL语句等。
另外它还会自动保存断点命中、异常、Http请求等事件发生时的快照。
历史调试
当你怀疑代码某个地方有Bug,通常会在它附近设置断点,然后调试,如果不起作用,则需要在代码的其他位置尝试设置一个断点,然后重新运行调试器,反复执行测试步骤,直到找到问题。
使用 IntelliTrace 和历史调试,无需再频繁的设置断点、重新启动调试、重复测试步骤。因为你可以回到任意事件发生时的位置,查看当时的信息。
比如下图接口代码随机生成一个0-10的数字,当随机值小于5时会抛出异常。
★ 点击激活历史调试,Visual Studio会恢复到异常发生时的状态,我们可以查看此时的线程堆栈信息。
测试工具
Live Unit Testing
单元测试是非常重要的,当我们在对代码进行修改或者新增功能时,首先可以通过单元测试来验证逻辑的正确性。
Visual Stduio Enterprise除了常规的测试工具之外还提供了Live Unit Testing,它可以实时运行单元测试,并在编辑窗口的右侧给予提示,我们可以非常直观的看到当前修改是否通过单元测试校验,或者当前代码行是否被单元测试所覆盖。
代码覆盖率
我们还可以在Visual Stduio中查看代码覆盖率,它将显示在各个程序集、类和过程中运行的代码的百分比。 源编辑器突出显示测试的代码。
代码覆盖率将以块为单位计数。 块是恰好有一个入口点和出口点的一段代码。 在测试运行期间,如果程序的控制流通过某个块,则将该块计为“已覆盖”。 块的使用次数对结果没有影响。
开发团队通常以大约 80% 的代码覆盖率为目标。 在某些情况下,较低的覆盖率是可接受的。 例如,当某代码是从标准模板生成时,可接受较低的覆盖率。
总结
好了,Visual Stduio系列的介绍就到此结束了。