跳转到内容

软件腐败

本页使用了标题或全文手工转换
维基百科,自由的百科全书

软件腐败(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).