在按照契约式编程时,一个函数或方法会首先检查其前置条件是否已满足,然后才会开始处理自己的职责,对吗?目前最常用的两种检查方法是通过assert和exception实现的。 assert只在调试模式下失败。要确保其关键是(单元)测试所有单独的合同前提条件,以查看它们是否实际上失败了。 exc...
在哪些情况下不需要检查 null?最近我一直在处理一些遗留代码,里面到处都是过多的空值检查。对于琐碎的函数、声明非空返回的 API 调用等都进行了空值检查。在某些情况下,这种空值检查是合理的,但在许多地方,空值并不是一个合理的期望。我听到了许多观点,从“你不能信任其他代码”到“始终以防御性编程...
在发布这个问题和阅读那个问题之后,我意识到了知道一个方法是否应该返回null或者是否被视为错误条件并抛出异常非常重要。还有一个很好的讨论是何时需要返回“null”或抛出异常。 我正在编写一个方法,我已经知道我想要返回null还是抛出异常,最好的表达决策的方式是什么,换句话说,如何记录我的合同...
我想在工作中的大量基于Python的项目中开始使用DBC,并想知道其他人使用它的经验。到目前为止,我的调研结果如下: http://www.python.org/dev/peps/pep-0316/ - PEP 316旨在为Python标准化设计契约,但已被推迟。该PEP建议使用文档字符串...
有没有办法告诉ReSharper,由于Design-by-Contract要求检查,null引用不会发生?例如,以下代码将在ReSharper的第7和第8行引发警告(Possible 'null' assignment to entity marked with 'NotNull' attri...
最近我和一位同事就单元测试问题进行了有趣的讨论。我们在讨论当你的合同改变时,维护单元测试会变得不那么高效。 或许有人能够为我提供一些如何解决这个问题的启示。让我详细说明一下: 假设有一个类,它执行一些巧妙的计算。合同规定它应该计算一个数字,或者在某些情况下无法计算时返回-1。 我有合同测...
这是我的问题。我非常喜欢通过契约设计来开发库,尤其是可以被其他开发人员使用的库。我刚刚发现了一种新的方法,那就是使用Contract.Requires而不是Exception: public void SomeMethod(string name){ if(name==null) thr...
几年前,我曾对Java的设计按契约编程(DbC)软件包进行了调查,但是我对它们中的任何一个都不太满意。不幸的是,我没有记录下详细的研究结果,而且我认为现在情况已经发生了变化。是否有人愿意比较和对比Java中的不同DbC软件包呢?
你可能认为这个问题与之前在StackOverflow上提出的this问题相似。但我试图以不同的角度看待事物。 在TDD中,我们编写包括不同条件、标准和验证代码的测试。如果一个类通过了所有这些测试,我们就可以放心使用它。这是一种确保类实际执行其预期任务且不执行其他任务的方式。 如果您遵循Be...
我在B. Stroustrup的Thoughts about C++17中读到了关于合同的内容,并协助做了一个小演示,但我不确定我是否真正理解了它们。 因此,我有一些疑问,如果可能的话,能否用一些例子来说明: 合同只是经典assert()的更好替代品吗?它们应该一起使用吗?以软件开发人员...