OO第一次博客作业

一、三次作业的bug反省

1、自己发现别人的问题

(1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断。

(2)在求导求完之后的合并项的时候出问题,在第二次作业中我发现了两个同学都是在和并项的时候出了问题,导致两个指数相同的项没有成功合并,然后出现了一些奇奇怪怪的错误。

(3)输入没有处理好,具体到项中各个参数读入的时候会出错,有一个同学x前输入一个空格就没法正确输出。

2、作业中自己被别人发现的bug

(1)使用了大正则来处理输入的格式判断,然后大正则中嵌套了太多“|”导致爆栈问题

(2)求导问题中复制粘贴的有些代码没有及时改正导致的bug

(3)读入每个参数的时候字符串的处理出现了一些问题,比如符号少判断了等等,导致的某一项的某个数据不对

(4)求导完以后合并同类项的过程中出现了问题,导致输出错误结果

3、对出现bug的反省

其实很多bug都是很容易被发现的,但是不知道为什么我就是在互测之前没有发现,然后互测之后才发现有很多很容易就被发现的bug,比如第二次作业中,有三个很容易被发现的bug,然后在互测中身中23刀,然后三个合并修复就解决了。所以自己课下还是要加强对自己代码的测试。

二、基于度量分析程序结构

1、代码度量

(1)第一次作业代码度量

(2)第二次作业代码度量

(3)第三次作业代码度量

2、作业类图

(1)第一次作业的类图

第一次作业纯粹是面向过程的写法,在主函数中调用各种函数,包括判断合法非法、得到指数系数到最后的求导以及输出,都是通过函数完成。

(2)第二次作业的类图

第二次作业在第一次作业的教训之下,懂得要进行结构的设计,加上对同学们讨论帖子的学习,我设计了三个类,分别是项、表达式、计算。通过读取表达式建立一个表达式的对象,然后再表达式内部new项,一步一步把系数和指数拆开,并在项和表达式内部都设计求导的成员函数,最后在计算类内调用表达式的求导,完成输出。

(3)第三次作业的类图

第三次的作业涉及到了递归,所以我是将每一项分别通过add(加)、multiply(乘)、combination(嵌套组合)分别拆开,然后判断是整数、幂函数还是三角函数,然后对于加、乘和嵌套都递归地求导,最后一定能够到单个的或是整数,或是幂函数,或是三角函数的求导,从而完成整个表达式的求导。

3、优缺点自我评价

缺点:这个好多啊T_T

(1)结构还是有混乱的地方,个别的类超过了70行,而个别的类又很短,严重不均衡、不协调

(2)处理输入的方法很笨拙,尤其是判断是否合法,前两次作业使用大正则,这个不是课程的实际目的

(3)代码复制粘贴特别多,很多地方可以复用

(4)没有使用继承和接口,导致代码太长,有很多不必要的地方

  ………………

优点:好像没有

三、自己程序bug和可以改进的地方

1、分析发现的bug

(1)大正则导致程序运行的时候爆栈的问题

(2)项的处理不当导致的数据读入出错

(3)正负号问题的处理,每一个整数或幂函数或三角函数前的符号数量是不一样的,处理时要注意符号的个数

(4)项的合并出错导致结果的错误

2、bug和设计结构的相关性

(1)首先就是第一次作业的结构设计问题,第一次作业还是以面向过程的思维在进行思考,然后就出现只有一个主类和很多函数的问题,不仅导致结构不清晰,也使得代码框架混乱,第二次作业就要重构

(2)使用大正则一次性匹配整个表达式 ,其实一项一项地匹配更有利于代码的扩展,也不会出现爆栈的潜在安全隐患

(3)在作业中使用ArrayList而不是Hashmap,多出来合并同类项的操作,增加错误的概率

四、分析自己发现别人的bug

1、测试策略

  测试别人的基本策略就是阅读别人的代码,在一些容易出错的地方,比如在一些逻辑复杂的地方(含有多个逻辑运算符的地方有可能会出现枚举不全面的错误)要重点查看。比如第一次第二次的正则表达式的地方就有可能会出现情况的遗漏。

  有的时候看代码看得头晕也会有点偷懒,就随便构造自己感觉容易错的数据对他们进行测试,虽然命中率不高,但是也不失为一种办法。

2、我没有结合被测程序的代码设计结构来设计测试样例。

五、Applying Creational Pattern

这三次作业难度和复杂度逐步上升,第三次作业可以覆盖前两次作业的功能。对于重构,我认为还是按照之前的结构,逐步递归,但是在对象创建模式上尝试一下工厂模式,将实例化推迟到子类。

最后,虽然这段时间在写作业的时候学了很多,但是发现自己不会的更多,希望以后的时间再接再厉,好好度过接下来的OO课程。

OO第一次博客作业的更多相关文章

  1. oo 第一次博客作业

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

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

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

  3. OO第一次博客作业总结反思

    使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...

  4. OO第一次博客作业(第一单元总结)

    Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...

  5. [BUAA OO]第一次博客作业

    第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...

  6. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  7. Java第一次博客作业

    第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...

  8. OO第一次博客总结

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

  9. 第一次博客作业 <西北师范大学| 周安伟>

     1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...

随机推荐

  1. Cyclone IV FPGA 器件笔记

    LE(逻辑单元)操作模式 1) 正常模式 2)算术模式 可以看到对于Cy4来说正常模式和算术模式的区别就是正常模式有一个4输入LUT没有cout进位输出,而算术模式有两个3输入LUT有cout进位输出 ...

  2. P1250 种树

    P1250 种树 题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定 ...

  3. python之地基(三)

    一.引用计数和垃圾回收机制 当一个执行程序完毕后,回收变量所占据的内存. 当引用计数变为0的时候,回收变量所占据的内存. a=100 print(id(a)) a=input('==>:') # ...

  4. Mysql配置优化,库表设计

    Mysql 服务器参数类型: 基于参数的作用域: 全局参数:set global autocommit = ON/OFF; 会话参数(会话参数不单独设置则会采用全局参数):set session au ...

  5. 论文阅读笔记四十九:ScratchDet: Training Single-Shot Object Detectors from Scratch(CVPR2019)

    论文原址:https://arxiv.org/abs/1810.08425 github:https://github.com/KimSoybean/ScratchDet 摘要 当前较为流行的检测算法 ...

  6. php Excel 导入功能

    下载excel类地址 https://pan.baidu.com/s/19MqAHUn4RyZ5HEAChyC0jg  密码:mn58 本人用的thinkcmf框架 把类文件放在框架的类文件里面,下面 ...

  7. RabbitMQ 声明队列时候的参数解释

    参考链接:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.6/rabbitmq-dotnet-client-3.6.6-cli ...

  8. android调试工具 adb命令学习

    查看Android版本号 adb shell getprop ro.build.version.release getprop ro.build.version.release 5.1 查看Andro ...

  9. 三大家族(offset、scroll、client)

    offset.scroll.client三大家族 offset家族 offsetWidth 与 offsetHeight offset 偏移 用于获取元素自身的位置和大小 offsetWidth和of ...

  10. vue v-if 和 v-show 的知识点

    1.v-if 的特点: 实现方式:根据后面数据的真假判断是否重新删除或创建元素. 性能消耗:有较高的切换性能消耗. 编译过程:v-if 切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的 ...