design-by-contract相关内容
当通过契约编程一个函数或方法时,首先检查其先决条件是否得到满足,然后再开始履行其职责,对吧?进行这些检查的两种最突出的方法是通过 assert 和通过 exception. assert 仅在调试模式下失败.确保(单元)测试所有单独的合同先决条件以查看它们是否真的失败是至关重要的. 在调试和发布模式下异常失败.这样做的好处是经过测试的调试行为与发布行为相同,但会导致运行时性能损失.
..
发布后 这个问题 并阅读 那个 我意识到知道一个方法是否应该返回空值非常重要,或者这是否被认为是错误条件并且应该抛出异常.还有一个很好的讨论何时返回'null'或抛出异常.> 我正在编写一个方法,我已经知道是要返回 null 还是抛出异常,表达我的决定(换句话说,记录我的合同)的最佳方式是什么? 我能想到的一些方法: 将其写在规范/文档中(有人会阅读吗?) 使其成为方法名称的一部分
..
我正在为学校目的实现我自己的 ArrayList,但为了让事情更有趣,我正在尝试使用 C# 4.0 代码合同.一切都很好,直到我需要向构造函数添加合同.我应该在空参数构造函数中添加 Contract.Ensures() 吗? public ArrayList(int capacity) {合同.要求(容量 > 0);合同.确保(大小==容量);_array = 新 T[容量];}公共 Arra
..
这里有人经常使用 Spec# 吗?在我开始在任何地方使用它之前,我想知道它是否足够稳定和强大.看起来语法正在影响 c# 4.0,这有望在 4.0 发布后更容易升级.想法? 解决方案 我想这取决于您所说的“稳定"是什么意思.有两种可能的解释: “不会崩溃" “不变" 我不知道#1,但如果你的意思是#2,那么,好吧,Spec# 已被废弃且不再开发,因此它可能与您将获得的一样稳定.
..
我在 关于合同的思考B. Stroustrup 编写的 C++17 并协助进行了一次关于它们的小型演示,但我不确定我是否真的理解它们. 所以我有一些疑问,如果可以用一些例子来说明它们: 契约是否只是经典 assert() 的更好替代品,它们是否应该一起使用?对于软件开发人员来说,哪些合同真的很简单? 合同会影响我们处理异常的方式吗?如果是,我们应该如何使用例外和合同? 使用
..
当通过契约编程一个函数或方法时,首先检查它的先决条件是否满足,然后再开始处理它的职责,对吗?进行这些检查的两种最突出的方法是通过 assert 和通过 exception. assert 仅在调试模式下失败.确保(单元)测试所有单独的合同先决条件以查看它们是否真的失败至关重要. 异常在调试和发布模式下失败.这样做的好处是经过测试的调试行为与发布行为相同,但会导致运行时性能下降. 你认
..
以下是实现此目标的典型方法: public void myContractualMethod(final String x, final Set y) {if ((x == null) || (x.isEmpty())) {throw new IllegalArgumentException("x 不能为 null 或为空");}如果(y == null){throw new IllegalAr
..
我正在使用 PyContract (不是 PyContracts ).作为后置条件,我想确保实例的内存地址未更改,即id(self)在调用函数之前和之后应该相同.如何使用PyContract做到这一点? 我有以下(最小)代码: class Individual: def append(self, chrom): """ post:
..
想象一下,您有一个像这样的界面: public interface IPersonManager { public void AddPerson(string name); } ...以及一个我们称为DefaultPersonManager的实现.假设我们要确保IPersonManager的任何实现都不能将空或空字符串作为AddPerson(string name)的参数.为此
..
就像心理学中的双重约束一样,有没有办法告诉一个表达暗含另一表达呢? valid_last_error: attached last_error implies not attached last_success_message valid_last_success_message: attached last_success_message implies not attached last
..
我对按合同设计的概念还很陌生,但到目前为止,我很喜欢它使发现潜在错误的难易程度。 但是,我一直在使用Microsoft.Contracts库(非常棒),并且遇到了障碍。 以这个简化的示例说明一下我正在尝试做: 公共枚举状态{未就绪,就绪} [ContractClass(typeof (IPluginContract))] 公共接口IPlugin { State S
..
我知道这个问题与之前发布的其他问题非常相似,但是我想以适当的方式讨论此主题。 您认为“明显”异常应该进行单元测试吗? 对于明显异常,我的意思是例如在我们的业务逻辑存在的情况下,由于空参数或空字符串或负数导致的异常我们的单元使我们很明显,这些异常将始终在任何其他操作之前在我们方法的开头抛出。 换句话说,我说的是在违反集体合同最简单的部分之后应该引发的异常。 谢谢您的意见。
..
我是Frama-C的新手用户,并且对断言有一些疑问 指针上方. 考虑以下涉及的C片段: 两个相关的数据结构Data and Handle,s.t.句柄有一个指向数据的指针; 数据中的“状态"字段,指示某些假设操作是否已完成 三个功能:init(),start_operation()和wait(); 使用上述方法的main()函数,其中包含6个断言(A1-A6) 现在,为什么
..
我了解在DbC方法中,先决条件和后置条件附加到一个函数上. 我想知道的是,这是否同样适用于成员函数. 例如,假设我在每个公共函数的末尾使用不变式,则成员函数将如下所示: 编辑:(清理我的示例) void Charcoal::LightOnFire() { invariant(); in_LightOnFire(); StartBurning();
..
这是我正在学习的Java类.该书提到了前置条件和后置条件,但没有提供任何示例如何编码它们.继续讨论断言,我对此很失望,但是我正在做的作业特别声明要插入前提条件并使用断言测试前提条件. 任何帮助都会很棒. 解决方案 像Eiffel这样的语言将“前置条件"和“后置条件"作为该语言的基本组成部分. 一个令人信服的论点是,“对象构造函数"的整个目的是精确地 建立“类不变式". 但
..
我了解到编译器可以在编译时强制执行dbc.它是如何做到的? 解决方案 据我所知,到目前为止,最强大的静态DbC语言是规范由Microsoft Research提供.它使用了称为 Boogie 的强大静态分析工具,该工具反过来又使用了称为 Z3 以在设计时证明合同的履行或违反. 如果定理证明者可以证明合同将始终被违反,那就是编译错误.如果定理证明者能够证明合同将永远不会被违反,那就是一
..
考虑这种不可变的类型: public class Settings { public string Path { get; private set; } [ContractInvariantMethod] private void ObjectInvariants() { Contract.Invariant(Path != null);
..
这是我的代码: 公共类RegularPolygon { public int VertexCount; public double SideLength; public RegularPolygon(int vertexCount,double sideLength) { Contract.Requires(vertexCount> = 3); VertexCoun
..
我正在
..
最近,我与一位同事就单元测试进行了有趣的讨论.我们正在讨论何时维护单元测试的效率降低,何时合同发生变更. 也许任何人都可以启发我如何解决此问题.让我详细说明: 因此,可以说有一个类进行一些漂亮的计算.合同规定应计算一个数字,否则由于某种原因失败将返回-1. 我有合同测试员对此进行测试.在所有其他测试中,我都会对这个漂亮的计算器进行测试. 因此,现在我更改合同,无论何时无法计
..