如何统计你的开发工作量

这篇博客介绍了一种通过分析Git提交记录来评估程序员工作量的方法,主要关注新增功能、修复bug和其他维护提交。通过自定义关键词匹配,统计每个项目中这三类提交的数量,并以Markdown格式展示统计结果。该方法要求提交信息规范且经过代码审查。

在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维护提交
io242043
portal87184457
sex181011
总计3个129214511
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值