spec是程序与客户端之间关于方法的协议,也是开发者在写这个方法时所需要遵守的准则。它蕴含着对开发者和客户端两边的要求。在实际使用中,规约有很多的必要性以及优点。
一.协调开发者与客户端,提高效率
精确的规约有利于区分责任,客户端无需阅读调用函数的代码,理解spec即可。给双方都确定了责任,在调用时都要遵守。规约还保证了开发者与调用者对方法的理解一致,即根据规约开发和调用方法,在分工合作时能够将工作模块化,每个人负责好自己的工作,通过规约将其联系在一起,这样有效地提高了效率。
二.内部代码与客户端之间的“防火墙”
规约可以隔离变化,无需通知客户端,扮演防火墙角色,代码内部实现的策略与细节不在规约里体现,规约只告知方法的作用以及要求的调用条件与结果,代码具体实现放在内部注释中,便于日后开发者维护与理解自己的代码,只需保证规约不变弱,能够满足原本的要求即可。这样保证了代码的封装,避免泄露
三.根据规约编写测试
在开发中,要求需要先定义方法的spec,然后依据规约来编写方法的测试用例,最后再来写该方法的代码。这样做是通过黑盒测试的方法,在测试用例覆盖率足够的前提下,能够基于客户端的角度出发来保证调用的方法满足规约条件,能够解决相应的问题。如果不根据规约来写测试用例,而是先将具体代码写了之后再来进行测试,就可能会带着先入为主的观念,测试不再是黑盒测试,可能会出现遗漏与错误。此时,你的测试就不是完全基于规约去进行的了,也就不能保证能够对规约中规定的功能进行全面且正确的测试。
四.规约的强度与前置后置条件
前置条件:对客户端的要求;后置条件:对开发者的要求。在再前置条件满足时,后置条件也必须满足。 规约的强度:越强的规约,对客户端的要求就更低,对开发者的要求更高,客户端可以输入的参数的要求就低,因为强的规约能够考虑更多,处理更多种输入,对于更多的输入都能处理成对应的输出,因此对开发者的要求就多了。所以更强的spec意味着更弱的前置条件和更严格的后置条件
五.对规约图的理解
规约图可以理解成符合该归约的方法的数量,规约图越大,意味着有更多的实现方法来符合这个规约,开发者的选择多了,规约强度就弱了。而规约图越小,意味着能够实现规约或者说处理前置条件的实现代码方法少了,对开发者的要求就高了。更强的规约表示的规约图包含在弱规约的规约图中,这是因为能够处理强规约的实现代码方法更全面,同时一定能处理弱规约。