其他分享
首页 > 其他分享> > BUAA OO 第三单元总结

BUAA OO 第三单元总结

作者:互联网

BUAA OO 第三单元总结

一、题目简介

第三单元整体目标为实现简单社交关系的模拟和查询,让我们了解了基本的JML语法和语义,以及具备根据JML给出的规格编写Java代码的能力。

二、架构设计

(一)类图及分析

在此仅放出最后一次作业的类图,且去掉了实现的异常类。

本单元作业实现给出每个类的结构以及方法规格,只要按照规格实现方法即可,但是为了便于部分方法的实现,仍可以实现其他类,例如算法工具类等等。在本单元最后我在原有类基础上实现了Edge类用来保存添加关系后的两个人及关系的权值,便于最小生成树的生成,还多加了Node类,便于最短路径的查询。

(二)图模型构建和维护策略

三、性能问题和修复情况

四、基于规格的测试策略

由之前的分析可以看出,此单元的测试需要从两方面进行,一个是正确性测试,另一个则是性能测试。

对于正确性测试,首先尝试了指导书中推荐的JUnit来测试,在刚开始尝试时觉得效果还不错,但在函数数量较多的情况下,对每一个函数手动构造数据过于复杂,于是采取生成随机数据与他人对拍来验证正确性问题。按照此方法检测程序正确性效果不错,不需要很多次即可发现问题。

对于性能测试,首先需要增加输出cpu运行时间的部分,其次在随机生成测试数据时对一些特定指令增加关注,比如增加此类指令的数量等等方法,但正因为如此,将注意力都放在了在实现时较为困难的指令,很容易忽略一些较为简单的指令,例如之前出现的qgvs指令,就是因为没有对其进行较强的测试导致的。

五、拓展JML

新增接口与方法

JML规格

六、心得体会

在这单元学习了 JML语言,接触了契约式编程,按照JML规格写作业不用花费太多精力,只要满足规格代码正确性基本得到了考察,只要考虑性能问题,即如何优化。JML描述十分严谨,但因此出现的问题就是描述可能比较抽象而且会很长,在作业中几个稍复杂一点的方法JML规格写的令人震惊,第一眼就不想去阅读。但在三次作业的迭代中使得阅读JML规格的能力逐步提升,对部分的规格描述也有了一定印象。需要说明的是因为性能的限制,所以不能完全按照规格里的实现方法进行代码的书写,而是需要进行灵活的优化,也是对规格的理解和阅读要求的进一步提升。

标签:OO,HashMap,int,BUAA,规格,JML,new,id,单元
来源: https://www.cnblogs.com/xzynb/p/16338982.html