欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

作业小结2

程序员文章站 2022-06-24 12:51:47
作业小结2 第五次作业 多线程电梯 设计策略 构造两个队列,PendingRequestList和ProcessedRequestList。 PendingRequestList:已经输入的未被调度的请求队列。 ProcessedRequestList:已经被调度和分配的请求队列,每个电梯都有一个这 ......

作业小结2

第五次作业 多线程电梯

设计策略

构造两个队列,PendingRequestList和ProcessedRequestList。 PendingRequestList:已经输入的未被调度的请求队列。 ProcessedRequestList:已经被调度和分配的请求队列,每个电梯都有一个这样的队列,电梯会按照这个队列的顺序来执行任务。 时间处理: 每个电梯记录nextRequest、nextTime;、requestTime,分别代表正在执行的请求是哪个,到达下一楼层的时刻(系统时间),执行完下一个请求的时刻(系统时间)。 每一次,电梯会sleep一定时间,这个时间通过计算得出:用nextTime - currentSystemTime - 500(前提是这个值是正数的情况下,会先用if来判断一下),之后在循环判断System是不是大于等于nextTime,如果是,表明到达新的楼层,执行相应的操作。 另外,如果nextTime == requestTime,则表明这个请求处理完毕,还是去队列中获得新的请求来执行。 如果nextRequest与本电梯对应的ProcessedRequestList.first不同,表明在请求队列中的列首插入了一个捎带请求,这可以很方便的监测到,之后执行一些修改requestTime、nextRequest之类的操作。 这样做的好处是,电梯时间的误差非常非常小,甚至可以说是没有误差(当CPU运行情况良好时)。

程序结构

作业小结2

作业小结2

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不断扫描被监测的那些文件夹和文件。另外作者对于文件夹的监测,相当于对文件夹下所有的子文件的监测(也包括其所有子目录的所有子文件)。因此,对于大小的监测也只是针对文件的。

程序结构

作业小结2

作业小结2

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状态。

程序结构

作业小结2

作业小结2

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。再次感谢面向对象这门课程的课程组!感谢辛勤的老师们!感谢热情的助教们!感谢勤奋的同学们!