Качество выполнения таска. Количество Reopen от тестировщиков за период в JIRA. Часть II

В прошлой статье был рассмотрен SQL-запрос, получающий список задач в системе JIRA, которые возвращались на доработку с указанием количества возвратов (фактически — количество переходов в статус Reopen).

SELECT ji.pkey, 
       ji. summary,
       count(*)
FROM   changeitem ci
       join changegroup cg on (cg.id = ci.groupid)
       join jiraissue ji on (cg.issueid = ji.id)
       join project p on (p.id = ji.project)
where  ci.field = 'status'
       and cast(ci.newstring as nvarchar) = 'Reopened'
       and p.pkey = 'DEMO'
group by ji.pkey, ji. summary

Более практическую ценность дает информация о том, сколько было возвратов инициированных именно тестировщиками. Таким образом, из общего числа доработок задач выделить те,которые выполнялись по причине некачественной реализации. Результат желательно представить так, чтобы было видно какое количество возвратов приходится на каждого исполнителя задач.

Итак, формулируем новый запрос следующим образом «В разрезе исполнителей получить количество возвратов на доработку от тестировщиков за определенный период без привязки к конкретному проекту».

«за определенный период» — для того, чтобы видеть динамику по исполнителю. Например сколько возвратов было в прошлом квартале и сколько в текущем.

«без привязки к конкретному проекту» — для того, чтобы учитывать задачи во всех проектах, в которых учавствуют исполнители.

Преобразование базового запроса начнем с фильтрации типов запросов, чтобы ограничить возвраты только для задач и багов (типы Task и Bug). Для этого в запрос с помощью оператора join добавляется таблица issuetype

join issuetype it on (it.ID = ji.issuetype)

, а в секцию фильтрации добавляется условие

and it.pname in ('Task','Bug')

Новая редакция запроса

SELECT ji.pkey, 
       ji. summary,
       count(*)
FROM   changeitem ci
       join changegroup cg on (cg.id = ci.groupid)
       join jiraissue ji on (cg.issueid = ji.id)
       join project p on (p.id = ji.project)
       join issuetype it on (it.ID = ji.issuetype)
where  ci.field = 'status' 
       and cast(ci.newstring as nvarchar) = 'Reopened' 
       and p.pkey = 'DEMO' 
group by ji.pkey, ji. summary

Следующим шагом ограничим количество возвратов сделанных за определенный период и только тестировщиками. Для этого расширяем условия фильтрации

and cg.CREATED between <date1> and <date2>
and cg.AUTHOR in ('<tester1>','<tester2>',...,'<testerN>')

Параметризированные значения <date1> и <date2> соответствуют началу и окончанию периода, за который получается статистика.

В значениях <tester1>,<tester2>,…,<testerN> необходимо переислить имена тестировщиков, которые учавствуют в ваших проектах.

Поскольку статистику необходимо получить без привязки к конкретным проектам, то одно условие фильтрации необходимо удалить. А именно

and p.pkey = 'RRP'

Очередная новая редакция запроса выглядит теперь так

SELECT ji.pkey, 
       ji. summary,
       count(*)
FROM   changeitem ci
       join changegroup cg on (cg.id = ci.groupid)
       join jiraissue ji on (cg.issueid = ji.id)
       join project p on (p.id = ji.project)
       join issuetype it on (it.ID = ji.issuetype)
where  ci.field = 'status' 
       and cast(ci.newstring as nvarchar) = 'Reopened'
       and cg.CREATED between <date1> and <date2>
       and cg.AUTHOR in ('<tester1>','<tester2>',...,'<testerN>')
group by ji.pkey, ji. summary

Осталось учесть последнее — вместо группировки по задачам сделать группировку по исполнителям задач, что требуется согласно условию аналитики. Для этого вместо полей ji.pkey и ji.summary указываем значение поля ji.assignee и соответственно меняем условие группировки на

group by ji.ASSIGNEE

Финальный запрос выглядит не так уж громоздко

SELECT ji.assignee, 
       count(*)
FROM   changeitem ci
       join changegroup cg on (cg.id = ci.groupid)
       join jiraissue ji on (cg.issueid = ji.id)
       join project p on (p.id = ji.project)
       join issuetype it on (it.ID = ji.issuetype)
where  ci.field = 'status' 
       and cast(ci.newstring as nvarchar) = 'Reopened'
       and cg.CREATED between <date1> and <date2>
       and cg.AUTHOR in ('<tester1>','<tester2>',...,'<testerN>')
group by ji.ASSIGNEE

 

Конструктивная критика в виде комментариев приветствуется)