北京航空航天大学2019年OO课程第一次总结

OO第一单元总结

引子

  oo第一单元作业算是告一段落了。这四周以来,随着多项式求导的不断深入,对于Java的理解也越来越深。oo的课程设计可以说是非常魔鬼了,占据了大部分的课余时间,各个阶段覆盖了一整个周。尽管oo课程改革才刚刚开始,存在这种或者那种的不足,但是在同学们反应问题以后,助教们往往也能快速作出反应,进行人性化的调整,从这方面来讲,oo的课程体验非常棒。讨论区也总是有大佬和助教适当给出指导,给予了我非常多的帮助,少走了弯路。oo课程中测的难度并不大,一方面,这使我们更容易通过中测,进入强测,能够更加容易的拿到强测的分数,无论多少;另一方面,这也迫使我们必须更多地自己去寻找自己代码中的bug,不能过了中测就认为自己的代码没有问题了。这也和强测后的互测环节有关。自己找不到的bug,全都会在互测阶段暴露出来。虽然被找出来的bug可能一次就全都修复了,但是看着自己被hack的次数蹭蹭往上长,谁心里都不舒服。而且,互测阶段被找了bug,想要把分拿回来并不是那么容易的,这也是由同质bug和共享hack分数导致的。总结起来说,相比绞尽脑汁去找别人bug,在互测前尽全力保证自己的程序没有bug更有效。这样能够在互测阶段腾出时间学习新知识。虽然阅读他人的代码也能有收获,但是我现在java知识学习进度严重滞后,更应该去看书学习。

1.初始版本(常数项和幂函数项)

1.1程序分析

 

 

 由于是第一次作业,所以存在很多不足之处,但是基本符合面向对象的设计思想。优点有二:一,采用了小正则的匹配方式,避免了大正则匹配爆栈的问题;二,对输入进行了预处理,降低了后面代码的复杂度。缺点就太多了。例如,没有一次将整个程序架构弄出来,在中途进行了更改,一些地方很违和。再比如,项的读入并不是我这个思路的最佳的形式。

1.2bug分析

1.理解错了题意。误解了空白字符在本次作业中包含且仅只包含<space>和\t,导致其他非法空格符均无法检出。

2.忽视了指数符号。虽然在互测前发现了,但是修复不够完善,没能检出指数有两个及以上的bug

3.小正则匹配不完善导致的bug。小正则匹配不够完善,以至于能够匹配诸如“3*x3+x”和“3+3*x x+4”这种错误样例

4.从分类树上看,问题有:一,预处理过于分散,不够集中;二,Nospace类完全偏离了设计的初衷,这是程序第一次架构失败导致的,之后并没有更改;三,符号类没有设计的必要,可以归入项类中,可以作为项的一部分属性,或者直接合入项的系数中。

1.3hack策略

由于第一次互测,没有成熟的想法。基本上是盲打,也没有自动化程序。一,用自己出现过的bug样例来测试他人程序;二,构建WRONG FORMAT测试集测试他人程序;三,直接看他人代码,重点放在正则表达式部分。

没有结合被测程序的代码设计结构来设计测试用例。

 2.进阶版本(加入了三角函数)

2.1程序分析

本来是可以直接在第一版代码上加上三角函数相关的代码,修改部分代码完成升级的,但是由于第一次代码架构的畸形,我选择进行重构。

2.2bug分析

1.有第一次作业作为基础,本次代码避免了所有的WRONG FORMATbug。唯一的代码是由于考虑不周,开始忽视了项中有符号整数因子的符号问题,互测前进行了修复,没有修复完全,没有意识到bug没有修复。

2.从分类树上看,本次代码的结构比第一次完善很多,基本解决了第一次作业时结构上存在的不足。

2.3hack策略

有上一次作业打底,本组多数同学都避免了各种WRONG FORMATbug,除了极个别同学由于正则表达式出现了小纰漏导致一两个bug。这次使用了自动化工具。一是对拍工具,自动测试测试集;二是自动生成测试样例的程序,都是用Python写的

没有结合被测程序的代码设计结构来设计测试用例。

3.最终版本(引入表达式因子和嵌套因子)

3.1程序分析

 

 第三次作业全部推倒重来了,因为我之前的架构不能解决读入嵌套因子,我没能想出来解决办法,磨掉了整个周末后才想出来逐个读因子然后合成项,最后合成表达式的方法,在求导方面也采用了直接对字符串求导的方法,完全放弃了优化,因为没有时间了。结构上来说,比前两次作业更加完善。同时,这次作业也用上了新学的接口和继承。

3.2bug分析

本次作业已经不允许提交WRONG FORMAT ,本次程序出现的bug都是由我最后提交前加的胡乱优化导致的,没有什么用,还会导致bug的优化,是我考虑不周。

3.3hack策略

沿用第二次作业的hack策略,并没有什么更新。

没有结合被测程序的代码设计结构来设计测试用例。

4.总结

四周以来,很艰苦,但是也确实学到了很多。在寻找自己bug方面,我做的还不够,无法保证在互测阶段不被hack中。寻找他人bug也还仅仅局限于使用大量数据狂轰滥炸。我始终没能够去读其他人的代码,去找出他们结构上的问题,这是在接下来的学习中需要解决的问题。

posted @ 2019-03-26 23:24  王焜  阅读(200)  评论(0编辑  收藏  举报