千行代码率和代码总量

首先引用一句话:“用代码行数来衡量编程的进度,就如同用重量来衡量飞机的制造进度”这是比尔盖茨总结的一句非常经典的话”

  • 我们统计这个不是目的,只是用来寻找开发过程中的一些原因。

1、计算公式

千行代码bug率=bug数/(代码行数/1000)

2、bug率标准

CMMI级别中做出了相关的指标规定,千行代码缺陷率(bug率):
CMM1级 11.95‰
CMM2级 5.52‰
CMM3级 2.39‰
CMM4级 0.92‰
CMM5级 0.32‰


3.统计方式一,git log

git log的方式,依赖于提交记录,统计全量,统计个人,按时间段统计都能做,但有一些问题 :

  • 经测试不能完全反应整体的记录,只是单纯的统计数量增加,空白行不能省略
  • 在加上时间段统计后,调整时间,部分不准确,没找到问题

如果在分别统计个人的时候,git log还是比较好用
如需要可自动搜索相关git 命令,挺多的:

#统计总量
git log --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

#统计总量:按时间节点
git log --pretty=tformat:  --since ==2021-4-1 --until=2022-01-31 --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

#统计个人:按提交人
git log  --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat:  --since ==2021-4-1 --until=2022-01-31 --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

#统计个人:按提交人和指定文件后缀(.html|.cs|.md|.xml|.properties)
git log   --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | grep "\(.html\|.cs\|.md\|.xml\|.properties\)$" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

4.统计方式二,cloc

使用cloc,统计总量,能分别对多种语言统计。
不依赖于提交记录,只对当前目录下的文件进行遍历统计安装和使用方式如下:

#安装,最好是全局安装,以便在其他目录也能使用
npm instal -g cloc

#进入要统计的目录
clon ./

#也能加一些其他参数,去掉指定目录不统计:--exclude-dir
clon ./  --exclude-dir

如下图所示:
在这里插入图片描述
查看更多完整命令可以输入:cloc --help
一些cloc比较常用的指令:

--diff <set1> <set2> - 计算set1和set2的源文件之间的代码差异。 输入可以是文件和目录的混合。

--ignore-whitespace - 在使用--diff比较文件时忽略水平空格。

--max-file-size=<MB> - 如果要跳过大于给定大小MB的文件。

--exclude-dir=<dir1>,<dir2> - 排除给定的逗号分隔目录。

--exclude-ext=<ext1>,<ext2> - 排除给定的文件扩展名。

--out=<file> - 将结果保存到<file> 。

--quiet - 禁止所有信息消息并仅显示最终报告。

3.统计方式三:使用linux命令中的wc统计

在统计总量的时候,相对还是比较麻烦和不太直观,去掉空白和注释要自行使用shell处理,但能指定后缀统计结果

#遍历当前目录及子目录下的文件统计行数
find . -name "*.cs" | xargs wc -l {} 
或者
git ls-files | xargs cat | wc -l

#使用cat,grep,awk,可以尝试去掉空白和注释,还未测试
find . -name "*.cs" |xargs cat| wc -l 

如所示:
在这里插入图片描述

4.统计方式四:使用visual code 的插件

  • VS Code Counter

版权声明:本文为atzqtzq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。