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 ...
随机推荐
- 手把手教你写vue插件并发布(二)
前记:上一篇 https://www.cnblogs.com/adouwt/p/9211003.html, 说到了一个完整的vue插件开发.发布的流程,总结下来就讲了这么一个事,如何注入vue, 如果 ...
- JS学习过程中碰到的小问题
使用循环语句查找通讯录 //Setup var contacts = [ { "firstName": "Akira", "lastName" ...
- Scyther-Semantics and verification of Security Protocol
1 .本书前一节主要是介作者自己的生平经历(读完感觉作者是个神童),目标明确作者13岁代码已经写的很溜了.自己也开了网络公司,但是后面又专注于自己的计算机基础理论,修了哲学的博士学位(不得不说很多专业 ...
- 【转载】如何直观的理解 O(logn) 时间复杂度的神奇之处
转自 https://blog.csdn.net/u012814856/article/details/83010082 一.引言最近在极客时间上订阅了<数据结构与算法>的课程,其中王争老 ...
- GO语言一行代码实现反向代理
本文,介绍了什么是反向代理,如何用go语言实现反向代理. 至于他的标题, "GO语言一行代码实现反向代理 | Writing a Reverse Proxy in just one line ...
- C# Conversion Keywords
主要是解决类与其他不同数据类型的转换 类于类的显式转换: explicit public static explicit operator B(A a) { return new B(){a.... ...
- 简单使用sp_executesql 参数化
declare @totalCount1 int output declare @id1 varchar(10) declare @strsql1 nvarchar(max)=N'' declare ...
- codeforces 1110F
题解: 正解做法比较简单,考虑离线之后,相邻两个节点之间的答案是有关系的 发现从父亲移到儿子后,改变的距离对于当前节点子树内和子树外的是一样的 所以线段树维护一下区间加减取max就可以了 另外的做法1 ...
- pyqt win32发送QQ消息
标题应该改为:python+win32发送QQ消息,全程使用python套个pyqt壳. 其实代码来自: http://blog.csdn.net/suzyu12345/article/details ...
- Mongodb4.0副本集构建
目前最新的mongodb4.0.2已经支持事务这个重要特性,需要使用的话必须是复制或副本集,这是第一篇先研发如何构建副本集,因为副本集是目前最低成本的高可用群集方式. 1.准备三台服务器,本次使用是的 ...