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. centos命令安装

    1.解决ifconfig命令失效:需要安装net-tools工具 yum install net-tools 2.免密码登录 (1)通过命令,产生公钥信息 ssh-keygen -t rsa 如果提示 ...

  2. 爬取json Swaggerui界面

    对一个静态的网页进行爬取. 要获取的内容分别为 paths 标签下的 1./quota/开头的路径 2. get 这样的httpmode 3 description对应的描述 4 summary 5 ...

  3. Javascrip动态添加样式,Dom操作,获取自定义属性

    var layer=document.querySelector('.layer') 添加样式: 添加单个样式: layer.style.display="block" 添加多个样 ...

  4. codeblocks 配置 opengl 编程宝典 的 gltools 环境

    懒得多说,亲测,这个问题,csdn 和 cnblog 上的博客真的没有一个能解决的. 这个帖子2L的答案则完美解决了问题,虽然步骤有些繁琐,过程还是英文,但考虑到了可能出现的各种问题,跟着走一遍就完美 ...

  5. selenium+python编写自动化脚本时,定位frame中对象操作

    在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B.switchTo().frame方法可以把当前定位的主题切换到fr ...

  6. JS监听浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...

  7. Helm - Kubernetes服务编排的利器

    Helm介绍 在Kubernetes中部署容器云应用(容器或微服务编排)是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具.通过Helm能够帮助开发者 ...

  8. [python][matlab]使用python调用matlab程序

    问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划 ...

  9. selenium笔记(1)

    selenium笔记(1) 一.关闭页面:1.driver.close() 关闭当前页面2.driver.quit() 退出整个浏览器 二.定位元素:1.find_element_by_id: 根据i ...

  10. 实现upnp ssdp来查找局域网内的其他节点

    upnp协议常用于一些智能家居产品中,这些产品连上家里局域网后,用同样连入家中局域网的手机就能很快检测到此产品了.在区块链技术中,upnp也被应用于寻找同一局域网内的其他节点. 关于upnp的具体描述 ...