OO前三次作业总结
一、第一次作业
1、程序设计分析
第一次作业整体较为简单,主要任务为判断输入的合法性。从度量分析中可以看出来圈复杂度(McCabe Cyclomatic Complexity)比较高,已经标红了。点开仔细看之后发现是Polynomial类的构造方法贡献了主要的复杂度,自己感觉应该是因为这个构造方法是从字符串获取多项式信息,不仅承担了用正则表达式解析字符串的功能,还完成了一大部分对输入合法性的检验,所以复杂度比较高。不过由于程序整体不太复杂,这个飘红的圈复杂度也不怎么感受的到,但在以后更复杂的设计中应当把不同的功能单独封装出来。
2、BUG分析
这次作业我通过了全部的公测,不过非常极限的是一个在计算时的比较致命的bug是在截止前20分钟才发现的。最后提交的时候这个bug并没有完全得到修复,这也导致了我互测时被查出了一个bug。我是为每一个Polynomial实例开了一个100w的数组来维护多项式的系数,这样无论是构造还是运算时逻辑都简化了很多。但是我又很多余的维护了一个最大系数deg属性,以减少一些不必要的运算,但是因为一时疏忽这个属性在运算时没维护好,导致了bug的产生。这个主要还是写完过了一些测试就很懒地没有再查代码导致的错误QAQ
二、第二次作业
1、程序设计分析
这次作业我思考的比较久的点就是如何筛去同质请求,一开始是当某个请求将要执行时往前去找是否有与它效果同质的请求,后来发现这样检查的情况并不完备。于是改为保证队首为合法的需要执行的请求,在每个请求运行完后往后筛去所有它的同质请求。这次的设计其实不太复杂,圈复杂度高主要是因为在main中进行了所有输入合法性的检查,大概也是设计比较简单导致dispatcher类分不到什么活沦为鸡肋(毕竟它只要拿出队首请求扔给电梯跑就行了)。
2、BUG分析
第二次作业公测挂了一个点,互测被找出一个BUG。公测挂的点是没有支持‘+’,这一方面是我没仔细看BUG树,一方面也是助教说的“前导0和‘+’号自行readme”误导了我。个人觉得这种东西留给readme来说意义不大,毕竟对程序设计没有实质性的影响,只是多起了争议。互测被找出的BUG是100条上限的问题,也是我理解错了助教的话吧,“超过100条的情况自行readme”被我理解成了只要出现这种情况所有的请求怎么处理都可以readme,于是我就设计成了超过100条电梯不运行直接结束。总的来说这次的BUG和程序设计还是不太挂钩的 。
三、第三次作业
1、程序设计分析
相比于第二次作业,本次作业需要完成“捎带”的功能,调度算法如何实现是本次的难点。在最开始构想时我把问题想简单了,写到获取捎带队列的时候发现其实十分麻烦。这个时候我面临着推倒重来和继续写下去(可能比较麻烦)两个选择,不过最后因为懒还是硬着头皮写下去了。这也导致最后写完有很多小BUG潜伏在很长的一段代码里,加上深夜debug脑子不清醒,花了很长时间才解决。第二天重新检查了一遍代码,修改了两处bug,就基本上ok了,还是比用数据来debug效率要高一点。
度量分析方面,这次圈复杂度偏高的主要原因我觉得还是因为本身算法设计的问题。在requestList类中用一个主请求从剩余请求队列中选出所有可捎带请求组成捎带队列的scan方法不可避免的有着很高的复杂的,事实上我在debug过程中看这段代码也是十分头疼,可见前期良好的设计还是十分关键的。
2、BUG分析
本次公测和互测都没有bug,个人觉得还是写的比较严谨,大量的测试给了这次的作业巨大的帮助。
四、寻找BUG的策略
在这三次作业的互测中,我拿到的代码写的都比较严谨,前两次各找出了一个基本无关程序设计只是和需求有冲突的bug。第三次的代码写了非常多的类和方法,有一点过度设计的意思,导致我看他的代码的时候十分不好受,不过还是用几组大数据测出了他设计上的BUG。
前三次我找别人bug的流程大概是:测自己的样例=>浏览代码的主逻辑,寻找逻辑上的设计错误=>仔细看具体实现的一些方法,寻找实现上的漏洞。从一些边界极限情况考虑程序的运行情况的时候,往往能找出一些BUG。
五、心得体会
在前三次作业中,我在编写代码之前都会做一个框架的设计,包括要实现哪些类,类中有哪些方法和属性,核心问题的算法如何设计等,发现确实这样在之后的编码过程中会顺畅很多,按照设计捋下来就行。
因此,就想计组的时候高老师教给我们的那样,充分的前期设计是十分重要的。不过虽然前期设计不可能想到每一个细节,还是要尽量多想清楚,或者给程序留够足够的调整空间,不然如果像我第三次作业一样写的过程中发现有问题就会面临一个不太好处理的情况。
OO前三次作业总结的更多相关文章
- OO前三次作业思考(第一次OO——Blog)
OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...
- OO前三次作业分析
一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...
- OO前三次作业简单总结
随着几周的进行,OO课堂已经经历过三次课下作业.在这三次作业中,我被扣了一些分数,也发现了自己几次作业中一些存在的共同的问题. 首先以第三次作业为例分析,我程序的类图如下 一共九个类,其中Als_sc ...
- oo前三次作业博客总结
第一次作业 实现多项式的加减运算,主要问题是解决输入格式的判断问题. 输入实例: {(3,0), (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...
- OO第三单元作业总结
OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...
- OO第三单元作业——魔教规格
OO第三单元作业--魔教规格 JML的理论基础和相关工具 JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...
- OO第三单元作业(JML)总结
OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- Blog总结(前三次作业总结)
前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...
随机推荐
- 46个Linux面试常见问题送给你
问题一: 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案:绝对路径: 如/etc/init.d当前目录和上层目录: ./ ../主目录: ~/切 ...
- 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project autotest_fchtgl: Compilation failure的方法
在碰到maven install 发现报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:comp ...
- 【BZOJ2693】jzptab
Time Limit: 5000 ms Memory Limit: 512 MB description 给你\(n, m\),求\(\sum\limits_{i=1}^{n}\sum\limits_ ...
- C++学习-8
1.注意:函数指针前面*,&都是一样的没啥实际意义,除了把实例化函数块的时候,需要指针或者引用修饰 cout << typeid(my1.show).name() <& ...
- 项目角度谈矢量切片运用以及Geoserver处理自定义规格矢量切片方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1. 背景 矢量切图方案目前已经是很常见的一个方案,在2016年时团队 ...
- luogu3244 bzoj4011 HNOI2015 落忆枫音
这道题目题面真长,废话一堆. 另外:这大概是我第一道独立做出来的HNOI2011年以后的题目了吧.像我水平这么差的都能做出来,dalao您不妨试一下自己想想? 题目大意:给一个DAG,其中1号点没有入 ...
- 模拟eval
function eval(fn) { var Fn = Function; return new Fn('return' + fn) (); }
- 虚拟机安装CentOS6.3及常见问题总结
学Linux的同学大多数开始是使用的是Ubuntu或者red hat,red hat虽然安装不需要收费,但是服务是收费的,下面我就讲讲怎么用虚拟机安装CentOS6.3,其他Linux的安装可以参考这 ...
- WordPress菜单“显示选项”无法显示的解决办法
比较新版本的WordPress会出现点击“外观”——“菜单”右上角的“显示选项”无法打开的问题,而老版本的就没有这个问题,后台的其他页面中的这个 功能都可以正常使用,看来问题是因为中文版WordPre ...
- Android开发——Fragment的简单使用总结
前言: 之前搞项目的时候,就使用了这个Fragment,中间遇到了许多坑,把坑都解决了,现在写一篇较为简单的Fragment使用总结 Fragment的简单介绍: 简单来说,Fragment其实可以理 ...