问题标签 [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.

0 投票
1 回答
5500 浏览

c# - 我是否错误地执行了这个简单的合同?

这是我的代码:

我已尝试使用Contract.RequiresContract.Invariant方法来防止 vertexCount 变量小于或等于 2;但是我仍然可以初始化具有 2 个或更少边的 RegularPolygon。我的(简化的)NUnit 测试如下所示:

上面的测试也通过了,我不知道为什么!

起初我认为 ReSharper 可能搞砸了,因为每当我尝试使用Contract命名空间中的方法时,它会使该行变灰并显示此消息:

方法调用被跳过。编译器不会生成方法调用,因为该方法是有条件的,或者是没有实现的部分方法。

但是暂停 R# 并在 NUnit 中运行测试具有相同的结果,在 VS 中也没有错误或警告。所以我认为这只是因为 ReSharper 还没有突出代码合同的兼容性。

我查看了文档,据我所知,我不应该遇到这个问题。

我是在错误地使用代码合同,还是我的环境阻止了它以某种方式工作?

谢谢你。

0 投票
2 回答
924 浏览

c# - 接口类型的代码契约类的命名约定

我正在使用System.Diagnostics.Contracts命名空间中的代码契约类来为我的对象定义一些契约,我想知道当契约是针对基本接口定义时,其他人如何命名他们的契约类。让我用一个小例子来说明:

在本例中,我将合同类命名为 AnimalContract,但还有更好的名称吗?因为契约是针对一个接口定义的,所以我几乎想将类命名为 IAnimalContract 来说明它是 IAnimal 接口的契约。这样,当我在解决方案资源管理器中看到这两个项目时,它们在视觉上是“结合在一起的”,这有助于让我的头脑保持整洁。当然,合约本身并不是一个接口,所以以这种方式命名它对我来说很糟糕。

在这些情况下,你们(和女孩)如何命名您的合同类?有普遍接受的约定吗?

0 投票
3 回答
3838 浏览

c# - Check.Assert()、Check.Ensure() 和 Check.Require() 有什么作用?

请告诉我这些功能是做什么的。

0 投票
4 回答
1493 浏览

java - 如何为抽象方法编写合同?

我在我的 Java 项目中使用合同。(合同 = 在方法的开始和结束时进行检查)

我想知道是否有一种很好的方式/模式来为通用方法编写合同。例如:

我想要的是一种检查输出是否generateLine满足合同的好方法(在这种情况下,最后一个字符必须是新行字符)。

我想我可以做到这一点(但我想知道是否有更好的方法);

希望这不是太模糊。任何帮助表示赞赏。

0 投票
1 回答
243 浏览

java - 使用 Java 的 eXtreme Design-by-Contract,而不是 XINS?

是否有任何类似于XINS的 Java 项目的按合同设计的技术解决方案?我正在寻找强制开发人员首先为他们的应用程序编写合同,然后在该合同的边界内编码的项目/框架,真正充分利用合同的潜力。我正在寻找类似 XINS 的东西,它可以从该合同生成代码(服务器端和客户端、单元测试、存根)和文档(OpenDocument、HTML、测试表单),并带有一个验证合同的运行时组件。

契约可以是任何东西,例如WSDL或一堆 XML 文件。与Spring集成会很好。

请注意,我过去开发过 XINS(但现在不再是当前的维护者),我想知道存在哪些类似的解决方案以及它们如何比较。

0 投票
4 回答
313 浏览

unit-testing - 参数异常应该进行单元测试吗?

我知道这个问题与之前发布的其他问题非常相似,但我想以适当的方式讨论这个话题。

您认为应该对“明显”异常进行单元测试吗?

对于明显的异常,我的意思是例如由于空参数或空字符串或负数而导致的异常,在这种情况下,我们单元的业务逻辑使我们很明显,这些异常总是在我们的方法开始时抛出,在任何其他异常之前手术。

换句话说,我说的是在违反类契约的最简单部分后应该抛出的异常。

谢谢您的意见。

0 投票
4 回答
529 浏览

php - 为什么使用动态/松散类型语言的接口?

我在php中工作,接口的概念在这里对我来说似乎有点没用。从阅读中,我了解到接口是“按合同设计”的一部分,但至少在不保证返回特定类型的情况下,实际上没有任何合同。看起来这就像一份合同,上面写着“我们同意执行以下操作:''”——没有协议条款。

如果我想保证一个对象有一个方法,那么接口似乎并不是特别有用。如果我试图调用一个对象没有的方法,我会得到一个致命错误,所以我很快发现该类没有具有该名称的方法。如果我想聪明一点,事先检查一个类是否有方法,然后检查接口,看看对象是否实现了该接口,似乎并没有比直接检查该对象节省更多时间(我会这样做)无论如何要查看该类是否具有该方法,而不管它实现或未实现的任何接口)。

换句话说,仅仅因为我有一组具有特定名称的方法,这并不能保证我有任何特定的行为。如果我保证返回某种类型的变量,我至少对输出会有一些了解,并且我可以编写使用具有该接口的对象的代码,因为我知道我得到了什么其中。如果它返回一个字符串,我可以继续编码,至少可以确定我正在处理之后的字符串输出。因此,当指定返回类型时,我至少可以保证某些行为。保证行为是接口的一部分,还是没有?

我唯一能想到的是,当我编写代码时,它可以作为我自己的便利贴,以确保在以后编写该类时创建某些方法。当我编写代码时,它似乎更像是脚手架;当我实际使用它时,我看不到太多好处。所以对我来说,在创建类时保持标准比在编写类时更重要。这种好处似乎并没有真正体现在按合同设计的概念中。

在 PHP 等动态/松散类型语言中使用接口实际上能获得什么好处?它们很棒,还是它是更强大的面向对象语言实现的东西,所以 PHP 也实现了它?

0 投票
2 回答
95 浏览

metrics - 是否有人使用过按合同设计的指标,或者可以推荐指标来衡量代码库中按合同设计的使用情况?

我们目前正在向一个由大约 60 名开发人员组成的软件开发小组介绍按合同设计,他们正在开发不同的组件。我们首先为 C# 和 Java 定义了按合同设计的策略。为了衡量进度,我们通过简单搜索关键字(不包括注释和字符串文字)来计算类的数量和合同断言(前置条件、后置条件和不变量)的数量。所以我们有两个统计数据:

  1. 每个组件的合约断言数
  2. 每个组件每个类的平均合约断言数

是否有人使用过按合同设计的指标,或者可以推荐指标来衡量代码库中按合同设计的使用情况?

0 投票
2 回答
690 浏览

clojure - Common Lisp 的契约式设计库?

来自 Clojure 的背景,我被它的前置/后置条件作为合同设计的基础所吸引:

Common Lisp 中是否有类似的前/后功能和/或更全面的按合同设计的库?

谢谢

0 投票
3 回答
145 浏览

actionscript-3 - 用于actionscript的合约工具设计

是否有适用于 AS-3 的工具,例如 iContract for Java,
可以在按合同设计 (DBC) 中提供帮助?

(从The Pragmattic Programmer中汲取灵感)。