第一次作业:
度量分析程序结构:一共有3个类,分别是Poly、ComputePoly和Stringcheck。其中Poly是单项式类,有2个属性(指数和系数)和7个方法 ,方法包括单项式加减法、初始化等,该类代码共约80行。ComputePoly是计算类,有3个属性,分别是多项式(Poly数组)、运算符数组和多项式的项数,有5个方法,包括初始化、解析多项式和多项式加减法。main函数也放在了这个类里,main函数接收输入的表达式,将其作为参数交给类的方法使用。该类加上main函数一共约200行代码。Stringcheck类是检查类,只有一个属性,代表错误编码,有大约35个方法,每个方法会检查一种符号可能出现的格式错误,以及表达式的合法性。该类代码共约650行,其中检查格式错误的方法是按照表达式的每一个符号分类的,这些方法的代码基本相同(除了正则表达式),即正则匹配判断方式相同,因此这个类中重复部分很多。由类图知类的内聚性较强,耦合性较差。
自己程序的BUG:输入两个括号没有报错,右括号多了逗号没有报错。出现BUG的原因在于我是对表达式的每一个符号用相应的多个字符串进行匹配分析,在写作业的过程中还是忽略了一些情况,导致出现BUG。这提醒我要有针对性的分类,而不是每种情况都单独讨论,因为很有可能就会遗漏一些特殊情况。
发现别人的BUG策略:错误分类树十分详细地列出了一些可能出现的错误,所以我根据分类树构造一些10个以内式子的输入进行测试。除此之外,我还根据规定数目的范围构造了边界范围的测试以及超长多项式的压力测试。


第二次作业:
度量分析程序结构:一共有5个类,分别是Elevator、Floor、Request、Requeue、Scheduler。Elevator是电梯类,有2个属性,当前时间和电梯所在楼层,有3个方法,包括构造函数和电梯移动方法。main函数在Elevator类中,main函数中除了输入,还有对输入合法性的一些判断。该类加上main函数一共约150行。Floor是楼层类,应要求而设定,在我的代码中这个类没有作用,设定为空类。Request是请求类,有4个属性,包括请求类型、方向、楼层和时间,有11个方法,包括检查请求格式、解析请求、获得请求的属性等方法。该类代码共约220行。Requeue是请求队列类,其属性是LinkedList实现的队列,其元素类型为Request,其方法包括入队,出队,判断是否为空。该类代码共约40行。Scheduler是调度器类,没有属性,其方法Schedule是不断地取队头请求,执行请求并删去队列中同质请求,该类代码共约40行。由类图知类的内聚性较强,耦合性较差。
自己程序的BUG:暂未发现BUG
发现别人BUG的策略:本次作业的测试分为功能性测试(合法请求是否计算正确)和合法性测试(非法请求能否检测)。还是和第一次一样,通过错误分类树构造不超过10条的简易测试样例。除此之外,根据请求个数和时间范围等构造压力测试。最终还是没有发现别人程序的BUG。


第三次作业:一共有6个类和1个接口,类分别是Elevator、Floor、Request、Requeue、Scheduler和BetterSchedule,接口是moving。其中前五个类与第二次作业基本相同,但是加了一些新的东西:请求类Request中重写了toString方法,并添加了判断捎带请求的方法passing,添加的代码约170行;Elevator类实现了moving接口,重写了toString方法,并添加了针对捎带请求的移动的新方法,添加的新方法约20行。BetterSchedule类是Scheduler类的子类,没有属性,有5个方法,分别是ArrayList的排序(升序和降序)、捎带请求的调度、同层请求的调度和总调度方法。代码共约530行。类的内聚性较强,耦合性一般。
自己程序的BUG:对于同质请求,刚开始以为和上次作业一样一次性判断,后来发现了一些不是同质的却被判断为同质请求,在发现这个错误后,改成了边运行边判断的方式,但是还是存在BUG,最后发现是判断条件错误。对于同层请求,有些方向不同的请求会进行同层处理,正确的同层请求不能按输入顺序输出,最终发现是通过遍历寻找输入顺序的方法错误。出现这些BUG的根本原因还是因为写之前没有仔细阅读指导书,没有透彻地理解,看了一部分就按自己的想法写,导致出现BUG,也让程序非常臃肿。
发现别人BUG的策略:和上次一样分为功能性测试和合法性测试,并按照错误分类树构造相应的测试样例。但是这些测试样例还不够完备,因此使用了4个上百条的请求作为强测。最终发现了别人的楼层捎带请求判断错误(上下行),同层请求输出错误。


心得体会:作为一个刚接触Java的初学者,对于OO作业总体的感受就是写得挺累的,主要还是自己的问题,每次作业都是拖到周一开始写,然后周二晚上可能会熬夜,卡在周三晚上之前提交。特别是第三次作业,周二晚上熬到4点才基本写完,然后周三一直debug,并且没有de完。因此我决定以后的作业周六就开始构思,周末完成大部分工作,这样也让后续的debug更轻松。除此之外,每次作业之前一定要认真地看指导书以及答疑区的问题,理清楚写作业的思路,否则可能会导致程序BUG很多,甚至会导致重写。通过这三次作业我也收获了很多,比如类,继承,接口,线程等,特别是用正则表达式处理字符串。第一次的作业几乎是面向过程的,之后的每一次作业我也在刻意地运用面向过程来解决问题。以上就是我目前的体会,希望自己在之后学OO的过程中,在不断进步的同时也享受到乐趣。
浙公网安备 33010602011771号