JSONSpec: Why spec?

Why spec?

原文发表于 2015-08-12,我的lofter:http://kimleo.lofter.com/post/46977_7e28c65

Specification(以下简称Spec),是指使用特定的方式来描述一个系统(或者对象)的方法,其中涉及到该系统应有的行为和应满足的规范,同时,Spec关注的更多事系统“做什么”,而不是“怎么做”。

  1. 首先最重要的就是,Spec可以作为一个约定和约束。一方面,作为约定,能够规范设计人员和用户之间交互方式、流程和内容,另一方面,也是对这些方式、流程和内容的一个强约束。有了Spec,一切都是有依据的。
  2. 其次,Spec可以便于建模和自动化。建模这一点不必说,所有的Spec本身就是用来描述一个系统(或者对象)的各个细节和其应满足的规范,而这也是建模大致也是要做类似的事情。当你通过一个Spec先简单地定义一个系统,然后再一步步精化的时候,也就是从头至尾地走了一遍建模的过程。至于自动化,这个可能涉及到的东西更多了,比如你Spec了一个通信接口,要求必须满足何种需求,那么这种情况下,跟这个接口相关的I/O和Validation都可以通过对这个spec的解析来自动生成。
  3. 另外就是,形式化的Spec是可以被验证甚至是证明没有错误的。软件工程由个领域叫软件形式化方法(Formal Method),就是在这方面努力。如果我们能够验证Spec的模型是没有问题的,以及通过其自动生成一些东西的过程也是经过测试可靠的,那么就可以保证通过这种方法建模的系统一定是可靠的。
  4. Spec并不是像很多人想象的,或者很多人之前经历的那样,一直在写文档。当Spec是可以验证的时候,也就能转化成Agile的。因为这个过程不只是“完成一份文档”那么简单又复杂的任务。任意的敏捷建模方法都可以应用到Spec上,让其变得灵活可控。
  5. A camel is a horse designed by a committee.