| 类 | 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,具有求导和化简两个方法。不使用一个程序执行这些过程可以降低程序复杂度(分治思想,化整为零)。同时,将Cos、Sin看作一类(SimpleElement),提取公共方法、属性,将Term、Expression看作一类(SerialElement):它们都有一个ArrayList<Object>,化简方法具有共通性。
第二次作业架构问题导致超时(递归深度过大)。
下面的公式会超时:
出现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。
原文:https://www.cnblogs.com/mokoghost/p/14584708.html