Part 1 JML基础
Java Modeling Language(JML)是一种行为规范语言吗,用于规定Java类和方法的行为和接口。通过jml可以严谨的定义方法和类的行为,只需要阅读jml就可以无歧义的理解类和方法的功能,并可以开展测试。
使用JML的两个主要好处是:
1、对Java程序模块(即类和接口)的行为的准确,明确的描述以及Java代码的文档
2、工具支持的可能性
jml工具目前仍在开发中(疑似弃坑),工具链尚不完善
jml工具链:
openJML:对JML注释的完整性进行检查。
JMLUnitNG:根据jml自动生成测试样例并进行测试。
Part 2 JMLunit测试
经历了一上午+一下午后,我还是没能解决所有的报错,已放弃
Part 3 架构设计
hw9:
概述:
用每个person分别保存自己的link集合来保存整个社交网络,network只保存id到person的映射关系
hw10:
概述:
这次添加了Group,需要额外维护group层的人数、年龄平均等信息。
与Group层级有关的询问的信息都保存在group里,每次addRelation和addToGroup时对更新所有group的信息
hw11:
概述:
这次group增加了删除的需求,network层面增加了查询最短路、双连通等需求。并不需要改变架构,只需要添加对这些需求的支持
Part 4 BUG分析
hw9:
wa:认为自己与自己没有relation,导致querylink等函数出错。
hw10:
wa:如果addrelation重复添加自己,则会重复计数。
oe:提交了官方包
hw11:
wa:稍微修改了一下tarjin算法,因为我们只需要求两个点是否双连通,但是出了bug。bug实现:从一个询问人出发,dfs到另一个人,若路上所有人的子孙都有返祖边,则stronglink。修改:在dfs树上确认另一个点的位置后从该点开始,记录其子孙返祖边返回的最高点,跳到高度为该点+1的点,若能一直返回根则stronglink
tle:有一个qmp测试点ctle。qmp我采用了每次dfs的方法实现,在极限数据下时间比较接近时间限制。
Part 5 心得体会
这个单元我们主要学习了契约式设计、规格化设计,完成了三次面向规格编程的作业和一次完善规格的实验。相比指导书,规格描述部分需求时更加简便、无歧义,但是在描述一些复杂功能时非常冗长,比如查询连通块和查询双连通等功能。由于工具链尚不完善,在编写规格时往往也会出现一些难以察觉的问题,这些在实验和作业中都有所体现。测试是一个复杂的工程,只根据jml生成完备的测试显然是不现实的,我觉得jml这样一种规格语言用途也不在于自动测试,而在于辅助我们实现契约式设计,将一个大的工程拆分为互不干涉的模块。感谢课程组的老师和助教的辛苦付出;感谢分享自己宝贵经验的同学们。
原文:https://www.cnblogs.com/lllllllllllllllllllllllllllll/p/12941601.html