关于 Source Lines of Code 源码行数

Source Lines of Code SLOC 是常用于衡量软件项目大小和复杂程度的度量标准。分为 Physical 物理源码行数Logical 逻辑源码行数

  • 物理源码行数:文本的行数,包括注释,甚至空行等,更易获得
  • 逻辑源码行数:可执行表达式的数量,但与编程语言、特殊定义相关,难获得

示例

for (i=0; i<100; ++i) printf("%d bottles of beer on the wall\n");
//How many LOCs is here?
for (i=0; i<100; ++i)
{
    printf("%d bottles of beer on the wall\n ");
}
//How many LOCs is here?
代码片段物理源码行数逻辑源码行数包含注释行
第一段221
第二段521

参考文章 最后给出的结论:软件规模增长不可阻挡,也会不可避免会带来更多错误,也就需要更多资源查找和修复错误。开发人员可以考虑专门的静态分析工具。

SLOCCount

SLOCCount 是计算物理源代码行数的工具 主页(显示最新版本为 2.26 )

  1. tar -zxvf sloccount-版本号.tar.gz
  2. 进入目录 make | make install
  3. 根据需求设置 SLOC_HOME export SLOC_HOME=/sloccount-版本号

Java-parser

where --source-code-lines points to a file whose lines look like “PATH#LINE1:PATH#LINE2”, indicating that the statement in file PATH, starting on line LINE1, extends into LINE2. (The java-parser tool produces these files.)

实验过程接触到的一个工具:项目地址 。通过 ReadMe 了解到它解析 .java 文件获得属于同一语句的代码行集合。

772.  if (this.useSeriesOffset) {
773.    x0 = domainAxis.getCategorySeriesMiddle(
774.          column - 1, dataset.getColumnCount(),
775.          visibleRow, visibleRowCount,
776.          this.itemMargin, dataArea,
777.          plot.getDomainAxisEdge());

物理源码行数:6 / 逻辑源码行数:2 ,所以它将输出如下信息:
表示#774, #775, #776, #777 都是语句 #773的一部分

org/jfree/chart/renderer/category/LineAndShapeRenderer.java#773:org/jfree/chart/renderer/category/LineAndShapeRenderer.java#774 
org/jfree/chart/renderer/category/LineAndShapeRenderer.java#773:org/jfree/chart/renderer/category/LineAndShapeRenderer.java#775 
org/jfree/chart/renderer/category/LineAndShapeRenderer.java#773:org/jfree/chart/renderer/category/LineAndShapeRenderer.java#776 
org/jfree/chart/renderer/category/LineAndShapeRenderer.java#773:org/jfree/chart/renderer/category/LineAndShapeRenderer.java#777

使用,先 mvn clean package

  java -jar java-parser-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
    <dir.src.classes> \
    <list of loaded classes> \
    <output file name>

工具还提供两个脚本, run_java-parser.sh 和 _run_java-parser.sh

示例

选取 D4J 中的 jsoup_1_buggy 进行演示
参数1:defects4j checkout -p Jsoup -v 1b -w /tmp/jsoup_1_buggy
参数2:cat $D4J_HOME/framework/projects/<project_name>/loaded_classes/<bug id>.src | tr '\n' ':'

java -jar java-parser-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
  /tmp/jsoup_1_buggy/src/main/java \
  org.jsoup.Jsoup:org.jsoup.nodes.Attribute:org.jsoup.nodes.Attributes:org.jsoup.nodes.Comment:org.jsoup.nodes.DataNode:org.jsoup.nodes.Document:org.jsoup.nodes.Element:org.jsoup.nodes.Evaluator:org.jsoup.nodes.Node:org.jsoup.nodes.TextNode:org.jsoup.nodes.XmlDeclaration:org.jsoup.parser.Parser:org.jsoup.parser.Tag:org.jsoup.parser.TokenQueue:org.jsoup.select.Collector:org.jsoup.select.Elements:org.jsoup.select.Selector:  \
  Jsoup-1b.source-code.lines

脚本涉及命令( 选择删去 )

  1. qsub sudo apt-get install gridengine-client
  2. model sudo apt-get install environment-modules 参考

成功!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值