在IT界曾经流传过一种方法:使用代码行数来评估程序员工作量。
虽然至今没有亲身体验,但是在某种程度上,这种方法是有效的,比如一个对代码要求很高,总是不断优化和重构,将代码从100行变成10行的人,这是纯粹对技术的追求,对自己的挑战。
对于使用框架开发的人来说行不通,50%都是框架代码,对于中间件开发来说有一定效果。
为了更好的统计我的开发效果,专门写了一个小工具来统计我的提交数。
import os
import platform
# 新增功能的关键字
new_feature_keywords = ['新增', '增加', '加入']
fix_bug_keywords = ['bug', '修改', '修复']
SEPARATOR = '\\' if platform.system() == 'Windows' else '/'
class ProjectInfo(object):
def __init__(self, path: str, users=None):
"""
:param users: 正则匹配 --author参数,比如 Jimo\|Hehe
"""
self.path = path
self.users = users
self.name = path[path.rindex(SEPARATOR) + 1:]
def read_commit(p):
"""
读取一个项目的git commit记录
:return: list,每条commit信息
"""
cmd = 'cd {} && git log --oneline'.format(p.path)
if p.users:
cmd += ' --author="{}"'.format(p.users)
with os.popen(cmd, 'r') as f:
d = f.buffer.read().decode(encoding='utf-8')
return d.split('\n')
def is_new_feature(c):
for k in new_feature_keywords:
if k in c:
return True
return False
def is_fix(c):
for k in fix_bug_keywords:
if k in c:
return True
return False
def statistic_project(p):
"""
统计每个项目提交数量,新功能和修改bug的数量
:param p:
:return:
"""
commits = read_commit(p)
stat = {
'feature': 0,
'fix': 0,
'other': 0
}
for c in commits:
if is_new_feature(c):
stat['feature'] += 1
elif is_fix(c):
stat['fix'] += 1
else:
stat['other'] += 1
return stat
def statistic_all(projects):
"""
统计所有项目情况,做一个汇总
:param projects: list,项目目录列表
"""
stat_all = {
'feature': 0,
'fix': 0,
'other': 0
}
print('| 项目 | 新增功能 | 修改BUG | 维护提交 |')
print('| --- | --- | --- | --- |')
for p in projects:
stat = statistic_project(p)
print('| {} | {} | {} | {} |'.format(p.name, stat['feature'], stat['fix'], stat['other']))
stat_all['feature'] += stat['feature']
stat_all['fix'] += stat['fix']
stat_all['other'] += stat['other']
print('| 总计{}个 | {} | {} | {} |'.format(len(projects), stat_all['feature'], stat_all['fix'], stat_all['other']))
if __name__ == '__main__':
projects_ = [
ProjectInfo('D:\\workspace\\io'),
ProjectInfo('D:\\workspace\\portal'),
ProjectInfo('D:\\workspace\\sex', users='jimo'),
]
statistic_all(projects_)
我将提交分为3类:
- 新增功能
- 修改BUG
- 其他:维护提交
根据自己情况修改关键字:
new_feature_keywords = ['新增', '增加', '加入']
fix_bug_keywords = ['bug', '修改', '修复']
使用这种方式需要有规范的提交,一般代码都需要review,多个commit可能还需要合并。
最终打印出markdown格式数据:
| 项目 | 新增功能 | 修改BUG | 维护提交 |
|---|---|---|---|
| io | 24 | 20 | 43 |
| portal | 87 | 184 | 457 |
| sex | 18 | 10 | 11 |
| 总计3个 | 129 | 214 | 511 |
这篇博客介绍了一种通过分析Git提交记录来评估程序员工作量的方法,主要关注新增功能、修复bug和其他维护提交。通过自定义关键词匹配,统计每个项目中这三类提交的数量,并以Markdown格式展示统计结果。该方法要求提交信息规范且经过代码审查。
1429

被折叠的 条评论
为什么被折叠?



