子宫内膜增生是什么原因| 奇货可居什么意思| 2009年出生属什么| 小粉是什么粉| rh阴性血是什么血型| 氯雷他定片主治什么| 酸辣土豆丝用什么醋| 湿疹是什么原因引起的| 电镀对人体有什么危害| 泡脚有什么好处和坏处| 上热下寒吃什么食物好| 1969年属鸡是什么命| 异常白细胞形态检查是查什么病| 双手麻木是什么原因| 9价疫苗适合什么年龄人打| 4月3号是什么星座| 汉语拼音什么时候发明的| 毒龙是什么意思| 贯众是什么植物| 驻马店有什么大学| 11月14号是什么星座| 儿童经常流鼻血什么原因造成的| 抑郁到什么程度要吃氟西汀| 近亲是什么意思| 打喷嚏流鼻涕吃什么药| 权衡是什么意思| 什么然什么放| 心衰应该注意什么| 尿结石是什么症状表现| 脂肪最怕什么| 八成是什么意思| 入伏吃什么| 魅惑是什么意思| 子宫在肚脐眼什么位置| 小孩感冒吃什么饭菜比较好| 2月28号是什么星座| 为什么六月腊月不搬家| 什么叫韵母| 从容不迫是什么意思| 托班是什么意思| 大麦茶有什么功效与作用| 什么药和酒一起吃必死| 肝血不足吃什么中成药| 革兰阳性杆菌是什么病| 卜卦是什么意思| 什么是品牌| 结婚下雨有什么说法| 咳嗽吃什么好的快偏方| 铁观音什么季节喝最好| 吃什么减肚子上的赘肉最快| 经常手麻是什么原因| 孩子流口水是什么原因引起的| 曲马多是什么| 断更是什么意思| 什么是介入手术| 恶心想吐肚子疼是什么原因| 什么是金融行业| 双肾小结石是什么意思| 半夏反什么药| 辩证什么意思| 什么奶不能喝| 傻白甜的意思是什么| 为什么喉咙经常痛| apm是什么牌子| 纹眉需要注意什么| 处事不惊是什么意思| 虚岁27岁属什么生肖| 角化型脚气用什么药最好| 什么颜色的床单有助于睡眠| 中医的望闻问切是什么意思| 女人右眼跳是什么预兆| 窦房结内游走性心律是什么意思| 感康是什么| ricoh什么牌子| 血糖高吃什么水果最好| 脂蛋白磷脂酶a2高说明什么| 屁股痒用什么药膏| 小孩肺热吃什么好清肺热| 坐支是什么意思| 房颤吃什么药好| 男女之间的吸引靠什么| 08年属什么生肖| 10个月的宝宝吃什么辅食最好| 甲状腺和甲亢有什么区别| 火车代表什么生肖| 结缔组织病是什么病| 大条是什么意思| hugo是什么意思| 眼睑是什么位置图片| 上吐下泻吃什么好| 肚子硬硬的是什么原因| 6月3日什么星座| 血粘度查什么项目| jdk是什么| 为什么不建议吃茵栀黄| 剑齿虎为什么会灭绝| 为什么月经量少| 肝郁是什么意思| 手术刀口吃什么愈合快| 什么鸟好养| 南昌有什么好玩的景点| 皮蛋是什么蛋做的| 为什么无缘无故流鼻血| 茶不能和什么一起吃| 爱恨就在一瞬间是什么歌| 冰瓷棉是什么面料| psa是什么| 为什么乳晕会变大| 24岁属什么生肖| 梦见筷子是什么预兆| 身上发热是什么原因| 沙僧属什么生肖| 固本培元是什么意思| 墨西哥人是什么人种| 4.12是什么星座| 鲸属于什么类动物| 什么叫丁克| 雪媚娘是什么| 马蜂窝治什么病最好| 10月1日是什么日子| 收官什么意思| 炁读什么| 鲈鱼不能和什么一起吃| 蛇鼠一窝指什么生肖| 子宫内膜增厚是什么原因| 吃山竹有什么好处和坏处| 总是嗳气是什么原因| 血压高压低是什么原因| 梦见涨洪水是什么兆头| ins是什么社交软件| 拉肚子喝什么水| 头秃了一块是什么原因| mra检查是什么意思| 氨咖黄敏胶囊治什么| 什么叫奢侈| 眼睛视物模糊是什么原因| 吃避孕药对身体有什么影响| 肥猪拱门是什么生肖| 145是什么意思| 肝功十二项包括什么| 抽烟对身体有什么危害| 6月适合种什么菜| 飞秒是什么| 圣诞节礼物什么时候送| 火龙果不能和什么一起吃| 早起嘴苦是什么原因| 女生小便带血是什么原因| 路由器坏了有什么症状| 医保和社保有什么区别| 发烧了吃什么食物好| lt是什么| 俄罗斯什么东西值得买| 肝钙化灶是什么意思| 什么字寓意好| 女大七岁有什么说法| 治鸡眼用什么药最好| 舍本逐末是什么意思| 女生腰疼是什么原因| 黄精是什么东西| 镜子是用什么做的| 尖锐湿疣的症状是什么| 夹生是什么意思| 阿昔洛韦片是什么药| 化疗有什么副作用| 胆囊炎吃什么药| 喝碳酸饮料有什么危害| 30岁以上适合用什么牌子的护肤品| 灵芝是什么| 私奔什么意思| 为什么会尿路感染| 山竹树长什么样子图片| b型血阳性是什么意思| 婴儿第一次理发有什么讲究吗| 偏安一隅是什么意思| 风寒感冒吃什么药最快| 白菜什么时候种| 一个巾一个占念什么| 无私的动物是什么生肖| 仗剑走天涯什么意思| 色散是什么意思| 肝胆湿热用什么药| 天牛吃什么食物| 煮毛豆放什么调料好吃| 客家人什么意思| 八月17号是什么星座的| 什么牌子护肤品好| 得了便宜还卖乖是什么意思| 张家界莓茶有什么功效| 头晕需要做什么检查| 姓杨的女孩子取什么名字| 硬度不够吃什么药调理| 鱼鳔是什么东西| 艾滋病是什么引起的| 丝瓜什么人不能吃| 肥皂剧是什么| 口腔溃疡是什么样子| 什么枝什么叶| 心度高血压是什么意思| 男生喜欢什么| 籍贯是填什么| 鼻孔干燥是什么原因| 寒风吹起细雨迷离是什么歌| 王加几念什么| 梦到死人了有什么兆头| 左脸颊长痘是什么原因| 什么情况需要做胃镜| 三级手术是什么意思| 什么是初心| 脑干出血是什么原因造成的| 小儿拉肚子吃什么药好得快| 镭是什么| 梦见狗打架是什么意思| 口臭是什么原因造成的| 水瓶座是什么象星座| 端午节吃什么菜呢| 58什么意思| 情趣是什么| 定海神针什么意思| 发癫是什么意思| 手术室为什么那么冷| 阴道杆菌是什么意思| 肺癌晚期有什么症状| 灵枢是什么意思| 苦瓜汤为什么要放黄豆| 做梦梦到搬家什么意思| 今年三十属什么| 喉咙痛去药店买什么药| 肺火旺吃什么药| 腮帮子疼吃什么药| 碘酸钾是什么| 不知道吃什么| 番茄酱和番茄沙司有什么区别| 笔芯是什么意思| 29是什么生肖| 6月29号是什么星座| 孑孓什么意思| 独一无二指什么生肖| 踢皮球是什么意思| 忘恩负义的负是什么意思| 跳蚤是什么| 高血压喝什么茶好| 因果报应是什么意思| 疤痕增生是什么原因| 大学毕业是什么学历| 12580是什么号码| 人生苦短什么意思| 儿童腮腺炎吃什么药| 鱼吃什么食物| 指甲有白点是缺什么| basic是什么意思| 纪元是什么意思| 袁字五行属什么| 1月7号是什么星座| 董事总经理是什么职位| 眼压高是什么症状| 身份证最后一位代表什么| 猫的五行属什么| 桑榆未晚是什么意思| 目前除皱最好的方法是什么| 苦瓜不能和什么一起吃| 米其林是什么意思| 吃什么可以提升白细胞| 名称是什么意思| 五月10号是什么星座| 百度跳转到内容

大师用车|汽车应急不可少 十件车辆必备汽车用

本页使用了标题或全文手工转换
维基百科,自由的百科全书
百度 我说我给你让座行,你可别管我叫小妹。

源代码行数(Source lines of code)简称SLOC,也称为程序行数(lines of code),简称LOC,是由计算程序源代码的行数来估计计算机程序大小的软件度量。源代码行数一般会用来预计开发程序需要的人力及时间,若在软件完成后,也可以用来估计程序开发生产力英语programming productivity可维护性

计算方式

[编辑]

许多软件上的比较都只和项目中源代码行数的数量级有关。用源代码行数来比较10,000行源代码和100,000行源代码的项目,会比比较20,000行和21,000行的项目要有效很多。有关源代码行数的计算方式仍有许多不同意见,不过源代码行数的数量级可以做为软件复杂度及评估需要人时的一个指针。

源代码行数计算方式主要可分为两种:实体源代码行数(physical SLOC、LOC)及逻辑源代码行数(logical SLOC、LLOC)。这两种计算方式的具体定义也有很多种,不过最常用的实体源代码行数是直接计算不考虑注解时,代码的行数[1]

逻辑源代码行数设法计算可执行的“叙述”的数量。但具体定义和使用的编程语言有关(若是针对类似C语言编程语言,有一种逻辑源代码行数的方式就是计算代码结尾的分号个数)。要制作工具来计算实体源代码行数比较容易,也比较容易说明其定义。不过实体源代码行数会受到一些和逻辑无关的格式及程序风格影响,逻辑源代码行数比较不会受到格式及程序风格影响。在实务上,计算源代码行数时不一定会具体写出其定义,而逻辑源代码行数和实体源代码行数之间会有显著的差异。

以下的C语言程序可以用来说明计算源代码行数的模糊不清之处:

for (i = 0; i < 100; i++) printf("hello"); /* How many lines of code is this? */

上例中有:

  • 1行的实体源代码行数(LOC),
  • 2行的逻辑源代码行数(LLOC)(For循环printf指令)
  • 1行注解

依照程序设计者及程序设计风格的不同,上述一行实体源代码行数的程序可以写成以下多行的程序:

/* Now how many lines of code is this? */
for (i = 0; i < 100; i++)
{
    printf("hello");
}

此例中有

  • 4行的实体源代码行数(LOC):但放括号的工时需要估计进来吗?
  • 2行的逻辑源代码行数(LLOC):看不到重排非叙述代码的影响
  • 1行注解

甚至是“实体”及“逻辑”的源代码行数都有许多不同的定义。罗伯特·E·帕克(在他还在软件工程研究所英语Software Engineering Institute时)等人开发了定义SLOC值的一个框架,让人可以谨慎的说明及定义其项目中用到的SLOC定义及量测方式。例如,大部分软件会有代码复用,在回报量测结果时,如何决定是否要包括代码复用内容就很重要。

起源

[编辑]

人们刚开始用源代码行数来量度软件长度时,当时最常用的语言(像是Fortran汇编语言)都是行导向的编程语言。当时打孔卡是输入程序的主要方式。一张打孔卡对应一行程序,打孔卡是一张一张的,要计算数量很方便。打孔卡也是程序开发者有形的产出,因此管理者利用计算打孔卡数量来计算程序开发者的生产力是相当合理的。现今最常使用的编程语言在格式上的限制不多,一行的字符数也不止是80个字或是96个字,而一行的文字不一定对应一行的代码。

源代码行数的计算方式

[编辑]

用源代码行数来做为程序相关属性的量度,有些会有些争议。根据多次的实验,已确认源代码行数和开发者所花的工作量高度相关[来源请求],SLOC越大的程序,开发需要花费的时间及工作量也比较多,因此SLOC若用来估计开发者花的心力,是相当有效的。不过SLOC和机能的相关性很低,熟练的程序设计者可能可以用较少的代码达到相同的机能,因此有可能SLOC较短的程序,其机能甚至有可能比(其他程序员所写)SLOC较长的程序还要多。用SLOC来度量程序设计者的生产力不一定合适,因为有可能程序员只用少少几行程序,达到的机能比其他程序员的许多行程序更多(其他程序员也花了较多的心力)。好的程序设计者会将有重复程序的模块集成成一个模块,提升了程序的质量,但以SLOC的角度来看,反而让SLOC减少了。而且,有经验的程序设计者往往会负责最困难的模块,因此看起来不像其他程序设计者一样的“有生产力”。甚至,没有经验的程序设计者往往会有代码重复的情形,一般而言不鼓励代码重复,因为很不容易维护,很容易有错,但是会有较多的SLOC。

若用SLOC比较不同编程语言写的程序,除非有针对不同语言的特性进行正规化,不然其准确度就更低了。各种的计算机语言都设法在简洁及清楚这两方面来取舍,有些强调简洁,有些则强调清楚。以极端的例子来说,汇编语言会需要上百行的程序,来完成APL语言几个字即可完成的工作。以下是C语言COBOL所写的Hello World示例程序的比较:

C COBOL
#include <stdio.h>

int main() {
    printf("Hello world\n");
}
      identification division.
      program-id. hello .
      procedure division.
      display "hello world"
      goback .
      end program hello .
源代码行数:4
(不算空白)
源代码行数:6
(不算空白)

在使用SLOC来计算程序设计者的努力时,另一个常见的问题是人工写的程序以及自动产生程序的差异。许多现代的软件工具都可以在鼠标点击一些设置,或是摆放对象之后,自动生成一大段的程序。例如只要将一些图案移到工作区,图形用户界面产生器英语graphical user interface builder就会自动产生对应控件的大量程序。这个工作量完全不能和写设备驱动程序的工作量相比。但两者产生的代码长度可能差异不大,这也是用SLOC来计算的缺点。

目前有许多成本、时程及工作量估计的模型,会用SLOC为输入引数,包括巴里·勃姆英语Barry Boehm等人建立,广为使用的构造性成本模型(COCOMO)、PRICE系统英语PRICE SystemsTrue S及Galorath的SEER-SEM英语SEER-SEM。这些模型的预测能力都很好,但程度会和给模型的输入资料(尤其是SLOC估计值)准确程度有关。有些软件工程研究者[2]建议用功能点代替SLOC,不过因为功能点和SLOC高度相关,而且无法自动计算,因为各研究者对此论点的看法还没有共识。

举例

[编辑]

依照Vincent Maraia的统计[3]微软 Windows NT中不同时期的操作系统其SLOC如下:

年份 操作系统 SLOC(百万)
1993 Windows NT 3.1 4–5[3]
1994 Windows NT 3.5 7–8[3]
1996 Windows NT 4.0 11–12[3]
2000 Windows 2000 29以上[3]
2001 Windows XP 45[4][5]
2003 Windows Server 2003 50[3]

针对Debian2.2版(Windows NT)以后的操作系统,也有类似的统计,Debian GNU/Linux 2.2有55 million SLOC,依传统私用程序的开发方式,需要14,005人年,需要花190亿美金。

年份 操作系统 SLOC(百万)
2000 Debian 2.2 55–59[6][7]
2002 Debian 3.0 104[7]
2005 Debian 3.1 215[7]
2007 Debian 4.0 283[7]
2009 Debian 5.0 324[7]
2012 Debian 7.0 419[8]

评论

[编辑]

优点

[编辑]
  1. 可以自动化计算:因为源代码行数是程序的实体特质,可以用计算行数的程序来取代人工的行数计算。有许多小的程序可以计算软件的源代码行数,不过因为各语言的语法及结构特性不同,针对一种语言计算逻辑源代码行数的程序可能无法计算其他语言的逻辑源代码行数。若是要计算实体源代码行数,已有可以适用于数十种语言的软件。
  2. 符合直觉的度量:源代码行数是符合直觉的软件度量标准,易于计算。也有研究者认为用功能点来度量软件,不过功能点不是程序的实体特质,是逻辑上的概念。而源代码行数没有这类问题,就算是经历不多的程序员也可以用源代码行数来量测软件大小。
  3. 无所不在的度量方式:自从软件开发的最早期开始,就已经出现源代码行数的计算[9]。因此,可以说,源代码行数的资料会比其他软件度量方式的资料会多很多。

缺点

[编辑]
  1. 无法反映实际的工作量。用源代码行数来计算软件开发的生产力,有些基本层面的问题。有些研究者认为不能只用编写程序阶段产生的成果来估算项目的产出,一般而言,编写程序阶段只占整体的30%至35%。
  2. 缺乏有关功能凝聚力的信息:软件开发者付出的心力可能和源代码行数的相关性较高,但其程序的机能性和源代码行数的关系较小。有经验的程序设计者可以用较短的代码达到相同的功能。甚至,一些较熟练的软件开发者,会用重构的方式,设计调整程序,去除多余的程序英语redundant code,程序会变的较精简,也比较理想,但以源代码行数来看,看不到这方面的贡献。
  3. 心理学上的问题:若程序设计者的产出是用源代码行数来估算,难免他会调整程序写法,让相同机能的程序可以有较多行数的源代码。

公共广播电视公司的记录片《Triumph of the Nerds英语Triumph of the Nerds》中,微软的首席执行官史蒂夫·鲍尔默曾评论过计算源代码行数的作法:

在IBM里有一种软件中的文化,是要计算K-LOC,K-LOC就是一千行程序。项目有多大?这个项目大约是10K-LOC的项目,这个人是写20K-LOC程序的人,这个代码有50K-LOC。IBM想要调整这种有关K-LOC以及员工薪资的作法。我们在OS/2上面花费了多少钱,也就是他们工作可换来的钱。你写了多少K-LOC的程序?我们设法说服程序设计者,若开发者有好的想法,让一个程序可以不需要20K-LOC的代码,只要4K-LOC的代码就可以达到相同目的,为什么我们应该要少付一点钱?就因为他让程序变的更小又更快了?让K-LOC减少了?这是我们的方法论。

相关名词

[编辑]
  • KLOC /?ke?l?k/ KAY-lok:一千行代码
    • KDLOC:一千行已交付的代码
    • KSLOC:一千行源代码
  • MLOC:一百万行代码
  • GLOC:十亿行代码

相关条目

[编辑]

参考资料

[编辑]
  1. ^ Vu Nguyen; Sophia Deeds-Rubin; Thomas Tan; Barry Boehm, A SLOC Counting Standard (PDF), Center for Systems and Software Engineering, University of Southern California, 2007 [2025-08-06], (原始内容 (PDF)存档于2025-08-06) 
  2. ^ IFPUG "Quantifying the Benefits of Using Function Points"页面存档备份,存于互联网档案馆
  3. ^ 3.0 3.1 3.2 3.3 3.4 3.5 How Many Lines of Code in Windows?. Knowing.NET. December 6, 2005 [2025-08-06]. (原始内容 (Scholar search)存档于2025-08-06). 
    This in turn cites Vincent Maraia's The Build Master as the source of the information.
  4. ^ How Many Lines of Code in Windows XP?. Microsoft. January 11, 2011 [2025-08-06]. (原始内容存档于2025-08-06). 
  5. ^ A history of Windows. Microsoft. [2025-08-06]. (原始内容存档于2025-08-06). 
  6. ^ González-Barahona, Jesús M., Miguel A. Ortu?o Pérez, Pedro de las Heras Quirós, José Centeno González, and Vicente Matellán Olivera. Counting potatoes: the size of Debian 2.2. debian.org. [2025-08-06]. (原始内容存档于2025-08-06). 
  7. ^ 7.0 7.1 7.2 7.3 7.4 Robles, Gregorio. Debian Counting. [2025-08-06]. (原始内容存档于2025-08-06). 
  8. ^ Debian 7.0 was released in May 2013. The number is an estimate published on 2025-08-06, using the code base which would become Debian 7.0, using the same software method as for the data published by David A. Wheeler. James Bromberger. Debian Wheezy: US$19 Billion. Your price… FREE!. [2025-08-06]. (原始内容存档于2025-08-06). 
  9. ^ IFPUG "a short history of lines of code (loc) metrics"页面存档备份,存于互联网档案馆

延伸阅读

[编辑]

外部链接

[编辑]
  • Definitions of Practical Source Lines of Code Resource Standard Metrics (RSM) defines "effective lines of code" as a realistics code metric independent of programming style.
  • Effective Lines of Code eLOC Metrics for popular Open Source Software Linux Kernel 2.6.17, Firefox, Apache HTTPD, MySQL, PHP using RSM.
  • Wheeler, David A. SLOCCount. [2025-08-06]. (原始内容存档于2025-08-06). 
  • Wheeler, David A. Counting Source Lines of Code (SLOC). June 2001 [2025-08-06]. (原始内容存档于2025-08-06). 
  • Tanenbaum, Andrew S. Modern Operating Systems (2nd ed.). Prentice Hall. ISBN 0-13-092641-8.
  • Howard Dahdah. Tanenbaum outlines his vision for a grandma-proof OS. 2025-08-06 [2025-08-06]. (原始内容存档于2025-08-06). 
  • C. M. Lott: Metrics collection tools for C and C++ Source Code页面存档备份,存于互联网档案馆
  • Folklore.org: Macintosh Stories: -2000 Lines Of Code页面存档备份,存于互联网档案馆
裹粉是什么粉 小人难防前一句是什么 4.20什么星座 淋巴吃什么药好 积家手表什么档次
手掌中间那条线是什么线 屋上土是什么意思 什么木头做菜板好 贺喜是什么意思 甲鱼跟什么炖最补
女右上眼皮跳是什么预兆 检查艾滋病挂什么科 什么人不适合去高原 cordura是什么面料 小孩为什么发烧
男性肾虚有什么症状 环孢素是什么药 胆毒是什么原因引起的 鼻窦炎吃什么药 甜蜜素是什么
绿茶用什么茶具泡好hcv9jop7ns1r.cn 螺旋杆菌感染吃什么药hcv8jop2ns7r.cn 抽血能检查出什么xianpinbao.com 老公生日送什么礼物好最合适hcv8jop0ns7r.cn 小便分叉是什么症状hcv8jop8ns1r.cn
豆沙色是什么颜色hcv8jop8ns0r.cn 57是什么意思hcv9jop0ns1r.cn 5月12是什么星座dayuxmw.com 心神不宁是什么意思hcv8jop1ns1r.cn 8朵玫瑰花代表什么意思hcv8jop9ns5r.cn
舌头痒是什么原因cj623037.com 什么是医美hcv7jop5ns3r.cn 九五至尊是什么生肖hcv9jop0ns1r.cn 查岗是什么意思hcv7jop9ns5r.cn yj是什么意思hcv9jop3ns4r.cn
杰五行属性是什么dajiketang.com 草龟吃什么hcv9jop4ns2r.cn 白马怕青牛是什么意思hcv7jop5ns3r.cn 欠钱不还被起诉会有什么后果hcv7jop5ns2r.cn 左肾轻度积水是什么意思hcv8jop0ns7r.cn
百度