问题标签 [design-by-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 我如何知道 Python 的 contract.py 合约失败了?
我正在玩contract.py,Terrence Way 的 Python 合同设计参考实现。当违反合同(前置条件/后置条件/不变量)时,实现会引发异常,但如果有多个与方法关联的合同,它不会为您提供快速识别哪个特定合同失败的方法。
例如,如果我以circbuf.py为例,并通过传入否定参数来违反前提条件,如下所示:
然后我得到一个看起来像这样的回溯:
我的预感是 PreconditionViolationError (4) 中的第二个参数是指 circbuf 中的行号。包含断言的初始化文档字符串:
但是,必须打开文件并计算文档字符串的行号是一件很痛苦的事情。有没有人有更快的解决方案来确定哪个合同失败了?
(请注意,在这个例子中,有一个前提条件,所以很明显,但多个前提条件是可能的)。
python - 将鼻子测试与 Python 合约相结合
我正在使用Python 的合同来指定前置条件/后置条件/不变量。我也在使用 doctests 进行单元测试。
我想让我的所有 doctest 单元测试都在启用合同的情况下运行,并且我想使用nose运行我的测试。不幸的是,如果我用鼻子运行测试,它不会执行前/后/不变断言。我在每个 .py 文件中放置了一个设置函数,以确保它contract.checkmod
被调用
我可以确认这个函数在运行测试之前由鼻子执行,但合同仍然没有被执行。
另一方面,如果我通过调用运行 doctest,则会调用doctest.testmod
pre/post/inv:
下面是一个 Python 脚本的示例,如果直接调用它的测试将成功,但如果用鼻子调用则失败:
当我独立运行上述文件时,测试通过:
这是鼻子:
java - 一个好的 Java 契约式设计库?
几年前,我对 Java 的 DbC 包进行了调查,但我对其中的任何一个都不完全满意。不幸的是,我没有很好地记录我的发现,我认为事情已经发生了变化。有人愿意为 Java 比较和对比不同的 DbC 包吗?
c++ - 图书馆方便使用“按合同设计”原则
是否有任何库可以帮助在 C++ 应用程序中实现按合同原则设计的设计?
特别是,我正在寻找一个可以使用该原理的库,就像这样。
c# - 契约式设计:你能有一个协议接口吗?
我对按合同设计的概念还很陌生,但到目前为止,我很喜欢它让查找潜在错误变得多么容易。
但是,我一直在使用 Microsoft.Contracts 库(非常棒),但遇到了障碍。
以我正在尝试做的这个简化示例为例:
总而言之,我声明了一个插件遵循的接口,并要求它们声明它们的状态,并限制在任何状态下可以调用的内容。
这适用于调用站点,用于静态和运行时验证。但我不断收到的警告是“合同:确保未经证实”的Reset
和Prepare
功能。
我曾尝试使用Invariant
s 进行处理,但这并不能帮助证明Ensures
约束。
关于如何通过界面证明的任何帮助都会有所帮助。
编辑1:
当我将此添加到 MyAwesomePlugin 类时:
试图暗示作为 IPlugin 的状态与我的私有状态相同,我收到相同的警告,并且警告“私有 int?number = null”行无法证明不变量。
鉴于这是静态构造函数中的第一个可执行行,我可以理解为什么它会这样说,但为什么不能证明Ensures
?
编辑2
当我标记State
时,[ContractPublicPropertyName("State")]
我收到一条错误消息,提示“找不到名为 'State' 且类型为 'MyNamespace.State' 的公共字段/属性”
似乎这应该让我更接近,但我并不完全在那里。
.net - 可以在没有 Team System 的情况下使用 Microsoft.Contracts 的静态检查器吗?
除了要求 Visual Studio Team System 能够安装带有静态检查器的 Microsoft.Contacts 之外,是否可以在没有团队系统的情况下运行静态检查器?或者,它是否依赖于工作室团队系统组件公开的 API?
另外,将静态检查器从具有团队系统的计算机复制到具有专业系统的计算机是否在许可范围内?
design-by-contract - 如果按合同进行设计,除了成员函数中的不变量之外,还需要前置条件和后置条件吗?
我知道在 DbC 方法中,前置条件和后置条件附加到一个函数。
我想知道这是否也适用于成员函数。
例如,假设我在每个公共函数的开头使用不变量,成员函数将如下所示:
编辑:(清理我的例子)
是否可以仅对全局/泛型函数使用前置条件和后置条件,而只在类中使用不变量?
这似乎有点矫枉过正,但也许我的例子很糟糕。
编辑:
后置条件不只是检查不变量的子集吗?
在上面,我遵循http://www.digitalmars.com/ctg/contract.html的说明,其中指出:“当类构造函数完成时,在类析构函数的开始,在公共之前检查不变量成员运行,并且在公共函数完成后。”
谢谢。
c# - 证明这个 Contract.Requires 需要什么?
我有一个在锦标赛中运行的应用程序,我收到了关于这个简化代码结构的合同警告:
警告是:
我究竟做错了什么?我怎样才能证明这一点IList<T>
?这是静态分析器中的错误吗?如何向 Microsoft 提交错误报告?
design-by-contract - 使用契约式设计的最广泛使用的开源项目是什么?
我很好奇在 Eiffel 社区之外的实践中使用了多少按合同设计。是否有任何使用按合同设计的活跃开源项目?
或者,将问题重铸为一个只有一个答案的问题:使用按合同设计的最广泛使用的(非埃菲尔)开源项目是什么?
design-by-contract - 如何在 Visual Studio 2010 中设置 Microsoft 合同静态检查?
我最近下载了 Visual Studio 2010b2,并想重新评估我关于 Microsoft 合同静态检查器的一些问题。
我设法通过使用代码的命名空间来重用大部分System.Diagnostics.Contracts
代码,但我不确定如何启用静态检查器。我需要额外的插件吗?
我的印象是按合同设计应该在 VS2010 中“正常工作”。
谢谢你的帮助。