经过三次作业的历练之后终于来到了写博客这一周。回顾开学来的这一个月,令我印象最深刻也是最累的一门课就是OO了。虽然上学期学过一部分Java,但这学期开学就来的OO作业还是让我在第二周就开始熬夜了。不过虽然这几次作业相比于其他几门课在开学这一阶段的进度来说感觉很紧张,但是我从中学到的知识以及代码技巧也很多(给别人挑bug也熟练起来了(狗头))。

前三次作业的度量分析及类图

第一次作业

第二次作业

第三次作业

由上可见,三次作业中,我的代码中都存在一些较为复杂的方法,这些方法大多是整个程序核心逻辑的部分。在将来的作业中我也将考虑如何减少核心代码的耦合度。

关于Bug

自己的程序

前三次作业中,非常幸运的是我的程序都没有被挑出bug。尽管我自己也对自己的程序进行了完整且花样繁多的测试,但这并不能完全说明程序中完全不存在bug(虽然我觉得我的程序是bug-free了)。因此在这里我打算谈一谈自己debug的感受。

前几次作业当中,我在作业中花费时间最长的就是debug以及寻找潜在的bug。我测试的步骤一般按照

  • 分支树
  • 简单的功能测试
  • 复杂一些的功能测试
  • 边界测试以及暴力测试

来进行。其中一般问题出现在复杂功能测试以及边界测试中。对于复杂的功能测试,找到bug的要点是构造一些足够特殊的样例。例如第三次作业中同层捎带多次的问题。除此之外还可以构造一些较长的功能测试样例,例如让电梯反复上下行,以此检查出潜在的问题。边界测试部分让我印象深刻的是第一次作业中的表达式,虽然我已反复确认正则表达式的逻辑没有问题,但由于正则表达式一次匹配过长,导致对于很长的表达式出现爆栈情况,这一点在之后使用正则表达式过程中都有注意。

别人的程序

这三次作业我拿到的互测样例中或多或少都有一些bug。我寻找bug基本也按照了测试自己程序的步骤,但在测试过程中也会通过注意对方代码中存在的缺陷来构造测试样例。印象最深刻的是第一次作业中的我拿到的互测程序,由于其使用数组以及简单的排序来管理整个表达式,输出前将数组按指数从大到小排序,但输出时判断空多项式的逻辑有误,导致输出错误。这样的缺陷通过测试样例寻找,效率并不如直接阅读代码来得快。因此在后续测试过程中我也会仔细注意对方的代码。

代码规范真的很重要,希望大家尽量少用诸如temp1,temp2这样的变量名来编写程序,也尽量多写注释,自己看着舒服,测试的同学看着也舒服

感想

前三周的作业还是有惊无险的度过了,但我认为自己的代码仍有改进的空间。首先是可以进一步降低耦合度,其次是代码可以再写的可读性更高一些。当然这些改进措施的前提是需要有充足的时间,而不是赶ddl。虽然在研究一段指导书之后(看完大佬们讨论后)再开始编程效率更高,我仍希望以后的作业我可以尽早开始尽早完成,也希望指导书可以更加明确。

OO第一次阶段性总结的更多相关文章

  1. OO第一次作业总结

    OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...

  2. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  3. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  4. OO第一次单元总结

    第一次总结性博客 16071070 陈泽寅 2019.3.23 一.第一单元所学总结 首先先来总结一下第一单元我所学到的知识以及所感所悟.第一个单元,是我第一次接触JAVA语言,并且再使用了几次之后, ...

  5. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  6. OO第一次博客

    过去的三周里我们完成了表达式求导的程序设计与构造.表达式求导程序,大致思路是实现一个表达式类,支持表达式的输入.求导运算和输出功能.可能的话,还可以增加表达式的化简方法,从而得到更高质量的输出结果.总 ...

  7. oo第一次作业

    前言: 这是一篇面向对象作业总结,作业内容是对多项式进行求导,一共有三个阶段,具体要求不详述,第一阶段只要求’+’连接coeff*x^pow的形式,第二次支持*连接的幂函数及三角函数,第三次则需要支持 ...

  8. OO第一次博客总结

    虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...

  9. 2018 OO第一次总结(作业1-3)

    第一次作业1.程序分析 (1)OO度量 (2)类图: (3)分析与评价: 这次作业由于作业整体设计难度不大,因此按照去年暑假上的OO先导课老师讲的设计方法很容易实现一个还不错的面向对象式程序,类与类之 ...

随机推荐

  1. Java的深拷贝和浅拷贝

    关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...

  2. 重磅消息-Service Fabric 正式开源

    微软的Azure Service Fabric的官方博客在2017.3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的S ...

  3. Servlet和Filter生命周期

    1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...

  4. python模板:自动化执行测试函数

    #!/bin/python #example 1.1 #applay def function(a,b): print(a,b) def example1(): apply(function, (&q ...

  5. Solidity constant view pure关键字的区别与联系

    在Solidity中constant.view.pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证.所以用好 ...

  6. Windows 8 系统快捷键热键列表收集

    值得收藏参考的 Windows 8 系统快捷键热键列表收集大全汇总,键盘党效率党必备啊! 相信不少喜欢接触新鲜软件的同学都已经给电脑安装上Windows 8 操作系统了吧!这个系统优秀与否我们暂且不讨 ...

  7. Symbol(第6种基本数据类型)

    构造函数 不能使用构造函数,只能当成平常的方法使用 new Symbol()//VM372:1 Uncaught TypeError: Symbol is not a constructor 参数:不 ...

  8. [Apio2010] 巡逻

    Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n). Ou ...

  9. maven项目与普通项目的区别

    maven项目 1:创建方式不同 (web项目举例) 第一种: 第二种: 2:目录结构  稍有不同 3:Pom文件 添加依赖信息,需要那个jar包的时候  加入哪个jar包的依赖,要不然无法使用这个j ...

  10. AsyncTask源码笔记

    AsyncTask源码笔记 AsyncTask在注释中建议只用来做短时间的异步操作,也就是只有几秒的操作:如果是长时间的操作,建议还是使用java.util.concurrent包中的工具类,例如Ex ...