软件构造LAB2小贴士
作者:互联网
第二次软件构造实验一共有两道题,而重点在第一题,因为第二题主要是第一题结果的一个复用。而这次实验的重点在于规范的养成,比如如何写AF和RI,什么时候要写,如何写函数规约,如何写Testing Strategy等等。我将分别谈谈我的理解。
========================================================================================================================================================
1. 什么是AF和RI,怎么写,在哪里写
AF是Abstraction function的缩写,翻译过来就是抽象函数,它是从表示域到抽象域的映射关系。表示域指的是具体的实现实体,而抽象域一般是抽象出来便于使用者理解的。虽然说AF叫抽象“函数”,但是其实这并不是一个函数,因为抽象函数的映射并非双射,也就是表示域中未必都能映射到抽象域。这就引出了RI的概念,RI是Representation invariant的缩写,翻译过来是表示不变量。表示不变量是一个从表示值到一个布尔值的映射,如果表示值r能映射到抽象域,那么RI(r)为True,否则为False。我们一般关注为True的集合,也就是合法的表示值。
关于怎么写AF和RI的问题,定义是非常抽象的,那么这里举个例子:例如第一题中用户要求编程者构建一个类来实现Graph接口,Graph接口需要完成一些有向图的增删改这类基础操作,然后编程者决定定义一个Edge类,那么使用者关心的就是怎么Edge怎么抽象表示一个图,而编程者关心的是怎么使用这个Edge类来实现这个图,于是他在Edge类里定义了一些属性,包括String类型的source,String类型的target,Integer类型的weight,那么从这三个属性到:source表示一条有向边的起点,target表示这条有向边的终点,weight表示这条有向边的权重,这就可以是一个AF。也就是说可以把AF理解为一个函数,那么RI就是这个函数的定义域。特别的,按照规定,AF和RI是以//开头的几行。
关于在哪里写的问题,如果搞清楚了AF和RI的功能就不难。如果是为了方便记忆的话,那么AF和RI是描述变量的关系,那么就应该写在一个类开始定义变量的地方。除了AF和RI,还应该写你是如何防止这个类中发生rep exposure的。
2. 函数规约怎么写
关于函数规约就会简单一些,写在定义函数的之前,而且这是应该在你写函数实现之前就写好的。在函数声明前键入/**,eclipse就会自动帮你生成一个函数规约的格式,而你的工作就是介绍函数的传参,函数的返回值的意义,以及函数的功能。
3. Testing Strategy怎么写
这也比较简单,写在测试函数前面,主要描述测试函数是如何测试一个方法的。不需要写的非常详细,因为这只是一个策略,但是有哪些类别的情况,哪些边界情况需要讨论。特别的,这次实验的要求是在写方法之前就写好它的Testing Strategy。
========================================================================================================================================================
在实验的过程中我还遇到了一些其他的问题,在这里列举一下:
4.关于什么是<L>:这是JAVA中的泛型,它与String的关系是<L>包含String。<L>是一系列基础数据类型的集合。在具体实现的过程中,所有泛型的方法都要满足,不管使用者定义的是什么样类型的变量,都要可用。在具体的题目中,比如第一题中一开始要求的只有String类,这样就可以使用equals方法来比较两个变量是否相同,但是在泛型中就不能使用这种方法,因为在其他的类型中并不支持这样的方法。
5. 为什么同样的Graph接口,需要两个类ConcreteEdgesGraph和ConcreteVerticesGraph来实现,两者的区别是什么?这两个类在最终功能上没有区别,因为这两个类只实现了接口中声明的六个方法。当然,这里的功能相同是指当你使用这两个类来实现Graph接口时的,就是new的是一个Graph,而不是这两个类的实例。当然在这两个类的具体实现是不同的,按照数据结构的说法,它们存储有向图的方式分别是邻接矩阵和邻接表。
6.Junit的测试不用写main函数吗?肯定不用,因为在测试函数之前都会要求写@Test作为测试的入口。
7.测试的覆盖率不高怎么办?测试的覆盖于取决于测试对象的类的分支是否被覆盖到,所以检查测试的覆盖度可以很好的评估一个测试样例对于方法的各种边界情况、分支的覆盖率有多大。还有一个需要注意的是,如果你的main函数写在了其他的类里面,建议移出,否则main函数容易拉低你的测试覆盖度(如果你介意的话)。
标签:小贴士,函数,AF,LAB2,抽象,测试,软件,RI,String 来源: https://www.cnblogs.com/kujowarma/p/16340166.html