`
jinjiankang
  • 浏览: 110352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码行统计规程

阅读更多

前言

 

因工作需要,要起草一个代码行统计规程。因此,给出我的思路,请大家多提意见。本文暂不考虑使用功能点进行规模度量,也不想讨论功能点与代码行孰优孰劣。唯一一点理由是,本人赞同Steven McConnell在《软件估算》第199页中的说法,“代码行是度量软件规模的糟糕方法,不过所有其它的规模度量方法都更糟”。当然,李帜在《功能点分析方法与实践》第32页也把代码行说的一无是处。

 

1    目的
(1)    当项目结束后,统计出该版本新增的代码行。作为过程资产,该数据可以为今后的项目类比估计提供参考。
(2)    当项目结束后,统计出单个需求对应的代码行。作为过程资产,该数据可以为规模估计专家提供参考。

 

2    假设条件
(1)    代码是指使用各种编程语言编写的计算机指令,包括配置文件中的字符。
(2)    代码行是指非空非注释物理代码行。
(3)    不包括为测试目的而编写的代码。
(4)    不统计第三方代码库。
(5)    无论逐字重用、少量修改或是大量修改后重用,均按新增代码统计。
(6)    所有项目组均使用公司统一的编码风格。按编程语言分类,每类语言都有一套编码风格。编码风格包括但不限于:每行代码的最大宽度。
(7)    如果一个项目群中使用了两种或两种以上的主编程语言,那么,按主编程语言将项目群划分成子项目,分别做代码行统计。

 

3    新增代码行统计步骤
(1)    按编程语言或文件类型分别统计
使用统计工具分别统计项目涉及的所有编程语言代码行。根据表1计算当前版本新增代码行。

表1
编程语言 上一版本代码行 当前版本代码行

当前版本新增代码行

(当前版本-上一版本)

Java 1200 2500 1300
XML 250 400 150
JSP 1800 3600 1800
... ... ... ...

 

(2)    确定项目的主编程语言
结合公司的软件开发现状,主编程语言包括:

  • C/C++
  • Java
  • PHP
  • C#

(3)    规模折算

(根据公司内所有项目涉及的所有编程语言情况,分别给出非主编程语言相对主编程语言的折算系数。这要参考一些资料,根据经验给出。待积累一定历史数据后再适当调整)举例:

基于Java/JSP的Web应用系统规模折算系数
Java Java 折算系数(值为1)
JSP Java 折算系数1
HTML Java 折算系数2
XML Java 折算系数3
Javascript Java 折算系数4
CSS Java 折算系数5
properties Java 折算系数6

 

通过公式计算项目新增规模:Loc = L1*f1 + L2*f2 + ...

其中,LoC:项目新增规模  Li:新增代码行  fi:折算系数

 

4    单个需求对应的代码行统计步骤
(1)    选择有代表性的需求。这里的“有代表性”可以定性描述为:

  • 所选需求的实现代码行数要涵盖:较少、中等、较多
  • 所选需求的实现难度要涵盖:容易、中等、较难
  • 所选择需求的个数推荐为项目总需求数的10%,但最少不低于3个

(2)    由最熟悉这些需求实现的人手工计数需求涉及的代码行数,并计算折算后的总行数。但要保留折算前的数据。

需求描述 编程语言 代码行数 折算系数 合计

 

注:考虑到需求与代码对应时的复杂性和不准确性,填写合计值时,将求和后的数值根据ceiling原则,去掉个位和十位,精确到百位。例如:计算结果为1234,则填1300;计算结果为749,则填800。

 

5    推荐的统计工具

SourceCounter(http://code.google.com/p/boomworks/)
LineCount(http://liangs.autodebug.com/index.htm)

 

 

1
0
分享到:
评论
1 楼 bobquain 2009-12-03  
感谢博主从Steven McConnell的书中摘出来的那句话,既权威又很有道理,坚定了我做这种工具的信心。

相关推荐

    TCP-IP详解卷二:实现

    5.3.1 SLIP线路规程:SLIPDISC 5.3.2 SLIP初始化:slopen slinit 5.3.3 SLIP输入处理:slinput 5.3.4 SLIP输出处理:sloutput 5.3.5 slstart函数 5.3.6 SLIP分组丢失 5.3.7 SLIP性能考虑 5.3.8 slclose函数 5.3.9 ...

    TCP-IP详解卷2:实现.part1

    书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点,如多播、长肥...

    TCP-IP详解卷2:实现.part2

    书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点,如多播、长肥...

    本资源分为两个压缩包,请注意:TCP-IP详解卷2:实现(2)

    书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点,如多播、长肥...

    TCPIP协议详解卷二.part2.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能...

    TCPIP协议详解卷二.part1.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能...

    TCPIP协议详解卷二.part4.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能...

    TCPIP协议详解卷二.part3.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能...

    TCP-IP详解卷二:实现part2

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷2:实现.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解-卷2实现分两部分-part2

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷2_1.rar

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷2:实现——2

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷2

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷二:实现part1

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解-卷2实现分两部分-part1

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    TCP-IP详解卷2:实现

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

    tcp-ip详解2:协议的实现

    5.3.1 SLIP线路规程:SLIPDISC 101 5.3.2 SLIP初始化:slopen和slinit 103 5.3.3 SLIP输入处理:slinput 105 5.3.4 SLIP输出处理:sloutput 109 5.3.5 slstart函数 111 5.3.6 SLIP分组丢失 116 5.3.7 SLIP性能考虑 ...

Global site tag (gtag.js) - Google Analytics