design-by-contract相关内容

使用断言或异常按合同设计?

当通过契约编程一个函数或方法时,首先检查其先决条件是否得到满足,然后再开始履行其职责,对吧?进行这些检查的两种最突出的方法是通过 assert 和通过 exception. assert 仅在调试模式下失败.确保(单元)测试所有单独的合同先决条件以查看它们是否真的失败是至关重要的. 在调试和发布模式下异常失败.这样做的好处是经过测试的调试行为与发布行为相同,但会导致运行时性能损失. ..
发布时间:2022-01-08 11:45:36 其他开发

如何显示方法是否可能返回 null

发布后 这个问题 并阅读 那个 我意识到知道一个方法是否应该返回空值非常重要,或者这是否被认为是错误条件并且应该抛出异常.还有一个很好的讨论何时返回'null'或抛出异常.> 我正在编写一个方法,我已经知道是要返回 null 还是抛出异常,表达我的决定(换句话说,记录我的合同)的最佳方式是什么? 我能想到的一些方法: 将其写在规范/文档中(有人会阅读吗?) 使其成为方法名称的一部分 ..
发布时间:2022-01-06 23:17:34 Java开发

由合同和建设者设计

我正在为学校目的实现我自己的 ArrayList,但为了让事情更有趣,我正在尝试使用 C# 4.0 代码合同.一切都很好,直到我需要向构造函数添加合同.我应该在空参数构造函数中添加 Contract.Ensures() 吗? public ArrayList(int capacity) {合同.要求(容量 > 0);合同.确保(大小==容量);_array = 新 T[容量];}公共 Arra ..
发布时间:2021-12-25 08:29:49 C#/.NET

Spec# 是否足够稳定以使用?

这里有人经常使用 Spec# 吗?在我开始在任何地方使用它之前,我想知道它是否足够稳定和强大.看起来语法正在影响 c# 4.0,这有望在 4.0 发布后更容易升级.想法? 解决方案 我想这取决于您所说的“稳定"是什么意思.有两种可能的解释: “不会崩溃" “不变" 我不知道#1,但如果你的意思是#2,那么,好吧,Spec# 已被废弃且不再开发,因此它可能与您将获得的一样稳定. ..
发布时间:2021-12-25 08:27:14 其他开发

什么是合同(针对 C++17 提出的建议)?

我在 关于合同的思考B. Stroustrup 编写的 C++17 并协助进行了一次关于它们的小型演示,但我不确定我是否真的理解它们. 所以我有一些疑问,如果可以用一些例子来说明它们: 契约是否只是经典 assert() 的更好替代品,它们是否应该一起使用?对于软件开发人员来说,哪些合同真的很简单? 合同会影响我们处理异常的方式吗?如果是,我们应该如何使用例外和合同? 使用 ..
发布时间:2021-11-30 11:40:20 C/C++开发

使用断言或异常按合同进行设计?

当通过契约编程一个函数或方法时,首先检查它的先决条件是否满足,然后再开始处理它的职责,对吗?进行这些检查的两种最突出的方法是通过 assert 和通过 exception. assert 仅在调试模式下失败.确保(单元)测试所有单独的合同先决条件以查看它们是否真的失败至关重要. 异常在调试和发布模式下失败.这样做的好处是经过测试的调试行为与发布行为相同,但会导致运行时性能下降. 你认 ..
发布时间:2021-11-30 11:18:20 其他开发

按合同设计:您可以使用协议接口吗?

我对按合同设计的概念还很陌生,但到目前为止,我很喜欢它使发现潜在错误的难易程度。 但是,我一直在使用Microsoft.Contracts库(非常棒),并且遇到了障碍。 以这个简化的示例说明一下我正在尝试做: 公共枚举状态{未就绪,就绪} [ContractClass(typeof (IPluginContract))] 公共接口IPlugin { State S ..
发布时间:2020-06-11 19:07:28 C#/.NET

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

我知道这个问题与之前发布的其他问题非常相似,但是我想以适当的方式讨论此主题。 您认为“明显”异常应该进行单元测试吗? 对于明显异常,我的意思是例如在我们的业务逻辑存在的情况下,由于空参数或空字符串或负数导致的异常我们的单元使我们很明显,这些异常将始终在任何其他操作之前在我们方法的开头抛出。 换句话说,我说的是在违反集体合同最简单的部分之后应该引发的异常。 谢谢您的意见。 ..
发布时间:2020-06-11 19:07:23 其他开发

ACSL后置条件中\ old的含义

我是Frama-C的新手用户,并且对断言有一些疑问 指针上方. 考虑以下涉及的C片段: 两个相关的数据结构Data and Handle,s.t.句柄有一个指向数据的指针; 数据中的“状态"字段,指示某些假设操作是否已完成 三个功能:init(),start_operation()和wait(); 使用上述方法的main()函数,其中包含6个断言(A1-A6) 现在,为什么 ..
发布时间:2020-06-11 19:07:21 其他开发

如果通过合同进行设计,除了成员函数的不变性之外,是否还需要前提条件和后置条件?

我了解在DbC方法中,先决条件和后置条件附加到一个函数上. 我想知道的是,这是否同样适用于成员函数. 例如,假设我在每个公共函数的末尾使用不变式,则成员函数将如下所示: 编辑:(清理我的示例) void Charcoal::LightOnFire() { invariant(); in_LightOnFire(); StartBurning(); ..

如何在Java类方法或构造函数中插入前提条件?

这是我正在学习的Java类.该书提到了前置条件和后置条件,但没有提供任何示例如何编码它们.继续讨论断言,我对此很失望,但是我正在做的作业特别声明要插入前提条件并使用断言测试前提条件. 任何帮助都会很棒. 解决方案 像Eiffel这样的语言将“前置条件"和“后置条件"作为该语言的基本组成部分. 一个令人信服的论点是,“对象构造函数"的整个目的是精确地 建立“类不变式". 但 ..
发布时间:2020-06-11 19:07:17 Java开发

按合同设计中的编译时间检查?

我了解到编译器可以在编译时强制执行dbc.它是如何做到的? 解决方案 据我所知,到目前为止,最强大的静态DbC语言是规范由Microsoft Research提供.它使用了称为 Boogie 的强大静态分析工具,该工具反过来又使用了称为 Z3 以在设计时证明合同的履行或违反. 如果定理证明者可以证明合同将始终被违反,那就是编译错误.如果定理证明者能够证明合同将永远不会被违反,那就是一 ..
发布时间:2020-06-11 19:07:13 其他开发

单元测试-合同变更带来的单元测试的好处是什么?

最近,我与一位同事就单元测试进行了有趣的讨论.我们正在讨论何时维护单元测试的效率降低,何时合同发生变更. 也许任何人都可以启发我如何解决此问题.让我详细说明: 因此,可以说有一个类进行一些漂亮的计算.合同规定应计算一个数字,否则由于某种原因失败将返回-1. 我有合同测试员对此进行测试.在所有其他测试中,我都会对这个漂亮的计算器进行测试. 因此,现在我更改合同,无论何时无法计 ..
发布时间:2020-06-11 19:07:04 其他开发