我很好奇在埃菲尔社区之外的实践中使用了多少合同设计。是否有任何使用按合同设计的活跃开源项目?
或者,要将问题重新整合为一个具有单一答案的问题:什么是使用最广泛的(非埃菲尔)开源项目?使用合同设计?
答案 0 :(得分:4)
你的问题的“非埃菲尔”部分很有趣。当在编程语言中支持它们时,契约就具有了所有意义,否则它只是一个很好的语法。
这使我们了解支持合同的语言。除了埃菲尔以外我知道三个:
前两个有可执行合同。优点:可以用作运行时断言。缺点:缺乏表达能力来完全指定函数在合同中的作用。你基本上只能写出健全性检查。
另一方面,ACSL合同更具表现力,而且不可执行。它们可以完全指定sort函数应该始终终止,并按顺序保留与原始数组中相同的元素。 ACSL契约可用于静态分析,尤其是Hoare式最弱前置条件计算。只有真正熟悉最后一个(免责声明:我在Frama-C上工作,但ACSL部分是很多人的工作,其中一些人贡献的比我多得多),我只能提到“ACSL示例”是一个开源C库,其中包含ACSL合同,目前由Fraunhofer FIRST开发。它尚未发布,但它将作为Device-soft项目的一部分。如果您有兴趣,我相信您可以获得初步版本。请随时联系上一个网页上提到的联系人。