团队贡献分分配规则
为了满足课程对贡献分分配的几个要求:
- 评分以团队成员的实际贡献为基本依据
- 分数为自然数
- 每个人分数不能相同
- 团队所有成员分数的总和为50*N,其中N为团队的人数。
我们设定了工作过程中的总分数 \(P_{total}\),和最终的贡献分 \(P_{contribution}\),以及两者之间的换算关系。
总分数
我们将每个人的分数分为了基础分部分(\(P_{base}\)),奖励分部分(\(P_{bonus}\)),惩罚分部分(\(P_{punish}\))(为负值),最后得到的总分数(\(P_{total}\))定义为 \(P_{total}=P_{base}+P_{bonus}+P_{punish}\)。
基础分部分
对于每个人而言,我们将基础分定义为其所承担的任务的任务量(\(Task/T\)),难度(\(Difficulty/D\)),完成度(\(Completion/C\))经过公式计算后的结果:\(P_{base}=T*(1+D)*C\)
对于不同的工作岗位,我们给出对此三项的详细说明如下:
工作岗位 | 任务量(\(T\)) | 难度(\(D\)) | 完成度(\(C\)) |
---|---|---|---|
开发 | 会议对开发的预估时长(\(T_1\)) 真实开发时长(\(T_2\)) |
开发时的学习成本对应的难度系数(0、1、2) | 完成度自评(\(C_1\)) 完成度PM评价(\(C_2\)) |
测试 | 会议对测试的预估时长(\(T_1\)) 真实测试时长(\(T_2\)) |
测试时的学习成本对应的难度系数(0、1、2) | 完成度自评(\(C_1\)) 完成度PM评价(\(C_2\)) |
PM | 撰写博客所用时长(\(T_3\)) 组织会议所用时长(\(T_4\)) |
固定难度系数(1) | 完成度自评(\(C_1\)) 完成度PM评价(\(C_2\)) |
公式 | \(T=(T_1+T_2)*0.5+T_3+T_4\) | \(D=\begin{cases}0\quad 学习过相关知识\\1\quad 需要查询相关资料,资料充足\\2\quad需要深入查询相关资料或求助\end{cases}\) | \(C=\frac{C_1+C_2}{2}\) \(C_i=\begin{cases}0.6\quad基本完成功能,细节未达预期 \\0.8\quad 完成功能,部分细节待优化\\1.0\quad 完成全部功能,程度完美\end{cases}\) |
举例:我们为A同学分配了一个预估时长为6h,预期难度系数为1的任务,由于存在其他DDL,A同学做得比较仓促,虽然完成了功能,但是细节需要打磨,自评和PM评价都为0.8。那么A君的最终得分为:\(6*(1+1)*0.8=9.6\)。
奖励分部分
我们设置了一个激励机制,对于对其他同学有较大帮助的同学予以奖励:
在 Alpha、Beta 阶段结束后,每名同学有两票可以投给队友。投票的原则是,投给对自己帮助最大的两名同学,原因可以是帮助自己解决了任务过程中的重要问题,也可以是代码风格值得自己学习,或是教会了自己一些技巧等等。
有 \(P_{bonus}=\sum得票数*10\)
惩罚分部分
我们设置了一个惩罚机制,对于任务完成情况不佳的同学,我们会予以惩罚:
有以下指标:延期时间 \(t\)(/h),截止时完成度 \(C_d\)(原则上不超过 \(0.5\)),未完成系数 \(U\)
- 遇到大坑,在群里询问以及向PM汇报之后仍未解决,可以申请延期,未完成系数为 \(1\);
- 分配任务后,临时有事无法完成个人任务,未完成系数为 \(2\);
- 由于修复测试bug导致任务延期,未完成系数为 \(1.5\)。
有 \(P_{punish}=-t*\frac{5}{6}*(0.6-C_d)*U\)
总分
为了阅读的流畅性,我们在此再次给出总分的计算规则:\(P_{total}=P_{base}+P_{bonus}+P_{punish}\)。
贡献分
我们将贡献分与总分的换算规则设定如下:(我们会将总分进行从小到大的排序,下标 \(i\) 表示其顺序,从 \(1\) 开始,\(arg\) 函数用于取下标)
\(P_{contribution}[i]=\underbrace{-4}_{偏移量}+\underbrace{arg(P_{total}[i])}_{贡献分指标}+\underbrace{50}_{基础贡献分}\)