跳至內容

軟件腐敗

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
(重新導向自軟體熵

軟件腐敗(Software rot)也稱代碼腐敗比特腐敗軟件腐蝕軟件衰變,或軟件熵,是指軟件性能隨着時間而逐漸惡化或反應性的遞減(diminishing responsiveness),導致軟件出錯、不穩定,需要升級。這並不是一個物理現象:軟件實際上並不會衰變,而是缺乏敏捷反應(responsive)、未能隨環境變化而修改。

新黑客詞典定義「比特腐敗」為軟件程序隨時間降級的幽默表示,即使什麼都未改變。這把組成軟件的比特類比為原子的衰變。[1]

原因

[編輯]

環境改變

[編輯]

如果程序環境的改變超出了編程者的預料。例如,早期計算機視頻遊戲是受系統定時器激發。當計算機時鐘頻率提高,則視頻遊戲收到影響。[2]

一次性能力

[編輯]

一次性能力(Onceability)[3]是指技術系統的質量水平:一旦失效,用戶難以恢復系統。如不同的上下文、不可利用的信息(如口令丟失、指令丟失、難以管理的用戶界面)等等。

未使用的代碼

[編輯]

幾乎不太使用的代碼可能包含了未被注意的錯誤。

幾乎不修改的代碼

[編輯]

正常的軟件維護也可能會有軟件腐敗。特別的當一個程序包括模塊間有遠隔作用,改變一個可能會影響到表面看起來不相關的另一個模塊。

分類

[編輯]

休眠軟件的腐敗

[編輯]

軟件當前沒有在使用。

活動軟件的腐敗

[編輯]

使用中的軟件不斷被修改以滿足新的需求、改正錯誤。但每次改變時採取重構方法並不實際。因此軟件會逐漸偏離最初的設計。例如,軟件文檔在上述過程中沒有得到更新,軟件文檔中包含的特定知識可能會失效。

軟體熵

[編輯]

軟體熵是描述對軟體系統的維護修改,使其漸漸結構不清,複雜度增加的傾向[4]Manny Lehman英語Manny Lehman (computer scientist)在1974年用了「熵」這個詞來描述軟體系統的複雜性,也得到了類似熱力學第二定律的結果。雷曼軟體進化定律英語Lehman's laws of software evolution中提到:複雜的軟體系統需要持續的修改以維持和其周圍環境的關聯,而一般來說,修改會增加系統的熵,除非刻意的去減少系統的熵,才可能減少[5]

伊瓦爾·雅各布森等人在1992年以類似的方式說明軟體熵,提到當系統修改時,無序程度的增加,最終都會讓軟體系統維護起來過於困難,而其初始設計會大幅影響軟體系統可維護的時間,而代碼重構可以延長其可維護的期間[6]

Andrew Hunt和David Thomas在1999年用破窗效應作為比喻來說明如何避免軟體開發中的軟體熵[7]

例子

[編輯]

早期的自然語言理解程序SHRDLU是使用LISP與PLANNER開發的,當時LISP語言還處於發展時期,因此SHRDLU使用了很多非標準的巨集與軟件庫。這使得它在現代計算機環境上都不能運行。

重構

[編輯]

代碼重構是一種解決軟件腐敗的方法。[8]

參見

[編輯]

參考文獻

[編輯]
  1. ^ Raymond, Eric. Bit rot. The Jargon File. [3 March 2013]. (原始內容存檔於2021-05-02). 
  2. ^ Inc, Ziff Davis. PC Mag. Ziff Davis, Inc. 1992-01-28: 286 (英語). 
  3. ^ Jonas Söderström. Onceability: The consequence of technology rot. [2019-03-01]. (原始內容存檔於2013-11-03). 
  4. ^ Tripathy, Priyadarshi; Naik, Kshirasagar. Software evolution and maintenance: a practitioner's approach. Hoboken, New Jersey: Wiley. 2014: 376. ISBN 978-0-470-60341-3. 
  5. ^ Lehman, M. M.; Belady, L.A., Program evolution: processes of software change, Academic Press: 143–144, 1985, ISBN 9780124424401 
  6. ^ Jacobson, Ivar; Christerson, Magnus; Jonsson, Patrik; Övergaard, Gunnar, Object-Oriented Software Engineering: A Use Case Driven Approach需要免費註冊, ACM Press. Addison–Wesley: 70-72, 1992, ISBN 0-201-54435-0 
  7. ^ Hunt, Andrew; Thomas, David, The Pragmatic Programmer, Addison Wesley: 4–6, 1999, ISBN 0-201-61622-X 
  8. ^ Fowler, Martin. What Is Refactoring. October 11, 2007 [2007-11-22]. (原始內容存檔於2011-06-23).