作业小结2
第五次作业 多线程电梯
设计策略
构造两个队列,PendingRequestList和ProcessedRequestList。 PendingRequestList:已经输入的未被调度的请求队列。 ProcessedRequestList:已经被调度和分配的请求队列,每个电梯都有一个这样的队列,电梯会按照这个队列的顺序来执行任务。 时间处理: 每个电梯记录nextRequest、nextTime;、requestTime,分别代表正在执行的请求是哪个,到达下一楼层的时刻(系统时间),执行完下一个请求的时刻(系统时间)。 每一次,电梯会sleep一定时间,这个时间通过计算得出:用nextTime - currentSystemTime - 500(前提是这个值是正数的情况下,会先用if来判断一下),之后在循环判断System是不是大于等于nextTime,如果是,表明到达新的楼层,执行相应的操作。 另外,如果nextTime == requestTime,则表明这个请求处理完毕,还是去队列中获得新的请求来执行。 如果nextRequest与本电梯对应的ProcessedRequestList.first不同,表明在请求队列中的列首插入了一个捎带请求,这可以很方便的监测到,之后执行一些修改requestTime、nextRequest之类的操作。 这样做的好处是,电梯时间的误差非常非常小,甚至可以说是没有误差(当CPU运行情况良好时)。
程序结构
class | Cyclic | Dcy | Dcy* | Dpt | Dpt* |
---|---|---|---|---|---|
top.buaaoo.gitlab.Direction | 0.0 | 0.0 | 0.0 | 7.0 | 10.0 |
top.buaaoo.gitlab.Elevator | 4.0 | 5.0 | 12.0 | 3.0 | 4.0 |
top.buaaoo.gitlab.Elevator.STATE | 0.0 | 0.0 | 0.0 | 2.0 | 5.0 |
top.buaaoo.gitlab.ElevatorRequest | 2.0 | 2.0 | 3.0 | 3.0 | 9.0 |
top.buaaoo.gitlab.FloorRequest | 2.0 | 2.0 | 3.0 | 3.0 | 9.0 |
top.buaaoo.gitlab.Input | 4.0 | 4.0 | 12.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.PendingRequestList | 0.0 | 4.0 | 4.0 | 4.0 | 5.0 |
top.buaaoo.gitlab.ProcessedRequestList | 0.0 | 2.0 | 4.0 | 2.0 | 5.0 |
top.buaaoo.gitlab.Request | 2.0 | 3.0 | 3.0 | 9.0 | 9.0 |
top.buaaoo.gitlab.Scheduler | 4.0 | 10.0 | 12.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.Scheduler_ALS | 4.0 | 4.0 | 12.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.Scheduler_FOOL | 4.0 | 3.0 | 12.0 | 1.0 | 4.0 |
Total | |||||
Average | 2.1 | 3.25 | 6.41 | 3.16 | 6.0 |
method | ev(G) | iv(G) | v(G) |
---|---|---|---|
top.buaaoo.gitlab.Elevator.changeRequest(long) | 3.0 | 6.0 | 8.0 |
top.buaaoo.gitlab.Elevator.Elevator(int,ProcessedRequestList) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Elevator.getDirection() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Elevator.getFloor() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Elevator.getMileage() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Elevator.getState() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Elevator.output(long) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Elevator.run() | 4.0 | 13.0 | 20.0 |
top.buaaoo.gitlab.Elevator.start() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.ElevatorRequest.ElevatorRequest(long,String,int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.ElevatorRequest.getDirection() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.ElevatorRequest.getFloor() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.ElevatorRequest.getId() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.FloorRequest.FloorRequest(long,String,int,Direction) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.FloorRequest.getDirection() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.FloorRequest.getFloor() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.FloorRequest.getId() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Input.addRequest(long,String[],int) | 1.0 | 9.0 | 10.0 |
top.buaaoo.gitlab.Input.errorInfo(String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Input.Input(PendingRequestList) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Input.run() | 5.0 | 8.0 | 10.0 |
top.buaaoo.gitlab.Input.start() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.PendingRequestList.addRequest(long,String,int,int,int) | 3.0 | 1.0 | 3.0 |
top.buaaoo.gitlab.PendingRequestList.addRequest(long,String,int,int,String) | 3.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.PendingRequestList.getFirst() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.PendingRequestList.getLast() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.PendingRequestList.PendingRequestList() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.PendingRequestList.removeRequest(Request) | 1.0 | 1.0 | 13.0 |
top.buaaoo.gitlab.ProcessedRequestList.addRequest(Request,Direction,int) | 14.0 | 8.0 | 20.0 |
top.buaaoo.gitlab.ProcessedRequestList.getFirst() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.ProcessedRequestList.getMain() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.ProcessedRequestList.nextRequest() | 4.0 | 5.0 | 5.0 |
top.buaaoo.gitlab.ProcessedRequestList.ProcessedRequestList() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Request.getTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Request.judgeSame(Request) | 3.0 | 5.0 | 7.0 |
top.buaaoo.gitlab.Request.Request(long,String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Request.toString() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler.deliverRequest() | 7.0 | 14.0 | 17.0 |
top.buaaoo.gitlab.Scheduler.findPickedRequest(int,Request) | 8.0 | 19.0 | 23.0 |
top.buaaoo.gitlab.Scheduler.findSameRequest(int,Request) | 6.0 | 4.0 | 6.0 |
top.buaaoo.gitlab.Scheduler.getSeconds(long) | 2.0 | 2.0 | 3.0 |
top.buaaoo.gitlab.Scheduler.main(String[]) | 1.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.Scheduler.outputSame(Request) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler.print(String) | 1.0 | 1.0 | 3.0 |
top.buaaoo.gitlab.Scheduler.run() | 1.0 | 9.0 | 9.0 |
top.buaaoo.gitlab.Scheduler.Scheduler() | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.Scheduler.start() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Scheduler_ALS.output(Request) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Scheduler_ALS.Scheduler_ALS() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler_ALS.simulate(int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler_FOOL.output() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Scheduler_FOOL.print_same(Request) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler_FOOL.Scheduler_FOOL() | 1.0 | 1.0 | 1.0 |
Total | 103.0 | 150.0 | 208.0 |
Average | 1.94 | 2.83 | 3.92 |
class | OCavg | WMC |
---|---|---|
top.buaaoo.gitlab.Direction | 0.0 | |
top.buaaoo.gitlab.Elevator | 3.66 | 33.0 |
top.buaaoo.gitlab.Elevator.STATE | 0.0 | |
top.buaaoo.gitlab.ElevatorRequest | 1.0 | 4.0 |
top.buaaoo.gitlab.FloorRequest | 1.0 | 4.0 |
top.buaaoo.gitlab.Input | 3.2 | 16.0 |
top.buaaoo.gitlab.PendingRequestList | 3.83 | 23.0 |
top.buaaoo.gitlab.ProcessedRequestList | 5.2 | 26.0 |
top.buaaoo.gitlab.Request | 1.5 | 6.0 |
top.buaaoo.gitlab.Scheduler | 4.5 | 45.0 |
top.buaaoo.gitlab.Scheduler_ALS | 1.33 | 4.0 |
top.buaaoo.gitlab.Scheduler_FOOL | 1.33 | 4.0 |
Total | 165.0 | |
Average | 3.11 | 13.75 |
从以上表格可以看出,这次程序架构还算不错。各个类之间的依赖性已经到了很低的程度。只是这次及其个别的方法,复杂度还是相对较高,这一点还需要改进。尤其是Elevator.run()这个方法,里面放的东西确实有点多了,行数都有79行,应该多分一些逻辑出去的。
Bug分析
本次因为格式原因,被测到一个Error Bug,因为使用了自己写的链表数据结构,针对某种特殊情况(当输入一行,第一个有误时)未进行处理,导致了Crash。然后就没有其它Bug了,有点可惜。从此以后学会了try catch包住main里所有代码,以减少crash可能性。
测试策略
测试方法有两种。 第一种:以测试树为基准,按分支来测试对方程序,进行黑盒测试。 第二种:以程序逻辑为基准,读对方代码中的逻辑,寻找逻辑上的漏洞。
心得体会
这一次多线程电梯的调度系统,明显感觉有趣了很多,我个人对多线程的理解还是不错的,没有花太多时间就完成了这个作业,而且除了那个格式错误导致的bug就没有别的bug了。这次作业让我有机会亲手写一个多线程的程序,我觉得很有成就感。感谢课程组!
第六次作业 IFTTT
设计策略
用SafeFile来实现文件相关的线程安全类,用Trigger作为触发器的线程,包含了触发器的属性,以及监测方法。Trigger生成后,Trigger不断扫描被监测的那些文件夹和文件。另外作者对于文件夹的监测,相当于对文件夹下所有的子文件的监测(也包括其所有子目录的所有子文件)。因此,对于大小的监测也只是针对文件的。
程序结构
class | Cyclic | Dcy | Dcy* | Dpt | Dpt* |
---|---|---|---|---|---|
top.buaaoo.gitlab.Act | 0.0 | 0.0 | 0.0 | 2.0 | 5.0 |
top.buaaoo.gitlab.Check | 4.0 | 2.0 | 8.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.Kind | 0.0 | 0.0 | 0.0 | 2.0 | 5.0 |
top.buaaoo.gitlab.Main | 4.0 | 7.0 | 8.0 | 3.0 | 4.0 |
top.buaaoo.gitlab.Model | 0.0 | 1.0 | 1.0 | 4.0 | 5.0 |
top.buaaoo.gitlab.SafeFile | 0.0 | 0.0 | 0.0 | 4.0 | 6.0 |
top.buaaoo.gitlab.Task | 4.0 | 2.0 | 8.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.TestThread | 4.0 | 2.0 | 8.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.Trigger | 4.0 | 6.0 | 8.0 | 1.0 | 4.0 |
Total | |||||
Average | 2.22 | 2.22 | 4.55 | 2.22 | 4.55 |
method | ev(G) | iv(G) | v(G) |
---|---|---|---|
top.buaaoo.gitlab.Check.check() | 1.0 | 7.0 | 7.0 |
top.buaaoo.gitlab.Check.run() | 1.0 | 2.0 | 3.0 |
top.buaaoo.gitlab.Main.init() | 1.0 | 1.0 | 5.0 |
top.buaaoo.gitlab.Main.input() | 7.0 | 14.0 | 20.0 |
top.buaaoo.gitlab.Main.main(String[]) | 1.0 | 4.0 | 4.0 |
top.buaaoo.gitlab.Model.Model(String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Model.rename(Model) | 5.0 | 4.0 | 5.0 |
top.buaaoo.gitlab.Model.repath(Model) | 5.0 | 4.0 | 5.0 |
top.buaaoo.gitlab.Model.resize(Model) | 4.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.Model.retime(Model) | 3.0 | 1.0 | 3.0 |
top.buaaoo.gitlab.SafeFile.add(String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.SafeFile.addFile(String) | 4.0 | 3.0 | 5.0 |
top.buaaoo.gitlab.SafeFile.changeSize(String) | 2.0 | 2.0 | 5.0 |
top.buaaoo.gitlab.SafeFile.changeTime(String) | 2.0 | 2.0 | 3.0 |
top.buaaoo.gitlab.SafeFile.delete(String) | 2.0 | 2.0 | 3.0 |
top.buaaoo.gitlab.SafeFile.exists(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.getFilename(String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.SafeFile.getName(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.getParent(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.getPath(String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.SafeFile.getSize(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.getTime(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.isFile(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.SafeFile.move(String,String) | 5.0 | 2.0 | 6.0 |
top.buaaoo.gitlab.SafeFile.rename(String,String) | 3.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.Task.addDet(String,Model,Model,String) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Task.addSum(String,String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Task.newStrDet(String,Model,Model,String) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Task.saveDet() | 1.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.Task.saveSum() | 1.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.TestThread.add(String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.addFile(String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.anotherOperation() | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.TestThread.changeSize(String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.changeTime(String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.delete(String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.move(String,String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.rename(String,String) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestThread.run() | 1.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.TestThread.testcase() | 4.0 | 1.0 | 4.0 |
top.buaaoo.gitlab.Trigger.run() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Trigger.task(Model) | 1.0 | 5.0 | 5.0 |
top.buaaoo.gitlab.Trigger.trig() | 13.0 | 14.0 | 14.0 |
top.buaaoo.gitlab.Trigger.Trigger(Kind,Act,String,String,Model,String) | 1.0 | 1.0 | 1.0 |
Total | 97.0 | 107.0 | 155.0 |
class | OCavg | WMC |
---|---|---|
top.buaaoo.gitlab.Act | 0.0 | |
top.buaaoo.gitlab.Check | 4.5 | 9.0 |
top.buaaoo.gitlab.Kind | 0.0 | |
top.buaaoo.gitlab.Main | 7.66 | 23.0 |
top.buaaoo.gitlab.Model | 3.6 | 18.0 |
top.buaaoo.gitlab.SafeFile | 1.8 | 27.0 |
top.buaaoo.gitlab.Task | 1.6 | 8.0 |
top.buaaoo.gitlab.TestThread | 2.1 | 21.0 |
top.buaaoo.gitlab.Trigger | 5.0 | 20.0 |
Total | 126.0 | |
Average | 2.86 | 14.0 |
从上面的表格来分析,这次作业的架构还是蛮不错的。各个类之间的依赖性非常的低,而且各个方法中没有复杂性特别特别高的。只是Main.input()这个方法相对其它方法而言,略微有点复杂了。这已经不是第一次了,这次我已经意识到了这一个问题:看来以后针对输入处理,还需要想想办法来降低方法复杂度呀~!
Bug分析
这次由于对实验指导书有误解,没有实现新建一个文件夹的功能,也没有持续追踪文件。因此被报了1个incomplete和1个error。但是总体来看没有其它bug了,而且这些bug完全是个人对于实验指导书的理解错误造成的。
测试策略
这次测试,主要是以分支树为主来测试的,因为这次的测试树已经非常详尽了。所有功能一一遍历了一遍。
心得体会
这次作业是第二次多线程的作业了,我感觉自己对多线程的理解进一步加深了,而且对synchronized关键字的理解越来越到位了。非常感谢课程组!感谢老师!感谢助教!感谢互测的同学们!
第七次作业 出租车调度系统
设计策略
线程包括:调度器线程,出租车线程,输入线程。
资源包括:UserList用户请求队列。
调度器负责分发UserList中的User给Taxi,Taxi收到User之后去接客,送客,然后再进入WFS状态。
程序结构
class | Cyclic | Dcy | Dcy* | Dpt | Dpt* |
---|---|---|---|---|---|
top.buaaoo.gitlab.brush | 0.0 | 3.0 | 5.0 | 1.0 | 12.0 |
top.buaaoo.gitlab.debugform | 0.0 | 0.0 | 0.0 | 1.0 | 10.0 |
top.buaaoo.gitlab.DrawBoard | 0.0 | 1.0 | 6.0 | 1.0 | 11.0 |
top.buaaoo.gitlab.guigv | 0.0 | 2.0 | 4.0 | 3.0 | 13.0 |
top.buaaoo.gitlab.guiInfo | 0.0 | 2.0 | 2.0 | 3.0 | 14.0 |
top.buaaoo.gitlab.guitaxi | 0.0 | 0.0 | 0.0 | 3.0 | 14.0 |
top.buaaoo.gitlab.gv | 0.0 | 0.0 | 0.0 | 3.0 | 15.0 |
top.buaaoo.gitlab.Input | 7.0 | 3.0 | 20.0 | 1.0 | 7.0 |
top.buaaoo.gitlab.Main | 0.0 | 3.0 | 11.0 | 0.0 | 0.0 |
top.buaaoo.gitlab.Map | 7.0 | 2.0 | 20.0 | 4.0 | 7.0 |
top.buaaoo.gitlab.mapInfo | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.myform | 0.0 | 2.0 | 7.0 | 1.0 | 10.0 |
top.buaaoo.gitlab.node | 0.0 | 0.0 | 0.0 | 1.0 | 15.0 |
top.buaaoo.gitlab.Point | 0.0 | 1.0 | 1.0 | 6.0 | 8.0 |
top.buaaoo.gitlab.processform | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
top.buaaoo.gitlab.Scheduler | 7.0 | 9.0 | 20.0 | 3.0 | 7.0 |
top.buaaoo.gitlab.Settings | 7.0 | 1.0 | 20.0 | 5.0 | 7.0 |
top.buaaoo.gitlab.Taxi | 7.0 | 7.0 | 20.0 | 3.0 | 7.0 |
top.buaaoo.gitlab.TaxiGUI | 0.0 | 6.0 | 9.0 | 3.0 | 9.0 |
top.buaaoo.gitlab.TaxiState | 0.0 | 0.0 | 0.0 | 4.0 | 8.0 |
top.buaaoo.gitlab.TestAPI | 7.0 | 4.0 | 20.0 | 2.0 | 7.0 |
top.buaaoo.gitlab.User | 7.0 | 5.0 | 20.0 | 3.0 | 7.0 |
top.buaaoo.gitlab.Userlist | 7.0 | 3.0 | 20.0 | 1.0 | 7.0 |
Total | |||||
Average | 2.43 | 2.34 | 8.91 | 2.30 | 8.52 |
method | ev(G) | iv(G) | v(G) |
---|---|---|---|
top.buaaoo.gitlab.brush.draw(Graphics2D) | 1.0 | 14.0 | 26.0 |
top.buaaoo.gitlab.debugform.debugform() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.DrawBoard.paintComponent(Graphics) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.guiInfo.distance(int,int,int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.guiInfo.initmatrix() | 1.0 | 1.0 | 10.0 |
top.buaaoo.gitlab.guiInfo.pointbfs(int) | 1.0 | 5.0 | 14.0 |
top.buaaoo.gitlab.gv.getFormatTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.gv.getTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.gv.printTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.gv.stay(long) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.Input.run() | 1.0 | 5.0 | 8.0 |
top.buaaoo.gitlab.Main.main(String[]) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Map.getGuimap() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Map.getPoint(int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Map.getRoute(Point,Point) | 5.0 | 4.0 | 6.0 |
top.buaaoo.gitlab.Map.loadMap() | 1.0 | 11.0 | 13.0 |
top.buaaoo.gitlab.mapInfo.readmap(String) | 2.0 | 6.0 | 7.0 |
top.buaaoo.gitlab.myform.myform() | 1.0 | 4.0 | 8.0 |
top.buaaoo.gitlab.node.node(int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.addAroundPoint(Point) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.getAroundPoints() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.getRandomAroundPoint() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.getX() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.getY() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.Point(int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Point.toString() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.processform.processform() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler.addUser(int,int,int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler.getPendindUsers(int,int) | 1.0 | 6.0 | 6.0 |
top.buaaoo.gitlab.Scheduler.getTaxiById(int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler.getTaxisByState(TaxiState) | 1.0 | 3.0 | 3.0 |
top.buaaoo.gitlab.Scheduler.init_taxis() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Scheduler.main(String[]) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.Scheduler.run() | 1.0 | 7.0 | 7.0 |
top.buaaoo.gitlab.Settings.OUT(String) | 1.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.Taxi.getAim() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getCredit() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getID() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getLast() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getNext() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getNextUpdateTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.getTaxiState() | 2.0 | 1.0 | 2.0 |
top.buaaoo.gitlab.Taxi.pick_arrived(long) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Taxi.picking_arrived(long) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.run() | 1.0 | 13.0 | 14.0 |
top.buaaoo.gitlab.Taxi.setUser(User,LinkedList) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.stop_arrived(long) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.Taxi(int,int,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi.wfs_arrived(long) | 1.0 | 3.0 | 3.0 |
top.buaaoo.gitlab.Taxi.work_arrived(long) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TaxiGUI.LoadMap(int[][],int) | 1.0 | 2.0 | 4.0 |
top.buaaoo.gitlab.TaxiGUI.RequestTaxi(Point,Point) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.TaxiGUI.SetTaxiStatus(int,Point,int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.TaxiGUI.TaxiGUI() | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.TestAPI.checkTaxiById(int) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.TestAPI.checkTaxiByState(TaxiState) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.User.deliveredByScheduler() | 5.0 | 10.0 | 12.0 |
top.buaaoo.gitlab.User.getAim() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.getRoute() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.getStart() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.getTime() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.getWait_time() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.responsedByTaxi(Taxi) | 2.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.User.toString() | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.User.User(long,Point,Point,LinkedList) | 1.0 | 1.0 | 1.0 |
top.buaaoo.gitlab.Userlist.addUser(int,int,int,int) | 1.0 | 2.0 | 2.0 |
top.buaaoo.gitlab.Userlist.checkSameUser(int,int,int,int) | 4.0 | 5.0 | 7.0 |
top.buaaoo.gitlab.Userlist.getNextUser() | 3.0 | 2.0 | 3.0 |
Total | 84.0 | 159.0 | 213.0 |
Average | 1.23 | 2.33 | 3.13 |
class | OCavg | WMC |
---|---|---|
top.buaaoo.gitlab.brush | 20.0 | 20.0 |
top.buaaoo.gitlab.debugform | 1.0 | 1.0 |
top.buaaoo.gitlab.DrawBoard | 1.0 | 1.0 |
top.buaaoo.gitlab.guigv | 0.0 | |
top.buaaoo.gitlab.guiInfo | 6.66 | 20.0 |
top.buaaoo.gitlab.guitaxi | 0.0 | |
top.buaaoo.gitlab.gv | 1.0 | 4.0 |
top.buaaoo.gitlab.Input | 4.0 | 4.0 |
top.buaaoo.gitlab.Main | 1.0 | 1.0 |
top.buaaoo.gitlab.Map | 4.5 | 18.0 |
top.buaaoo.gitlab.mapInfo | 4.0 | 4.0 |
top.buaaoo.gitlab.myform | 1.53 | 20.0 |
top.buaaoo.gitlab.node | 1.0 | 1.0 |
top.buaaoo.gitlab.Point | 1.0 | 7.0 |
top.buaaoo.gitlab.processform | 1.0 | 1.0 |
top.buaaoo.gitlab.Scheduler | 2.42 | 17.0 |
top.buaaoo.gitlab.Settings | 1.0 | 1.0 |
top.buaaoo.gitlab.Taxi | 2.06 | 31.0 |
top.buaaoo.gitlab.TaxiGUI | 1.8 | 9.0 |
top.buaaoo.gitlab.TaxiState | 0.0 | |
top.buaaoo.gitlab.TestAPI | 1.5 | 3.0 |
top.buaaoo.gitlab.User | 2.33 | 21.0 |
top.buaaoo.gitlab.Userlist | 3.0 | 9.0 |
Total | 193.0 | |
Average | 2.38 | 8.39 |
从这些分析数据来看,这次作业的架构还可以。各个类之间依赖性很低。(最近三次作业,这项指标都超级好,尤其是跟前三次比起来,已经好太多了。看得出来,OO这门课已经帮我改善了很多编码习惯,让我的代码越来越好了,非常感激OO课程组)至于方法的复杂性,也没有很高的,最高的就是那个GUI绘图程序了。可见我这次作业的代码还是不错的,比前两次都有改进。
Bug分析
这次的bug略微有点多,还是很感谢帮我测试的同学,这么辛苦,为我找了那几个bug,让我以后作业都可以避免这些Bug,也确实我个人没有尽力去测试我自己的代码,大概是因为上周压力实在是太大了,作业太多,睡眠太少,废寝忘食,沉迷学习(不止OO),身心憔悴,没有功夫具体测试我自己的代码了。不过这是第一次,也是最后一次了,因为我相信从第9周开始,我的课业压力会小很多,而且自己也能够花更多时间在OO课程上了,一定会在交作业前对自己的程序测试很多遍,尽力让他们找不到我的Bug,这样才是一份作业应该有的样子。
测试策略
公测是按照测试树来测试。
互测则有普通测试、压力测试、边界测试等等测试方法。这次我没有使用自动化测试,大概是因为上周压力实在是太大了,作业太多,睡眠太少,废寝忘食,沉迷学习(不止OO),身心憔悴,没有功夫搞了,希望有机会能尝试一下,很好奇,很好玩。
心得体会
这是第三次写多线程作业了,而且这次的多线程更加的复杂,也对程序的效率有了一点点要求。感觉自己对多线程的理解真的是越来越深入了,明白怎样去优化一个线程的效率,怎样恰当的使用synchronized代码块,而不是给每个方法都加一个synchronized。再次感谢面向对象这门课程的课程组!感谢辛勤的老师们!感谢热情的助教们!感谢勤奋的同学们!