第三单元总结

一、JML语言理论基础及工具链

1、JML语言理论基础

JML语言是对java程序进行规格化的一种形式化的语言,是使用者和开发者都要遵从的一种契约。JML有着自己一套完整的语法,形式化地表现类的规格和方法规格,只要正确实现了JML规定的规格,就可以保证了程序功能的正确性。 对于程序的设计和维护有着重要意义。

2、JML应用工具链

JML常用有三个工具链: 

OpenJML:检查JML规格是否正确

SMT Solver:用来检查JML规格是否严格按照JML规格来完成的

JMLUnit\JMLUnitNG:可以根据JML规格自动构造测试程序进行测试

二、JMLUnit

用JMLUnit测试可以方便测试边界和不合法的数据,下面是测试的部分结果。

三、构造分析

这里贴出的是第三次作业的UML图,较前两次增加了一个MyPoint类方便进行图的一些算法。

前两次作业主要就是严格按照规格进行实现,对于整体的设计思路和性能问题没有做太多的考虑,在第一次作业中结果还可以,在强测中得了100分,但是第二次由于性能问题没有进入互测。

第三次作业在整体得设计思路和性能上都考虑了很多使用合适的数据结构,用中间数据来取代遍历,在这方面没有什么问题,但是在图的算法实现,也就是实现JML规格规定的功能上出现了问题,也没有进入互测。

四、bug分析

第二次出现的问题主要是性能问题,在第三次作业的代码实现中,tarjan算法的实现中出现了bug,倒是wa了很多点。

五、心得体会

1、关于JML

JML的使用给代码的实现与测试带来了很大的方便,使用JML会使得代码更加规范,可以对程序进行形式化的验证,也方便团队的合作。这次对JML的使用让我体会到了在写程序的时候,要注意代码的规格化,规范化,以及对边界和异常的处理。

2、关于程序设计

之前写程序,主要的关注点都是在功能实现的正确性上面,对程序的性能关注的比较少,经过本次作业,体会到了设计好程序框架的重要性,选择合适的数据结构和合适的算法,进行更好更快更美的代码实现。

posted @ 2020-05-23 20:50  white8  阅读(172)  评论(0编辑  收藏  举报