静态分析

CheckStyle

修改订单功能

  • Sun:
  1. MallAdminApplication
    在这里插入图片描述

  2. OmsOrderSettingController:
    在这里插入图片描述

  3. OmsOrderSettingService
    在这里插入图片描述

  4. OmsOrderSettingServiceImpl
    在这里插入图片描述

  5. OmsOrderSetting
    在这里插入图片描述

  • google
  1. MallAdminApplication
    在这里插入图片描述

  2. OmsOrderSettingController:
    在这里插入图片描述

  3. OmsOrderSettingService
    在这里插入图片描述

  4. OmsOrderSettingServiceImpl
    在这里插入图片描述

  5. OmsOrderSetting
    在这里插入图片描述

FindBugs

  1. correctness
    在这里插入图片描述
    DMI_INVOKING_TOSTRING_ON_ARRAY

    翻译
    Invocation of toString on … in …
    The code invokes toString on an array, which will generate a fairly useless result such as [C@16f0472. Consider using Arrays.toString to convert the array into a readable String that gives the contents of the array. See Programming Puzzlers, chapter 3, puzzle 12.
    在一个array数组上调用toString将返回如C@16f0472等无意义的结果,可以使用Arrays.toString方法来将数组转换为可读的字符串。

    原因
    大多数这个问题出在直接打印某个数组是否为空,这种直接打印的方法会默认调用对象的toString方法,输出对象的内存地址,也不排除其他情况。

    因为这里pic的定义是:

     private byte[] pic;
    
  2. Bad practice


  • 在这里插入图片描述
    Nm: Class names should start with an upper case letter (NM_CLASS_NAMING_CONVENTION)
    Class names should be nouns, in mixed case with the first letter of each internal word capitalized. Try to keep your class names simple and descriptive. Use whole words-avoid acronyms and abbreviations (unless the abbreviation is much more widely used than the long form, such as URL or HTML).
    翻译:
    Nm:类名应以大写字母开头(NM_CLASS_NAMING_CONVENTION)
    类名应为名词,大小写混合,每个内部单词的首字母应大写。尝试使您的类名称保持简单和描述性。请使用整个单词,避免使用首字母缩写词和缩写词(除非缩写词比长格式(如URL或HTML)使用得更广泛)。

    原因:
    这里的是fileController,开头没大写


  • 在这里插入图片描述

    Nm: Method names should start with a lower case letter (NM_METHOD_NAMING_CONVENTION)
    Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.

    Nm:方法名称应以小写字母开头(NM_METHOD_NAMING_CONVENTION)
    方法应为动词,首字母小写混合,每个内部单词的首字母大写。

    原因:
    这里的是BindingResult,方法开头大写了

  1. Dodgy code
    在这里插入图片描述
    ICAST: Result of integer multiplication cast to long (ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)
    翻译:
    ICAST:整数乘法的结果强制转换为long(ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)

    原因:

    // 文件大小
    long maxSize = ALIYUN_OSS_MAX_SIZE * 1024 * 1024;
    
  2. Malicious code vulnerability


  • a
    在这里插入图片描述
    EI: May expose internal representation by returning reference to mutable object (EI_EXPOSE_REP)
    Returning a reference to a mutable object value stored in one of the object’s fields exposes the internal representation of the object. If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Returning a new copy of the object is better approach in many situations.

    翻译:
    EI:可以通过返回对可变对象(EI_EXPOSE_REP)的引用来公开内部表示形式
    返回对存储在对象字段之一中的可变对象值的引用将暴露该对象的内部表示。如果实例是由不受信任的代码访问的,并且对可变对象的未经检查的更改会损害安全性或其他重要属性,则您需要做一些不同的事情。在许多情况下,返回对象的新副本是更好的方法。

    b
    在这里插入图片描述

    同上的错误

  • a
    在这里插入图片描述

    public void setCreateTime(Date createTime) {
       this.createTime = createTime;
    }
    

    和上面一样的提示

    b
    在这里插入图片描述

    public void setCreateTime(Date createTime) {
      this.createTime = createTime;
    }
    

    和上面一样的提示

PMD

总概览:
在这里插入图片描述

  • bestpractices:
    在这里插入图片描述
    这个抽象类没有抽象方法

  • codestyle:
    在这里插入图片描述
    每个类必须有一个构造函数

  • design
    在这里插入图片描述
    这里推荐用Final修饰UmsAdmin,因为只被初始化一次

  • documentation
    在这里插入图片描述
    需要对 message 字段注释

  • errorprone
    在这里插入图片描述
    避免使用LiteralsInlfCondition。通过将条件语句声明为静态变量来避免在条件语句中使用硬编码文本,或者使用描述性名称的私有成员可维护性得到增强

  • multithreading
    在这里插入图片描述
    由于Java5带来了为多线程访问而设计的Map的新实现,您可以在不阻塞其他线程的情况下执行高效的Map读取
    如果您在Java5或更新版本中运行并且具有并发访问权限,那么应该使用ConcurrentHashMap实现

  • performance
    在这里插入图片描述
    Consecutive calls to StringBuffer/StringBuilder .append should be chained, reusing the target object. This can improve the performance by producing a smaller bytecode, reducing overhead and improving inlining. A complete analysis can be found.

    应当连续调用StringBuffer / StringBuilder .append,以重新使用目标对象。通过产生较小的字节码,减少开销和改进内联,可以提高性能。

    推荐多个append连用

修改订单的三工具分析结果对比

工具Warning数较多Warning的详情描述
CheckStyle(sun)4+20+8+7+31=70本行字符数要求不超过80个
FindBugs0
PMD3+14+2+9+46=74ShortVariable. Fields, local variables, or parameter names that are very short are not helpful to the reader(简称变量太短)
  • FindBugs:
    我们以包的分组查看错误,结果如下:
    在这里插入图片描述
    打开controller,可以看到不是有关修改订单操作OmsOrderSettingController的错误
    在这里插入图片描述
    再看service.impl:
    在这里插入图片描述
    也不是OmsOrderSettingServiceImpl的错误

    最后看entity,但是entity的文件太多,我们再以class的分组查看,发现没有一个是OmsOrderSetting:
    在这里插入图片描述
    综上findbugs找到的关于修改订单的warning数是0

  • PMD:
    分别对修改订单的几个部分使用

    MallAdminApplication:
    在这里插入图片描述
    OmsOrderSettingController:
    在这里插入图片描述
    OmsOrderSettingService:
    在这里插入图片描述

    OmsOrderSettingServiceImpl:在这里插入图片描述
    OmsOrderSetting:
    在这里插入图片描述

总结(引用Intellij IDEA 使用checkstyle、pmd、findbugs检查静态代码质量):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42955958

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值