警告:这将是一些自由格式...
我认为有两种方法可以解决您的问题。
如果您考虑一下,一些航天飞机和卫星一直在运行最初发射它们的相同代码。另一方面,即使它们是(非常)远程的,也有一些被设计为可以更新的。
重要的是环境。显然,只要不修改环境,您的代码就不会过时。在这种情况下,代码腐烂实际上并不存在:代码本身(或生成的二进制文件)无法腐烂。如果您只是从完全不同的角度开始攻击它,则它可能会崩溃。不是说它腐烂了,而是因为它不适应环境。将其视为一个进化问题。
但是我们的环境在变化。无论如何,解决问题的关键是什么。我们的环境变化如此之快,以至于如今我们不会指望软件解决方案会随着时间的推移而发展。我们忽略了过去一年未更新的软件项目,并且会抱怨没有明确路线图的产品和客户支持。即使效果很好-您可以获得清晰的路线图,良好的支持,定期的更新...-挑战者将以指数级的增长浮出水面。我们经常会犯这样一个错误,即认为大型的老牌公司将始终占据主导地位,正是因为它们占据主导地位。但是,与畜群中占主导地位的元素变老的方式一样,超大规模软件/硬件/任何厂商的变老。还是有点懒。挑战者进入并扭转局面的速度甚至比5或10年以前确定的主导者更快。否则,当我们看到市场出现混乱(从经济上来讲,对不同领域产生影响)时,主导者将遭受良好的打击,勉强生存下来。也许这看起来并不完美,但这本身就是一个有机过程。
因此,从用户的角度来看,我认为问题并不大。从用户的角度来看,代码腐烂不会发生,因为他将使用替代方法(可能会进行无缝过渡/迁移……希望如此)。
现在假设我们没有从用户的角度看待事物,或者我们正在谈论的是一种不受竞争影响的系统-出于未知原因,政府发展,零星旅行等等...为了能够长期生存/生存,我们需要查看您参考的文字。也许还有更多关于可靠系统和容错系统的文献。虽然我们可能想进一步推进。我们不仅需要容错,还需要进化系统。
演化的问题在于,它引入了变化,而变化则引入了故障点。让我们现在看看这些,以及我们可以做些什么来解决它们。
在此过程中,我们仍然可以依靠基础结构/体系结构/工程的隐喻(毕竟,我们全都是软件工程师,尽管现在可以说没有像软件工程这样的东西)。有一个原因是管系统仍处于活动状态(有一些故障),而大笨钟仍在工作(有一些故障)或艾菲尔铁塔仍在站立。这是因为我们对基础架构的重要(或不太重要)元素进行了处理,而对软件我们应该做的也是:持续检查。这些实体的设计不一定要持续这么长时间,但是它们得益于永久性的监督以及在需要时及时进行的改进和维修。如果愿意,可将其称为修补程序。
另一方面,有些设计本来可以持久地运行,并且可以不间断地运行,甚至知道不可能进行连续检查。在这种情况下,我们将转向良好的设计和正式模型。对于给定的环境,可以量化可靠性要素(可用性,可靠性,安全性,完整性,可维护性)。统计数据会做剩下的事情,以便为剩下的事情和未来做计划。这就带来了一个问题:我们甚至有可能构建真正意义上可进化的系统吗?