面向保障驱动的软件系统架构分解
1. 部分正确性与性能保障
在软件系统的设计和分析中,正确性和性能是两个关键的考量因素。首先,我们来了解一下部分正确性和完全正确性的区别。完全正确性是指在给定前置条件正确的保证下,一个实现被证明满足给定的后置条件。而部分正确性则描述了前置条件、后置条件和实现之间的三元关系,但前提是实现必须终止。然而,证明一个实现是否总是会终止是不可判定的,因此部分正确性是比完全正确性更弱的保证。
将终止的计算与非终止的协调构件分开,有助于设计总是能终止的计算算法建模语言。例如,Knuth在其著作中对算法的定义就强调了有限性,即“算法必须在有限步骤后终止”。在建模计算算法时明确终止条件,并不会限制算法设计者。
性能分析一直是软件工程的重要方面。理论上,算法的时间和空间复杂度的渐近分析已经是计算机科学的一个成熟领域,但其实践应用尚未完全实现。通常,我们使用性能分析器来测量特定实现在特定工作负载下的执行时间或内存消耗,但这种方法无法进行静态分析。性能分析器类似于动态类型检查器,可能在运行时才报告问题,并且可能会遗漏分析工作负载未覆盖的问题。
实时系统和嵌入式系统可以从程序性能的静态分析中受益匪浅。实时系统需要确保满足实时约束,而嵌入式系统在部署前检查性能特征可以更好地利用有限的内存和处理资源。此外,手持系统上运行的程序的功耗也是一个重要的性能指标。可复用库的设计者和用户可以利用模块上的资源消耗合约,来区分高性能组件和满足相同功能要求但消耗更多处理时间、内存和/或功率的组件。
然而,自动性能分析在理论上通常是不可能的,因为几乎所有性能分析问题都可以归结为停机问题,而停机问题是不可判定的。虽然已经提出了一些启发式算法来解决终止和资源消