浏览JML规格,看大致实现了什么功能
完成MyPerson,MyGroup,MyMessage等耦合度比较低的类,进一步理解题目
完成异常类
实现MyNetwork类
进行优化
分辨出条件并使用if
语句分开
实现所有的 exceptional_behavior
,抛出异常,剔除异常情况
阅读 normal_behavior
,如果有多条就分类
对于每个方法识别出模式和背后的含义
参考了往年的测试方式
JMLUnitNG
:测试MyGroup方法
用Junit对函数进行单元测试
本次作业main中容器均使用的Arraylist,Exception类使用了HashMap。
MyPerson类除了继承Person类的方法,另外加了link方法,将有关人员加入acquaintance中。
本次作业main中的类有对应的尝试使用了HashMap但用时反而长,所以继续使用了ArrayList作为容器。
MyPerson除了继承接口外新添addFirstMessage方法。
下面仅为main部分的UML类图,除了添加方法外容器与前面差别不大。
关于图的构建与维护策略,基本上是按照jml的说明构造的,并没有特意想(菜鸡落泪)
本单元二三次作业均出现了tle。
第二次作业性能分析如图所示,主要是MyNetwork和MyPerson类复杂度高。
第三次作业main类性能分析如图所示,也是MyNetwork和MyPerson类复杂度高。
tle原因分析:
isCircle、sendIndirectMessage、leastPathLength算法复杂度高。
一些O(n)复杂度的计算方法每次调用都重新计算。
后面一些方法用到了前面的方法,导致算法复杂度加和。
尽管使用了Dijkstra算法仍然tle,应该是前面一些地方算法不好。
虽然感觉这次比前两个单元都简单,但强测结果是最差的,还是算法的锅(数据结构不牢,地动山摇,假期一定重学数据结构),另外大多照jml抄并没有太多可写的……
原文:https://www.cnblogs.com/zxj9/p/14838552.html