软件源代码静态分析工具(Klocwork Insight)分析出Java代码问题的分析

    业界发明了程序静态分析(ProgramStaticAnalysis)技术,静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。它可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞和代码缺陷等问题,从而保证软件的整体质量。静态分析的特点是能够在代码研发的全周期协助开发人员优化代码,缩短项目周期,降低研发成本,提高代码质量。

前言:
    软件源代码静态分析工具(KlocworkInsight)分析报告重点内容如下:
    1)、Java:相等性比较、哈希代码问题
    问题密度:0.93
    问题的分布
软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析

    2)、Java:可维护性问题
    问题密度:0.93
    问题的分布
软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析    方法名称应该非大写字母开头

    3)、Java:性能问题
    问题密度:1.86
    问题的分布
软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析
    escmp.emptystr:低效的空字符串的比较
    strcon.loop:在一个循环中使用附加字符串
    umc.tostring:一个字符串的声明调用不必要的tostring()方法

    4)、Java:低效的错误处理
    问题密度:1.63
    问题的分布
软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析
    exc.broadthrows:方法有一个过于宽泛的声明
    ecc.empty:空的catch子句

    5)、Java:冗余代码
    问题密度:8.31
    问题的分布
软件源代码静态分析工具(Klocwork Insight)分析出Java代码问题的分析_第1张图片
软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析
    jd.vnu:变量被分配之后从来没有被使用过
    jd.vnu.null:变量在赋值为null后从来没有被使用过
    redun.final:多余的final的修饰
    jd.rc.expr.check:测试表达式永远是真

1、Comparing strings "" and 'appid' using equals(), instead oflength() == 0
    前言,首先要说说java空字符串与null,二者区别是" "分配了内存,null没有。 
    ""是一个字符串(String),它在内存中是存在的,它可以使用Object对象中的方法,如"".toString();"".equals()。 
    而null它是一个空对象,在内存中是不存在的,它不可以使用Object对象中的方法。 
    所以比较的时候必须是if(str1==null){....}和if(str2.equals("")){} 
    对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误: 
    if(str1.equals("")||str1==null)
    {
        //如果str1没有值,则.... //。。。。 
    } 
    正确的写法是 
    if(str1==null||str1.equals(""))
    { 
        //先判断是不是对象,如果是,再判断是不是空字符串//... 
    } 

    问题,对象直接比较,对系统性能将产生较大的影响,特别是做云服务时,更需要注意,推荐用法是判断字符串对象的长度是否为零,例如:
    if(str1==null|| length() == 0)
    { 
        //先判断是不是对象,如果是,再判断是不是空字符串//... 
    } 

2、Comparing strings 'destTag' and '""' with ==
    详见第1个问题字符串比较描述。

3、Using append for string 'localStepGuid' in aloop
软件源代码静态分析工具(Klocwork Insight)分析出Java代码问题的分析_第2张图片
    复杂字符串拼接处理,应该使用 StringBuffer或 StringBuilder。
    避免在循环体内使用String,频繁创建对象,消耗资源。
    String 是字符串类最常用于简单的字符串操作;
    StringBuffer 是字符串缓冲。适用于复杂的字符串增删改操作;
    StringBuilder 是与StringBuffer 兼容的 API 简化。 该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
    例如:
        StringBuffer localStepGuid = new StringBuffer();



待续......

你可能感兴趣的:(软件源代码静态分析工具(Klocwork Insight)分析出Java代码问题的分析)