OO第一单元总结

OO第一单元总结

基于度量分析程序结构

利用DesigniteJava软件分析程序结构

typeMetrics 类度量:

image

秉承着高内聚低耦合的思想,LCOM的值越小越好,FANIN和FANOUT与复用性和复杂度有关,视情况判断好坏。主类MainClass代码行数超过100,LCOM大于0.4,可见主类MainClass内聚不足,耦合过度。

methodMetrics 方法度量:

image

FactorMatch方法代码行数略多,圈复杂度也略高。这是因为采用递归下降方法,当Term类判断接下来的字符属于因子时,进入FactorMatch,再由FactorMatch来判断到底属于哪种因子(表达式因子、sin因子、cos因子、幂函数因子和常数因子),再有FactorMatch逐个调用下层类,在这个过程中需要很多if-else判断,因此圈层数很高。这样的设计不利于测试和维护,但还没想到更好的方法。

implementationCodeSmells:

image

designCodeSmells:

image

一些代码异味,暂没想好怎么改。

类图

image

bug分析

第一单元中只有第二次作业在互测和强测中被发现了bug。分别是cos函数求导时忘记了负号,和没有考虑cos(x)和sin(x)中可能有空格这两种情况。

前者的修复在表达式中加上负号即可,后者只需在字符串替换时先替换空格再替换三角函数,都是非常简单的bug,应该在自测中被发现。

重构经历

重构发生在第二次作业。第二次作业并不能由第一次较好的过渡,因此选择重构。

重构前:

image

image

可以看出圈复杂度较高,模块质量很低,而且最终并没有解决问题。

索性重构,用递归下降的方法解决问题。

重构后:

image

image

可以看到重构之后圈复杂度整体降低。

心得体会

当发现现有思路无法解决问题时,可以大胆重构。

先做出一个能跑的程序,一步步来,之后再想怎么优化。

debug时心态要稳定,构造测试样例要细致,不能急躁或者粗糙。

多看讨论区,学习同学们解决问题的办法。

实在解决不了问题就问助教。(

原文地址:https://www.cnblogs.com/sweetchocosvzwrld/p/14580119.html