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?
代码片段 | 物理源码行数 | 逻辑源码行数 | 包含注释行 |
---|---|---|---|
第一段 | 2 | 2 | 1 |
第二段 | 5 | 2 | 1 |
参考文章 最后给出的结论:软件规模增长不可阻挡,也会不可避免会带来更多错误,也就需要更多资源查找和修复错误。开发人员可以考虑专门的静态分析工具。
SLOCCount
SLOCCount 是计算物理源代码行数的工具 主页(显示最新版本为 2.26 )
tar -zxvf sloccount-版本号.tar.gz
- 进入目录
make
|make install
- 根据需求设置 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. (Thejava-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
脚本涉及命令( 选择删去 )
- qsub
sudo apt-get install gridengine-client
- model
sudo apt-get install environment-modules
参考
成功!