软件腐败

软件腐败（Software rot）也称代码腐败、比特腐败、软件腐蚀、软件衰变，或软件熵，是指软件性能随着时间而逐渐恶化或反应性的递减（diminishing responsiveness），导致软件出错、不稳定，需要升级。这并不是一个物理现象：软件实际上并不会衰变，而是缺乏敏捷反应（responsive)、未能随环境变化而修改。 

新黑客词典定义“比特腐败”为软件程序随时间降级的幽默表示，即使什么都未改变。这把组成软件的比特类比为原子的衰变。

原因 

环境改变
如果程序环境的改变超出了编程者的预料。例如，早期计算机视频游戏是受系统定时器激发。当计算机时钟频率提高，则视频游戏收到影响。 

一次性能力
一次性能力（Onceability）是指技术系统的质量水平：一旦失效，用户难以恢复系统。如不同的上下文、不可利用的信息（如口令丢失、指令丢失、难以管理的用户界面）等等。 

未使用的代码
几乎不太使用的代码可能包含了未被注意的错误。 

几乎不修改的代码

正常的软件维护也可能会有软件腐败。特别的当一个程序包括模块间有远隔作用，改变一个可能会影响到表面看起来不相关的另一个模块。 

分类

休眠软件的腐败
软件当前没有在使用。

活动软件的腐败
使用中的软件不断被修改以满足新的需求、改正错误。但每次改变时采取重构方法并不实际。因此软件会逐渐偏离最初的设计。例如，软件文档在上述过程中没有得到更新，软件文档中包含的特定知识可能会失效。  

 軟體熵 
軟體熵是描述對軟體系統的維護修改，使其漸漸結構不清，複雜度增加的傾向在1974年用了「熵」這個詞來描述軟體系統的複雜性，也得到了類似热力学第二定律的結果。中提到：複雜的軟體系統需要持續的修改以維持和其周圍環境的關聯，而一般來說，修改會增加系統的熵，除非刻意的去減少系統的熵，才可能減少。

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

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

例子
早期的自然语言理解程序SHRDLU是使用LISP与PLANNER开发的，当时LISP语言还处于发展时期，因此SHRDLU使用了很多非标准的-{zh-hans:宏; zh-hant:巨集}-与软件库。这使得它在现代计算机环境上都不能运行。

重构

代码重构是一种解决软件腐败的方法。 

参见

 代码异味
 软件膨胀



参考文献

Category:反模式
Category:软件质量
Category:軟體維護