《代碼大全》用資料說話:關於子程式的最佳長度

來源:互聯網
上載者:User

不少討論編程風格的書都告訴我們,應該編寫短小的函數(子程式),各家推薦的子程式最佳長度也不一樣,從十多行到一二百行不等。《代碼大全 第二版》的特點之一是“用資料說話”,書中列出:

■ 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行後,你遲早會在可讀性方面遇到問題。”

《代碼大全》的最大特點之一,是“歸納總結來自專家經驗、業界研究以及學術成果”並強調編程實踐。這本書有資料,有分析,有指導建議;言之有據,論之有理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.