今天为客户的质量管理部门人员提供TFS咨询过程中,客户的质量管理专家基于TFS提出了一个比较棘手的数据统计需求。需求是这样,客户的数十个软件项目通过质量管理部按照年度版本计划进行软件产品系统的发布,因此对需求的管理有一个基线跟踪的过程,也就是说,当产品发布后,质量管理部门希望统计出与该版本发布后相关的需求、Bug、任务等工作项是否发生变更,以及变更的什么数据。

初始讨论这个需求时,根据对TFS的了解,第一判断出这个数据是可以统计出来了,但是可能要费一番周折。实现的过程确时如此:

首先从TFS的数据Warehouse数据库入手,查询WIT之间的关联关系以及变更历史数据,管理关系的数据查询sql如下:

1、根据工作项ID查询出该工作项所有相关联的其他工作项目

select * from FactWorkItemLinkHistory wh
left join CurrentWorkItemView cwv on wh.SourceWorkItemID = cwv.System_Id
where cwv.System_Id ='25429'

  

2、从工作项历史记录数据中统计出1中的相关工作项的变更历史

select  cwv.System_Title as versionTitle , linkCWV.System_Title as targetTitle,linkCWV.ProjectNodeName from FactWorkItemLinkHistory wh

left join CurrentWorkItemView cwv on wh.SourceWorkItemID = cwv.System_Id  and cwv.TeamProjectCollectionSK = wh.TeamProjectCollectionSK

left join CurrentWorkItemView linkCWV on  wh.TargetWorkItemID = linkCWV.System_Id and  linkCWV.TeamProjectCollectionSK = wh.TeamProjectCollectionSK

where  cwv.System_Id ='25429'

  

3、通过添加过滤条件查询出工作项相关的工作项数据在某个基线后是否发生了变化

select  cwv.System_Title as versionTitle , linkCWV.System_Title as targetTitle,linkCWV.ProjectNodeName from FactWorkItemLinkHistory wh

left join CurrentWorkItemView cwv on wh.SourceWorkItemID = cwv.System_Id  and cwv.TeamProjectCollectionSK = wh.TeamProjectCollectionSK

left join CurrentWorkItemView linkCWV on  wh.TargetWorkItemID = linkCWV.System_Id and  linkCWV.TeamProjectCollectionSK = wh.TeamProjectCollectionSK

where  cwv.System_Id ='25429'

and wh.TargetWorkItemID   in (
select distinct System_Id from WorkItemHistoryView group by System_Id having max(LastUpdatedDateTime) >= cwv.LastUpdatedDateTime
)

  

通过上述统计,本以为已经统计出所需数据了,但是经过仔细的分析,TFS中的工作项任何的变更,比如添加了新的相关关联项,但其内容,比如需求说明、bug症状、测试步骤并没有方式变化,这样的数据就不应该是基线的变化,因此这样统计出的数据是有出入的,不准确。

基于这样的考虑,仅仅在TFS的Warehouse数据库中是统计不出相关报表的,必须从Collection数据库中来进行统计,Collection库结构是很复杂,如果仅仅是读取数据,分析一下,是没问题的,但如果是想直接修改里面的数据,就别考虑了,说不定就搞出问题,特别是在客户的大型生产环境中。

通过目测、查询、和搜索网络,终于找到了在Collection库中工作项各个字段修改历史记录的数据:

基于上面在两个数据库中的查询,终于统计出所需的数据。

网上搜到一个详细介绍TFS数据库的Blog,分析的很透彻。

https://visualstudiomagazine.com/articles/2009/03/09/inside-the-tfs-databases-an-occasional-series.aspx

TFS工作项数据统计及相关数据库结构分析的更多相关文章

  1. TFS 测试用例步骤数据统计

    TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...

  2. 自定义TFS工作项“所有链接”列表中的列

    这个功能只有使用团队资源管理器查看工作项才有

  3. 如何彻底删除TFS的工作项字段

    TFS的工作项字段可以在所有工作项类型之间共享.例如自定义了一个字段"验证迭代"(Mycompany.IterationValidation)那么在需求.Bug中都可以添加这个字段 ...

  4. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...

  5. TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹

    TFS是微软的应用软件生命周期管理(ALM)的解决方案产品,相比我们常见的一些ALM产品,例如HP ALM, IBM Rational, Atlanssian Jira等,其最大的区别在于TFS将软件 ...

  6. TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    TFS二次开发的数据统计以PBI.Bug.Sprint等为例(一) 在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一 ...

  7. 如何修改TFS 2013中工作项附件大小限制

    默认情况下,TFS工作项的附件大小限制为4MB.我们可以通过调用TFS提供的Web Service将这个限制调整最高到2GB. 调整这个设置的必备条件是你需要拥有TFS应用层管理员的权限.下面来看看如 ...

  8. TFS API : 四、工作项查询

    TFS API : 四.工作项查询 本节将讲述如何查询工作项,将用户统计数据. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] f ...

  9. [转载]基于TFS实践敏捷-工作项跟踪

    工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看看?"我也一直很好奇别的公司T ...

随机推荐

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. AutoMapper

    什么是AutoMapper? AutoMapper是一个对象和对象间的映射器.对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的.让AutoMapper有意思的地方在于它提供了 ...

  3. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  4. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

  5. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  6. DDD 领域驱动设计-商品建模之路

    最近在做电商业务中,有关商品业务改版的一些东西,后端的架构设计采用现在很流行的微服务,有关微服务的简单概念: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独 ...

  7. TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge

    TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare 和 Diff ...

  8. [C#] C# 知识回顾 - 序列化

    C# 知识回顾 -  序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...

  9. 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business

    建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...

  10. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...