首页 > 其他 > 详细

OO Unit 1

时间:2021-03-27 08:56:33      阅读:21      评论:0      收藏:0      [点我收藏+]

Unit 1 Reboot

基于度量的程序分析

OCavg WMC
format.InputParser 9.0 9.0
format.FormatCheck 6.5 13.0
element.multiple.Term 4.625 37.0
element.multiple.Expression 3.5714285714285716 25.0
SyntaxAnalyzer 2.6 39.0
element.unitary.Exp 2.4 12.0
element.multiple.Nest 2.3333333333333335 21.0
element.unitary.Sin 2.0 8.0
MainClass 2.0 2.0
element.unitary.Cos 2.0 8.0
element.multiple.SerialElement 1.1111111111111112 10.0
element.unitary.SimpleElement 1.0 2.0
element.unitary.Const 1.0 5.0
format.InputFormatException 1.0 1.0
Total 192.0
Average 2.6301369863013697 13.714285714285714
方法 ev(G) iv(G) v(G)
Total 126.0 189.0 211.0
Average 1.726027397260274 2.589041095890411 2.8904109589041096
总行数 源码行数 源码占比
1019 885 0.8684985279685966

类图:

技术分享图片
技术分享图片

元素类图:

技术分享图片

耦合程度较低,功能分离,面向对象纯度高。

思路:

//1.格式检查(InputParser,FormatCheck,InputFormatException)
//2.保证格式正确后,进行解析,解析的同时初始化(SyntaxAnalyser)
//3.求导(derivation)
//4.化简(simplification)

格式检查利用正则表达式,公式解析利用递归下降分析法,分析过程中初始化表达式,递归化简、求导、再化简。

将所有成分看作Element,具有求导和化简两个方法。不使用一个程序执行这些过程可以降低程序复杂度(分治思想,化整为零)。同时,将CosSin看作一类(SimpleElement),提取公共方法、属性,将TermExpression看作一类(SerialElement):它们都有一个ArrayList<Object>,化简方法具有共通性。

Bug分析

第二次作业架构问题导致超时(递归深度过大)。

下面的公式会超时:

\[sin((((((((((((x)*x)+1)*x)+1)*1)+1)*1)+1)*x)+1)) \]

出现Bug的作业耦合度明显高于修补之后:

方法 ev(G) iv(G) v(G)
Total 123.0 141.0 179.0
Average 2.1206896551724137 2.4310344827586206 3.086206896551724
技术分享图片

互测策略

搭建评测机,黑盒测试:使用Xeger、random生成数据;使用sympy生成标准答案,并采用评测机相同方法将每位同学的答案与标答对比。

重构(写)

当我看到超时问题时,我当即重写。类图或度量见上。

心得体会

相当痛苦,因为我不想在OO重修上花一分钟,更不想失一分。但事实上,我花了大量的时间重写,并且第二次作业得分相当低,令我痛心疾首,亚历山大,辗转反侧,彻夜难眠,后悔重修,我是sb。

OO Unit 1

原文:https://www.cnblogs.com/mokoghost/p/14584708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!