标签:未能 路径 线程安全 列表 简单的 改变 缺陷 完成 bug
第五次作业
类图
代码度量分析
可以看出代码中还是有单个类过于冗杂的缺陷。
BUG分析
由于这次作业是第一次写多线程代码,对多线程的理解不够深刻,未能做好充分的准备,导致BUG太多,以至于多线程电梯不能正常运行,仅仅支持极为简单的指令。同样也忘记了输入时间不能以科学计数法来表示。
设计分析
这次作业完成的比较仓促,很多设计构思时不够完善就开始编写,使得bug层出不穷。尤其是多线程部分,由于对多线程和java的参数传递机制极其缺乏了解,以致于实现时出现了很多bug。
第六次作业
类图
度量分析
BUG分析
这次的作业由于自己对多线程有了更深的理解,作业要求的基本功能都能实现。但还是出现了两个bug。一个是因为输入了非法字符串而导致程序crash的bug。这个bug说来也好笑,助教发通知说“不许测格式”,我和我身边的同学普遍认为助教的意思是“只准按照规定的格式输入”。于是我们都把写好的正则表达式判断格式的部分删除了,并在readme里面详细规定好了应该输入怎样的格式以及会有怎样的运行结果。但无奈,对方还是测了格式并使得我的程序崩溃并将之作为一个bug上报。之后我向助教询问,但助教却说“不许测格式”是“不能以输出内容的格式为判错依据”。这就让我很无奈了,因为“不许测格式”这五个字表达的显然不足以让我理解到助教说的话的意思上去。所以以后希望助教提出要求时应该详细一点,让大家能有一个共同的理解,或者助教自己对要求应该作详细的说明。另外一个bug则是因为多个文件若除名称外完全相同的话就会输出错误的bug。
设计难点
本次作业主要难点在于正确理解指导书后,将每个功能理解清楚。我将每次监控请求都作为一个线程来运行,这样保证了每个线程之间的消息独立性。代码量和思维量也减小很多,体现了多线程编程的好处。
第七次作业
类图
度量分析
BUG分析
测试者给我提出了3个bug。第一个bug是不能正确处理地图,若地图中有制表符和空格则不能读入。这是因为我偷懒直接用的提供的GUI模板里面的地图处理方法而导致的。第二个bug是连续输入三条指令则会导致地图不连通的bug。但我在本地运行时绝对没有这种情况出现,已经申诉。第三个bug是出租车未能按照最短路径运行。这个bug我也存疑。我使用BFS方法找到每个点到各个点的最短路径,必不可能出现问题。
设计分析
将每辆出租车,每个请求各开一个线程。然后通过一个请求列表来进行出租车和请求之间的交互。这次出租车的状态转换之间的线程同步处理较为简单,只需注意出租车在改变状态时的几种情况即可。
发现别人BUG的策略
这几次的作业都是多线程相关的,直接调试的方法想要找到对面的bug实在太难。只能通过构造数据来使得对方的程序出现问题或者通过阅读代码发现逻辑错误来找到对手的bug。
多线程的设计关键在于几点:对对象分析之后线程的选择,线程与线程之间的同步状态的问题,线程安全问题。
多线程程序十分复杂,要搞清楚线程的状态与线程的安全问题是一件很困难的事情。多线程的程序需要反复思考才能确保正确性,因此在写程序之前先动脑子想清楚才行。
标签:未能 路径 线程安全 列表 简单的 改变 缺陷 完成 bug
原文地址:https://www.cnblogs.com/necrolyte/p/8981584.html