InfoQ

新闻

.NET代码契约组件目前已经提供下载

作者 Abel Avram 译者 赵劼 发布于 2009年2月25日 上午10时7分

社区
.NET
主题
软件测试 ,
.NET框架 ,
单元测试 ,
编程
标签
设计契约 ,
API

代码契约(Code Contracts)是“契约式设计”的.NET实现。按照原计划它将与.NET 4.0一起发布,不过现在开发人员已经可以从DevLab上下载这个组件了。“契约”为API的使用增加了限制和更多验证,编程因此变得更为安全,并可有效避免在运行中出现意料之外的错误。

契约式设计(或“契约式编程”)并不是编程领域的新概念,许多语言中已经有类似的实现了。代码契约为.NET引入了这种编程范式。简单地说,它在委托方(调用者)和提供方(被访问的API)两者之间建立一个契约,在遵守契约规范的情况下,委托方则更有把握从提供方那里获得预期的结果,而提供方也对委托方发起正确的调用有了更多信心。

目前代码契约组件中包含三种契约条件:前置条件(pre-conditions)、对象不变量(object invariants)、及后置条件(post-conditions)。前置条件可检查构造函数或方法的调用是否得到了正确的参数。后置条件则用于检验返回值的合法性。对象不变量则将特定条件运用于对象的状态上,确保其不会拥有非法的值。

这听起来与单元测试很相像,不过它意味着现在已经可以在构建期间执行这些验证了。编译器会根据契约来检查代码是否满足了所有的条件,并在出现状况时发出警告。这样程序员就可以立即得知条件是否得到满足,并在运行代码之前进行一定调整。

目前DevLabs的工作还包括从契约中生成项目文档。任何人阅读了某个API的文档之后就能了解它所有的契约条件。

使用代码契约能够得到更好、更安全的代码,并为外部API提供合适的使用指导,最终有助于开发出更高质量的软件。

有用的链接:代码契约在线文档微软研究院的代码契约网站相关论坛

查看英文原文:Code Contracts for .NET Is Available for Download
 

深度内容

学习的科学:适合大脑的最佳途径

为什么人们不明白你在会议上提出的想法?为什么你正在指导的开发人员仍然不理解你?为什么参加你的课程的学员只学到10%的内容?在某种程度上,我们都是老师,但只有专业教育工作者才接受过这方面的培训。本文讨论从神经科学学到的知识,以及如何把它们应用到敏捷软件开发及其他行业。

可靠的消息传输协议,有必要吗?

Marc de Graauw对传输层的可靠消息机制(如WS-ReliableMessaging)存在的必要性提出了质疑。通过荷兰医疗保健中心的SOA项目案例他展示了特定业务逻辑如何在按序传达消息和一次且仅一次传输中表现得更为良好。

八个改善Java遗留系统的技巧

Java系统也可能会变成“遗留”系统。这篇文章探究了8个快速而相对低风险的办法,来帮助改善即使是锈迹斑斑的Java应用。之前那些奄奄一息的应用,在使用了这些可以改善性能、减少运营负载和加速开发周期的方法后,获得了新生。

多任务让你走得更慢

Juggling Balls

大家都知道让一个人多任务工作是有害的,这会降低他的工作效率。新的敏捷或Scrum团队面对的一个重要挑战是同时应对多个项目。敏捷教导我们团队应该一次只做一个项目,不然就会遇到风浪。Roger Brown深度解析了这种现象的原因。

五年Skype架构师之路的感言

作为架构师和设计者,我们常把手头的事情作为工作焦点,很少反思过去如何。我们应该温故而知新。Andres Kutt这篇文章从他作为Skype架构组领导的经历中总结了6个经验,其中有技术方面的,另外一些是架构师较为软性一点的观点。

当敏捷团队遇上固定价格合同

固定价格合同很有害,这是敏捷实践者经常说的。从另一个角度来说,这些合同是很多敏捷团队必须面对的现实。但是,如果我们试着去驯服它而不是去反对它,那结果又会如何?一个公司如何用敏捷实践执行这种合同来达到更佳效果和更低风险?这篇文章试图回答这些问题。

Mitch Lacey谈微软的敏捷实践

Mitch Lacey用幽默的语言为大家介绍了微软的敏捷实践。演讲涉及为什么要进行敏捷,微软是如何进行敏捷的,如何进行团队协作等内容。

一种适用于真实世界BPM的协作方式

Bernd Ruecker探索了在开发BPM解决方案时如何才能更好地达到业务与IT的契合。他描述了一套使用基于BPMN流程模型为中心进行协作的方法论,该协作促进了用户间的讨论和交流,将需求、业务规则其他物件连接起来、使开发状态形象化、使业务驱动的测试场景得以细致地明确等等。