OO第一次博客作业
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第一次博客作业的更多相关文章
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- OO第一次博客作业(第一单元总结)
Q:菜是绿的,鸡是黄的,那菜鸡是什么颜色的? A:红的,强测全WA了,能不红么. 菜不菜的问题先不说了,认真研究一下这次的题目,以及WA的原因吧. 程序结构简析 三次实验的核心结构都是差不多 第一次的 ...
- [BUAA OO]第一次博客作业
第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- Java第一次博客作业
第一次博客作业 目录 三次作业题目详情 作业中的错误分析 感想与心得 题目详情 题目1:第一次作业: 类图: 题目2 类图: 题目3 类图: 题目4 题目5 题目6 类图: 题目7 类图: 题目8 第 ...
- OO第一次博客总结
虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...
- 第一次博客作业 <西北师范大学| 周安伟>
1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...
随机推荐
- Unity优化之贴图
默认情况下当你把图片导入到unity中时,unity会自动把图片转换成最适合当前平台的压缩格式.如果你有一些特殊的需求,unity也提供了覆盖默认压缩格式的方法,如下图 在图片的Inspector窗口 ...
- day17——其他内置函数
zip函数: print(list(zip(('a','b','c'),(1,2,3)))) p={'name':'alex','age':18,'gender':'none'} print(list ...
- ELK全Dokcer 部署
环境准备: docker-complete 解压 su root 进入目录 rpm -Uvh *.rpm 安装docker systemctl start docker systemctl enabl ...
- find your present (2) hdoj 2095
/* author:谦智 find your present (2) hdoj 2095 法一:用暴力 法二:用map 法三: 符号是^. 异或是个位运算符号,具体是怎么操作的请百度,这里有个特性使得 ...
- react給變量賦值并列元素
今天在使用react時發現一個問題:我在給一個變量賦值多個元素,但不能用div包含起來. 如: var p = <div> <p></p> <p>< ...
- C# 解压缩工具类GZip
using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using ...
- python-基于tcp协议的套接字(加强版)及粘包问题
一.基于tcp协议的套接字(通信循环+链接循环) 服务端应该遵循: 1.绑定一个固定的ip和port 2.一直对外提供服务,稳定运行 3.能够支持并发 基础版套接字: from socket impo ...
- SpringMVC-Helloworld 的归纳理解
前面使用SpringMVC写了Helloworld, 发现理解不是很深刻,很多东西只是跟着教学视频敲才会 现在那Helloworld以及一般的SpringMVC归纳一下: SpringMVC入门Hel ...
- Modbus协议栈实现Modbus RTU多主站支持
前面我们已经详细讲解过Modbus协议栈的开发过程,并且利用协议栈封装了Modbus RTU主站和从站,Modbus TCP服务器与客户端,Modbus ASCII主站与从站应用.但在使用过程中,我们 ...
- SignalR在Asp.NetCore中的使用
SignalR简介 ASP.NET SignalR是为ASP.NET 开发人员提供的一个库,旨在为你的Web应用迅速简便的添加实时通信功能.这个Web通信功能是指:客户端可以实时从服务端代码拉取数据, ...