zoukankan      html  css  js  c++  java
  • 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时心态要稳定,构造测试样例要细致,不能急躁或者粗糙。

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

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

  • 相关阅读:
    断行
    椭圆曲线质因数分解2
    sqrti128
    HLPP
    Optimize Prime Sieve
    python 一些乱七八糟的东西
    移动机器人建图与导航代码实现——3.Path Tracking
    移动机器人建图与导航代码实现——2.Path Planning
    移动机器人建图与导航代码实现——1.Hector SLAM
    移动机器人建图与导航代码实现——0.目录
  • 原文地址:https://www.cnblogs.com/sweetchocosvzwrld/p/14580119.html
Copyright © 2011-2022 走看看