`

《代码大全》用数据说话:关于子程序的最佳长度

 
阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

不少讨论编程风格的书都告诉我们,应该编写短小的函数(子程序),各家推荐的子程序最佳长度也不一样,从十多行到一二百行不等。《代码大全 第二版》的特点之一是“用数据说话”,书中列出:

■Basili和Perricone所做的一项研究发现,子程序的长度与错误量成反比,即:随着子程序长度的增加(上至200行代码),每行代码所包含的错误数量就会减少(Basili和Perricone 1984)。
■另一项研究则发现,子程序的长度与错误量没有关联,而结构复杂度以及数据量却与错误量有关(Shen et al. 1985)。
■1986年所做的一项研究发现,短小的子程序(含有32行或更少代码)与更低的成本或错误率无关(Card,Church and Agresti 1986;Card and Glass 1990)。有证据表明,较长的子程序(含有65行或更多代码)使得每行代码的成本更低。
■一项对450个子程序所做的实证研究发现,相对较长的子程序而言,短小的子程序(包括注释在内少于143行语句)中每行代码所含的错误数量要多23%,而修改成本却低2.4倍(Selby and Basili 1991)。
■另一项研究发现,平均长度为100到150行代码的子程序需要被修改的几率最低(Lind and Vairavan 1989)。
■IBM所做的一项研究发现,最容易出错的是那些超过500行代码的子程序。超过500行之后,子程序的出错率就会与其长度成正比(Jones 1986a)。

对此,作者作了一番分析,认为子程序并不是越短越好:“那么,上述这些研究对于面向对象程序中子程序的长度又意味着什么呢?在面向对象的程序中,一大部分子程序都是访问器子程序(accessor routines),它们都非常短小。在任何时候,复杂的算法总会导致更长的子程序。在这种情况下,可以允许子程序的长度有序地增长到100至200行(不算源代码中的注释行和空行)。数十年的证据表明,这么长的子程序也和短小的子程序一样不易出错。与其对子程序的长度强加限制,还不如让下面这些因素——如子程序的内聚性、嵌套的层次、变量的数量、决策点(decision points)的数量、解释子程序用意所需的注释数量以及其他一些跟复杂度相关的考虑事项等——来决定子程度的长度。”

然后得出结论:“这就是说,如果你要编写一段超过200行代码的子程序,那你就要小心了。对于超过200行代码的子程序来说,没有哪项研究发现它能降低成本和/或降低出错率,而且在超过200行后,你迟早会在可读性方面遇到问题。”

《代码大全》的最大特点之一,是“归纳总结来自专家经验、业界研究以及学术成果”并强调编程实践。这本书有数据,有分析,有指导建议;言之有据,论之有理。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=572362


分享到:
评论

相关推荐

    DSP实用子程序源代码:DSP实用子程序源代码

    DSP实用子程序源代码:DSP实用子程序源代码 DSP实用子程序源代码:DSP实用子程序源代码

    数据结构:栈子系统.docx

    数据结构:栈子系统全文共8页,当前为第1页。数据结构:栈子系统全文共8页,当前为第1页。/* 数据结构:栈子系统全文共8页,当前为第1页。 数据结构:栈子系统全文共8页,当前为第1页。 *题目:设计一个字符型的链栈...

    管理研究方法论,用Stata做面板数据分析:数据+程序代码+实证分析论文解读

    管理研究方法论,用Stata做面板数据分析:数据+程序代码+实证分析论文解读 1.用Stata做面板数据分析:实证分析论文解读 2.用Stata做面板数据分析 :数据+程序代码 用Stata做面板数据分析.do 1.用Stata做面板数据分 ...

    循环结构与子程序设计实验

    已知两个长度相等的带符号的多字节数据分别存放在内存DATA1和DATA2开始的连续单元中,数据长度存放在LEN单元。编制程序,计算两个数据的绝对值之和,将结果存放在SUM开始的连续单元中。 编制在屏幕上显示九九表的...

    e语言-子程序反汇编易语言

     第二步:找到反汇编代码(子程序封装)中的首个“call XXXXXXXX”,这是子程序的实际地址。 第三步:再次按下反汇编,如果在反汇编代码(真实子程序)中看到“retn”,就是函数返回或某个分支返回。如果没看到,...

    数据结构程序代码大全

    除了个别算法之外,演示系统给出了《数据结构》(C语言版)书中算法对应的程序代码(CPP文件)和测试运行程序(VC++6.0的EXE文件)。通过本系统,可以显示算法的源代码以及运行结果。具体操作步骤如下: 1.选择...

    用Stata做工具变量2SLS法:数据+程序代码

    用Stata做工具变量2SLS法:数据+程序代码 用Stata做工具变量2SL S法:数据+程序代码 2. 用Stata做工具变量2SLS法.do 用Stata 做工具变量2SLS法:数据+程序代码 2. 用Stata做工具变量2SLS法.d o

    微信小程序学习demo:从服务器获取数据,并且数据绑定组件(源代码+截图)

    微信小程序学习demo:从服务器获取数据,并且数据绑定组件(源代码+截图)微信小程序学习demo:从服务器获取数据,并且数据绑定组件(源代码+截图)微信小程序学习demo:从服务器获取数据,并且数据绑定组件(源代码+截图...

    51单片机驱动LCM1602

    功能;驱动LCM1602,LCM1602为深圳誉信公司的16*2液晶字符型显示模块,程序使用读写方式控制LCM1602,地址分别为:写...子程序2:写CGRAM数据子程序 ;子程序3:写DDRAM子程序 ;子程序4:写数据子程序 ;子程序5:读忙子程序

    北邮19电子微机原理实验一实验报告:实验源程序代码+流程图+仿真图

    北邮19电子微机原理实验一实验源程序代码+流程图+仿真图 已知一任意长度字符串str,以00h结束,长度小于200h,编写汇编程序实现在该字符串中搜索匹配子串substr(以00h结束,长度小于80),若找到,则将found单元置为...

    易语言使用指定线程执行子程序模块源码

    资源介绍:。使用指定线程执行子程序。[模块源码] - 使用指定...易语言使用指定线程执行子程序模块源码例程程序置入汇编代码并调用API函数,实现指定线程执行子程序。资源作者:。易学编程网。资源界面:。资源下载:。

    语法制导的三地址代码生成程序

    输入数据示例: while (a3+15)&gt;0xa do if x2 = 07 then while y* y / z; 正确结果:等效的三地址代码序列 L1: t1 := a3 + 15 if t1 &gt; 10 goto L2 goto L0 L2: if x2 = 7 goto L3 goto L1 L3: if y ...

    微信小程序练习demo:数据绑定条件渲染练习(源代码+截图)

    微信小程序练习demo:数据绑定条件渲染练习(源代码+截图)微信小程序练习demo:数据绑定条件渲染练习(源代码+截图)微信小程序练习demo:数据绑定条件渲染练习(源代码+截图)微信小程序练习demo:数据绑定条件渲染练习...

    子程序设计实验

    ;从键盘输入一个一位十进制数,定义一个子程序将其以二进制形式输出到屏幕 .386 DATA SEGMENT USE16 ;定义源数据段,数据段名称为DATA MSR DB "PLEASE INPUT DATA:$" DATA ENDS

    子程序设计

    汇编语言子程序设计一、子程序的定义 &lt;子程序名&gt; PROC [&lt;类型属性&gt;] …… ;程序代码 ret &lt;子程序名&gt; ENDP 子程序名:代表子程序的入口地址。 类型属性:当主调程序和被调程序在同一代码段时,被调程序的类型...

    微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)

    微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)微信小程序demo:todo:wx.setStorageSync(KEY,DATA) ...

    投资者情绪对股票日内收益率的影响与预测 in stata-初稿:案例数据+程序命令代码do文

    投资者情绪对股票日内收益率的影响与预测 in stata-初稿:案例数据+程序命 令代码do文件 更详细的内容,请参考下面的截图说明!只供学术上的学习和参考,其它 风险不承担任何责任! 投资者情绪对股票日内收益率的...

    用Stata怎样检验调节效应和被调节的中介效应:学习课件,数据、程序命令源代码

    用Stata怎样检验调节效应和被调节的中介效应:学习课件,数据、程序命令源代码 自己重新整理,不存在任何版权、争议的商业信息! 用Stata怎样检验调节效应和 被调节的中介效应:学习课件,数据、程序命令源代码 用...

    [开源]汇编程序库

    7:代码转换程序 8:键盘录入数据的转换与显示 9:音乐演奏 10:显示色彩矩形块 11、12:字符图形程序 13:图形变换 14、15:动画 16:打字练习 17:打字计时练习 18:系统时间显示 19:显示日期时间 20:七段电子表...

    Abaqus 复合材料层压板UMAT及VUMAT子程序源代码分享.rar

    Abaqus 复合材料层压板UMAT及VUMAT子程序源代码分享

Global site tag (gtag.js) - Google Analytics