zoukankan      html  css  js  c++  java
  • 利用代码契约编写更好的代码

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

    题记:要编写更好代码的途径有很多,其中一种方式就是给代码加上契约。今天推荐的文章就是介绍微软研究院推出的开源Code Contract工具库的使用。

    所谓代码契约就是让你用额外的代码来表达应用程序中对业务代码的假设情况,一般可以执行预先条件判断、过后条件判断和对象不可变判断。而微软研究院为.NET提供了这样的工具,即VS的扩展工具Code Contracts for .NET(现在仅支持到2013版)。安装这个工具后,可以在项目属性中看到额外增加的一个选项卡,如下图所示:

    1-Code-Contracts-Config

    从图中可以看到,我们可以执行两种检查:运行时检查和静态检查。这个也是Code Contracts for .NET提供的三大功能中的两个,还有一个是文档生成器。

    运行时检查

    这个功能通过提供一个二进制重写器,把你的代码契约注入到程序当中,以便执行过程中对程序进行检查。这种被重写的程序也提高了测试性,因为每个契约都扮演着一个神谕者,可以预言测试是否可能通过。同时一些自动化工具,比如Pex也可以利用契约来生成更加有意义的单元测试,因为不符合预先条件判断的无意义单元测试就不用生成了。

    静态检查

    这个功能通过提供一个静态检查器,甚至在程序没有运行的情况下,就能判断是否存在违反契约的情况。其既可以检查隐式契约,比如空引用和数组边界,也可以检查显式契约。

    文档生成器

    这个功能可以把契约信息放到现存的代码注释xml文档中。

    在我看来:代码契约有点类似断言,但是比断言要强大;也类似单元测试,但是比单元测试根据底层也是对单元测试的一种补充。

    Dirk Strauss的这篇文章有简单明了的示例代码和直观的截图,对于这个工具的使用是一个很好的入门教程。“阅读原文”即可访问这篇文章。

    原文地址:http://www.dirkstrauss.com/programming/introducing-code-contracts#.VWCNlvnvO70

  • 相关阅读:
    Thinking in Java 第十六章学习笔记----数组
    Thinking in Java第十五章学习笔记----泛型
    Thinking in Java第十四章学习笔记----类型信息
    Thinking in Java第十三章学习笔记----字符串
    Kaggle竞赛--Titanic:Machine Learning from Disaster
    sklearn 常用算法参数设置与选择
    Pandas 入门知识
    机器学习常用数据集
    感知机PLA
    决策树CART--原理与实现
  • 原文地址:https://www.cnblogs.com/redmoon/p/4525191.html
Copyright © 2011-2022 走看看