您的位置:首页 > 其它

2015.7.4 规格

2016-05-08 17:42 176 查看
规格牵扯到两组关系,第一是抽象与实现,第二是程序员和用户。

从第一个角度来看:抽象是一个虚的东西,而实现是一个实的东西,实现应该是依照于抽象来实现,因此用规格来具体描述抽象从而使得实现更加容易。

从第二个角度来看:程序员关注的是用户所需要实现的功能怎么写出来,对于用户来说,我不关注代码怎么写出来,而关注的是这个模块,这些代码实现了一个什么样的功能,规格在这两方面之中充当了一个中介的角色。

9.1 规格和规格满足集

规格的目的是为了定义抽象的行为,用户依赖于这个行为,实现者必须提供这个行为的具体实现。一个提供了所描述行为的实现称为可以满足规格。

规格的含义定义为满足其所有程序模块的集合。我们称之为规格满足集。

也就是说,规格满足集就是满足规格的所有实现的集合。规格只不过是把这些实现需要满足的一个共同特点描述了出来。

总结:

规格描述了某些抽象的行为。

一个实现提供了规格所描述的行为,那么这个实现就满足了一个规格。

规格满足集就是能够满足规格要求的所有程序的集合。

9.2 规格的某些标准

规格的三个特征:限制性、一般性、清晰性

好规格的特征

充分限制性:排除错误实现

充分一般性:不排除正确实现

清晰:容易被任何人理解

限制性:

限制性就是错误的实现一定不会体现在我的effects中。

为了使得一个规格能够尽可能的满足充分限制性,我们首先来看什么原因会导致一个规格出现这些问题,这样我们能够更好的规避这些问题。

第一点就是规格中的requires中未明确提出的要求。啦啦啦啦啦

第二点就是一些边界情况的标记。

所以我们为了实现限制性的时候需要特别仔细。

一般性:

一般性就是正确的实现一定包含在我的effects中。

其中有一种更精确,或者说是更具体的表示,可以称之为操作规格。操作规格几乎把实现我规格目标的思路用自然语言表达了出来。这样的操作规格一定是正确的,但是也是限制了实现的方式的。使得规格的一般性较差。

为了检查我规格的一般性,我需要对requires和effects的每一点都检查,看看是不是冗余,如果是冗余的话,那么可以删除或者削弱这些条件,使得我的规格更具有一般性。

清晰性:

清晰性就是我的规格能否使得每一名读者都很好的理解我要做什么,明白而且没有歧义。

清晰性要求我的描述语言既不能太短也不能冗长,最好就是把该说的明确说出来,然后通过i.e.或者e.g.举适当的例子。

9.3 为什么要有规格

抽象(n.)是非常抽象(adj.)的,需要通过规格的方式清晰的表达出来。

规格同样是服务提供者和用户之间的桥梁。

根据经验,规格促使我们思考一些问题和不明确的点,能够迅速处理一些特殊情况。

规格在维护中是一大利器,清晰准确的规格文件是高效维护的前提。

规格的好处

规格描述抽象,模块有实现的标准

规格清晰了抽象,同时暴露出不明确的问题,迫使我们再次从抽象的角度明确这些问题的解决。

规格是用户和实现者之间的七月,实现者提供一个满足规格的实现,用户只关注规格而不关注规格满足集中的那个实现。

9.4 总结

规格具体了抽象,表达了满足抽象的合法实现又什么样的共同点,这些具体的实现的集合称为规格满足集。

用户通过规格确定可以依赖什么,实现者通过规格确定提供什么。

好的规格具有限制性、一般性而且清晰。限制性使得规格不会包含错误的实现,一般性使得规格不会排斥正确的实现。清晰性使得用户可以容易而且正确的理解规格。通常我们可以以一个简洁的声明开始逐渐添一些必要的信息来扩种我的规格。

规格的用途体现在:第一、将注意力集中于抽象的属性。第二、作为一个文件,从设计到维护都很有价值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: