feat: 根目录文档、脚本、gitignore

This commit is contained in:
2026-10-08 16:15:33 +08:00
commit e98660ce4e
284 changed files with 26838 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
import io, sys, pymysql
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
conn = pymysql.connect(host='192.168.1.161', user='devgps', password='dev@2021GPS',
database='zentao_dev_2026', charset='utf8mb4')
cur = conn.cursor()
def q(sql):
cur.execute(sql); return cur.fetchall()
print("### 1. Bug密度(开发者维度):6月done任务,分子=挂任务的Bug数,分母=Σestimate")
rows = q("""
SELECT t.assignedTo, u.realname, COUNT(DISTINCT t.id) tasks, SUM(t.estimate) est
FROM zt_task t LEFT JOIN zt_user u ON u.account=t.assignedTo
WHERE t.status='done' AND t.finishedDate>='2026-06-01' AND t.finishedDate<'2026-07-01'
AND t.deleted='0' AND t.assignedTo NOT IN ('','closed')
GROUP BY t.assignedTo ORDER BY est DESC
""")
print("name | done任务 | Σest(h) | Bug数 | ×100(%) | ×1000(‰)")
for r in rows:
est = float(r[3] or 0)
bugs = q(f"SELECT COUNT(*) FROM zt_bug b JOIN zt_task t2 ON b.task=t2.id WHERE t2.assignedTo='{r[0]}' AND t2.status='done' AND t2.finishedDate>='2026-06-01' AND t2.finishedDate<'2026-07-01' AND t2.deleted='0' AND b.deleted='0'")[0][0]
if est:
print(f"{r[1] or r[0]} | {r[2]} | {est:.1f} | {bugs} | {bugs/est*100:.2f}% | {bugs/est*1000:.1f}‰")
print("\n### 2. 线上Bug率(产品维度):6月上线需求 prod Bug / devel工时")
rows = q("""
SELECT s.product, COUNT(DISTINCT s.id) stories
FROM zt_story s
WHERE s.releaseddate>='2026-06-01' AND s.releaseddate<'2026-07-01' AND s.deleted='0'
GROUP BY s.product ORDER BY stories DESC LIMIT 6
""")
for r in rows:
pid = r[0]
dev = q(f"""SELECT SUM(t.estimate) FROM zt_task t JOIN zt_story s ON t.story=s.id
WHERE s.product={pid} AND s.releaseddate>='2026-06-01' AND s.releaseddate<'2026-07-01' AND s.deleted='0' AND t.type='devel' AND t.deleted='0'""")[0][0]
bugs = q(f"""SELECT b.severity, COUNT(*) FROM zt_bug b JOIN zt_story s ON b.story=s.id
WHERE s.product={pid} AND s.releaseddate>='2026-06-01' AND s.releaseddate<'2026-07-01' AND s.deleted='0' AND b.deleted='0' GROUP BY b.severity""")
dev = float(dev or 0)
tot = sum(c for _, c in bugs)
rate = tot/dev*1000 if dev else None
print(f"product {pid}: 上线需求={r[1]} devel工时={dev:.1f} Bug={bugs} → {'%.2f‰'%rate if rate is not None else 'NA(分母0)'}")
print("\n### 3. 缺陷检出率(全量):6月上线需求 (普通×1+重大×5)/devel工时")
rows = q("""
SELECT (SELECT SUM(t.estimate) FROM zt_task t WHERE t.story=s.id AND t.type='devel' AND t.deleted='0') dev_est,
(SELECT COUNT(*) FROM zt_bug b WHERE b.story=s.id AND b.deleted='0' AND b.severity IN (3,4)) nb,
(SELECT COUNT(*) FROM zt_bug b WHERE b.story=s.id AND b.deleted='0' AND b.severity IN (1,2)) mb
FROM zt_story s WHERE s.releaseddate>='2026-06-01' AND s.releaseddate<'2026-07-01' AND s.deleted='0'
""")
tot_dev = sum(float(r[0] or 0) for r in rows)
tot_w = sum((r[1] or 0)*1 + (r[2] or 0)*5 for r in rows)
n_dev0 = sum(1 for r in rows if not r[0])
print(f"需求数={len(rows)}(其中devel工时为空 {n_dev0}) Σdevel工时={tot_dev:.1f} Σ加权Bug={tot_w}")
if tot_dev:
print(f"检出率 ×100={tot_w/tot_dev*100:.2f}% ×1000={tot_w/tot_dev*1000:.1f}‰")
print("\n### 4. 版本计划:6月发布需求 工时 vs 指数覆盖")
rows = q("""
SELECT s.id, s.estimate, e.workload_index,
(SELECT SUM(t.estimate) FROM zt_task t WHERE t.story=s.id AND t.deleted='0') task_est
FROM zt_story s LEFT JOIN zt_story_expand e ON e.story_id=s.id
WHERE s.releaseddate>='2026-06-01' AND s.releaseddate<'2026-07-01' AND s.deleted='0'
""")
n=len(rows); wi=[r for r in rows if r[2] not in (None,'','0')]
sum_task=sum(float(r[3] or 0) for r in rows); sum_sest=sum(float(r[1] or 0) for r in rows)
print(f"发布需求={n} 有工作量指数={len(wi)}(覆盖率 {len(wi)/n*100:.0f}%) Σ任务工时={sum_task:.1f} Σstory.estimate={sum_sest:.1f}")
print("\n### 5. 检出率口径交叉:严重度分布(6月所有Bug)")
for r in q("SELECT severity, COUNT(*) FROM zt_bug WHERE deleted='0' AND openeddate>='2026-06-01' AND openeddate<'2026-07-01' GROUP BY severity"):
print("severity", r[0], "=", r[1])