首页 > C/C++语言 > C/C++基本语法 > [编程语言]关于子程序的最佳长度
2006
01-09

[编程语言]关于子程序的最佳长度

标题:关于子程序的最佳长度
摘自:《代码大全》

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

■ 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行后,你迟早会在可读性方面遇到问题。”

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


留下一个回复