BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

一、需求分析

利用java线程的相关知识实现

1)实现两个容器类 Path 和 PathContainer

JML规格⼊⻔级的理解和代码实现

2)实现容器类 Path 和数据结构类 Graph

JML规格进阶级的理解和代码实现、设计模式的简单实战,以及单元测试的初步使用尝试。

3)实现容器类 Path ,地铁系统类 RailwaySystem

JML规格进阶级的理解和代码实现、设计模式和单元测试的进阶级实战。

二、思路分析

1、基于度量的程序结构分析

代码行数统计(利用Statistic插件)

第一次

 BUAA-OO 第三单元作业 JML 总结与思考

第二次

 

第三次

代码设计复杂度(利用MetricsReloaded插件)

ev(G)基本复杂度,用来衡量程序非结构化程度 iv(G)模块设计复杂度,用来衡量模块判定结构 v(G)独立路径条数

第一次

BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

 

第二次

 BUAA-OO 第三单元作业 JML 总结与思考

 

第三次

BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

 

BUAA-OO 第三单元作业 JML 总结与思考

 

2、BUG分析

第一次:

强测中得分 100

互测:未被hack。未hack到别人。

坑点:

同学在第三次作业强测中。亡羊补牢,为时不晚。

第二次:

在强测中得分 100

互测:未被hack。未hack到别人。

坑点:

第三次:

在强测中得分 100

互测:未被hack。未hack到别人。

坑点:

3、架构分析

第一次:

五容器大法

Path:

ArrayList保存边

HashSet处理本质不同边数计数的问题

PathContainer:

Hash

关于容器的选择:

HashMap OR TreeMap?

 

第二次:

BUAA-OO 第三单元作业 JML 总结与思考

 

相比第一次,加入了

保存图:二维矩阵实现的邻接表,用arraylist套hashset来保存,能够有效地处理重边和自环的问题。

因为点的id在int范围内,而点数不多,故将点离散化。采用hashmap单独离散化,可以方便查找点是否存在。

每次修改的时候重构图,并求n次单源最短路。

关于最短路算法:

 

第三次:

BUAA-OO 第三单元作业 JML 总结与思考

 

完全没有重构。

相比第二次,我认为

借鉴了xg的写法,

修改了通过连边权0实现缩点的方法、通过并查集求联通块的方法。感觉架构上比较好看。

缩点:bfs

求联通块:

关于最短路算法:

 

每次修改

关于构图:

菊花图:

两种建法:

堆优化dijstra和spfa均可。

缓存的实现:

菊花图

标程架构学习:

 

三、知识技能总结

1、JML语言的理论基础、应用工具链情况:

任何情况下,如果当前类或所依赖的类已经提供了相应pure方法, 则应直接使用相应方法来构造当前的方法规格

作业中的示例:

•通过repOK来进行运行时检查

•LSP替换原则

•在任何父类型对象出现的地方使用子类对象都不会破坏user程序的行为

•Java提供的Iterator接口定义了三个操作

public Interface Iterator {

 public boolean hasNext();

 public Object next() throws NoSuchElementException;

 public void remove() throws IllegalStateException, UnsupportedOperationException;

}

•集合类型需要提供一个迭代方法来返回一个生成器**(generator)**

•一个集合类型可以定义多个迭代器方法来提供多个生成器

•生成器的类型为Iterator

生成器能够以迭代方式生成相应元素的对象,它实现了Iterator 接口

迭代方法的规格定义生成器的行为,生成器的规格则遵循Iterator 接口规格

2、部署JMLUnitNG/JMLUnit,针对Graph接口的实现自动生成测试用例, 并结合规格对生成的测试用例和数据进行简要分析

 BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

3、JUnit

 BUAA-OO 第三单元作业 JML 总结与思考

BUAA-OO 第三单元作业 JML 总结与思考

 

 

四、心得体会

1、规格撰写:

2、个人理解:

上一篇:史上最全的CSS hack方式一览


下一篇:对前端工程师这个职位你是怎么样理解的?