软件构造_Spec

spec基本概念

         "spec" 表示 "Specification",即规格、规约、规范的意思。在软件构造中,Specification 是指用于描述软件系统行为和功能的形式化规范,是软件工程中非常重要的概念。

        软件的功能和特性是由需求定义和规格化描述的。需求定义阶段通常由需求分析师或系统分析师开展,他们与客户/用户合作,了解他们的需求和期望。在此过程中,需要详细定义软件应该实现的具体功能,以及软件在不同情况下的行为。

 

spec格式:每一个类或者方法的前面

spec组成与分类

        spec从annotation上由@parameter、@throws、@return组成。完整的spec其需要涵盖若干对于前置条件和后置条件的说明,包括基本使用方法、immutable/mutable、类型限制、实用可能出现问题的情况的描述。

书写规范举例

/**
     * Get the target vertices with directed edges from a source vertex and the
     * weights of those edges.
     * 
     * @param source a label
     * @return a map where the key set is the set of labels of vertices such
     *         that this graph includes an edge from source to that vertex, and
     *         the value for each key is the (nonzero) weight of the edge from
     *         source to the key
     */

        约定俗成的规矩是使用者需要在满足前置条件的情况下,才能得到正确的结果,
所以要求使用时需要认真阅读spec。当然出于程序员的良心,可能会帮client多考虑一些事情,或者是额外处理一些情况,或者是抛出相应的异常使其fall fast。 

行为等价性

        行为等价(Behavioral equivalence),即不同的代码实现,对于用户来讲,是否是等价的,即相对于提供的同一个spec,是不是都被满足了,如果都满足那么就算做等价。所以重点就是要站在用户端看待问题,只要同一个spec被满足,则说明实现了相同的功能,即同一个spec所有实现是等价的。

        行为等价性可以被视为一种黑盒测试技术,其中测试人员将计算机程序的输入和输出(包括程序的界面,数据库操作和整个程序的行为)与其他实现进行比较,以检查不同实现之间的一致性和一致性,从而找出系统中的缺陷或错误。如果两个或更多程序实现产生同样的输出,那么它们是行为等价的。

spec的强弱的判断和比较方法

        前置条件越弱,一方面,对于用户更加的友好,其不用考虑太多的情况即可放心使用。另一方面,对于程序员的要求就越高,因为这意味着他需要考虑到更多的情况,使得程序员不能随便实现了。使得规约变强。

        后置条件越强,对于用户来讲得到的信息越具体,这样就需要程序员使用更加具体的实现方式,限制了实现的手段,使得程序员不能随便实现了。使得规约变强。

        值得一提的是一般客户不喜欢太强的前置条件,从而我们可以通过在后置条件抛出异常的方法,增强后置条件来使得spec的强度增强。

        规约越强,实现的手段就越少,程序员实现的自由度就变少了,如果用椭圆来表示spec的话,那椭圆的面积就应该变小。所以我们在实现了一个规约之后,代码可以直接适用于比这个规约弱的规约,但是不再能适用于比这个强的规约了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值