今天为客户的质量管理部门人员提供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. 用CIL写程序:你好,沃尔德

    前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了.以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾. ...

  2. C#学习资源

    # 视频 C#程序设计 Cousera(推荐) # 文档 C#教程 MSDN Microsoft API 和参考目录

  3. div实现自适应高度的textarea,实现angular双向绑定

    相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...

  4. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  5. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  6. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

  7. SQL 数据优化索引建suo避免全表扫描

    首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...

  8. MyEclipse对Maven的安装

    好记性不如烂笔头,记录一下. 操作系统:windows 7 MyEclipse2015 JDK1.7 maven的下载链接,点这里下载apache-maven-3.0.4-bin.tar.gz. 下载 ...

  9. jsp

    -----------------

  10. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...