1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TFS版バグ予測ツール

Posted at

http://qiita.com/items/1596
の投稿で知ったバグ予測ツールの計算式を元にTFS管理しているファイルに対して、計算を行うクエリを作成。TFSを管理するSQLServerのデータベース上で実行する。

BugTfs.sql
DECLARE @T_FILE table (
	ID int identity(1, 1),
	ItemId int,
	[PATH] nvarchar(4000),
	[FILENAME] nvarchar(4000),
	COUNT_CHECKIN int,
	DATE_CREATE] datetime,
	DATE_LAST_UPDATE datetime,
	ALIVE_MINUTES money
)

DECLARE @T_CHECKIN table (
	ID int identity(1, 1),
	FileId int,
	ItemId int,
	DATE_CHECKIN datetime,
	DATE_CREATE_AS_SAMEFILE datetime,
	TIMING float(53)
)

INSERT INTO @T_FILE
SELECT
	tbl_VersionedItem.ItemId,
	REPLACE(REPLACE(tbl_VersionedItem.ParentPath, '>', '_'), '\', '/') AS [PATH],
	REPLACE(REPLACE(tbl_VersionedItem.ChildItem, '>', '_'), '\', '') AS [FILENAME],
	T_FILE.[COUNT] AS COUNT_CHECKIN,
	T_FILE.MIN_DATE_UPDATE,
	T_FILE.MAX_DATE_UPDATE,
	DATEDIFF(D, T_FILE.MIN_DATE_UPDATE, T_FILE.MAX_DATE_UPDATE)
FROM
	tbl_VersionedItem
	INNER JOIN (
		SELECT
			tbl_File.ItemId,
			COUNT(*) AS [COUNT],
			MIN(tbl_File.CreationDate) AS MIN_DATE_UPDATE,
			MAX(tbl_File.CreationDate) AS MAX_DATE_UPDATE
		FROM
			tbl_File
		GROUP BY
			tbl_File.ItemId
	) AS T_FILE ON tbl_VersionedItem.ItemId = T_FILE.ItemId

INSERT INTO @T_CHECKIN
SELECT
	tbl_File.FileId,
	tbl_File.ItemId,
	tbl_File.CreationDate,
	A_FILE.DATE_CREATE] AS DATE_CREATE_AS_SAMEFILE,
	null
FROM
	tbl_File
	LEFT OUTER JOIN @T_FILE AS A_FILE ON tbl_File.ItemId = A_FILE.ItemId

UPDATE @T_CHECKIN
SET DATE_CREATE_AS_SAMEFILE = ISNULL(MIN_CHECKIN.MIN_DATE, NULL)
FROM
	@T_CHECKIN AS A_CHECKIN
	LEFT OUTER JOIN (
		SELECT
			tbl_File.ItemId,
			MIN(tbl_File.CreationDate) AS MIN_DATE
		FROM
			tbl_File
		GROUP BY
			tbl_File.ItemId
	) AS MIN_CHECKIN ON A_CHECKIN.ItemId = MIN_CHECKIN.ItemId

UPDATE @T_CHECKIN
SET TIMING = CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, DATE_CHECKIN)) / CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()))
WHERE
	DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()) <> 0



SELECT
	A_FILE.[PATH],
	A_FILE.[FILENAME],
	T_SCORE.SCORE
FROM
	@T_FILE AS A_FILE
	INNER JOIN (
		SELECT
			A_CHECKIN.ItemId AS ItemId,
			SUM(1/(1+EXP(-12*TIMING+12))) AS SCORE
		FROM
			@T_CHECKIN AS A_CHECKIN
		GROUP BY
			A_CHECKIN.ItemId
	) AS T_SCORE ON A_FILE.ItemId = T_SCORE.ItemId
ORDER BY
	T_SCORE.SCORE desc
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?