• 软件测试:Soot生成控制流图


    Soot生成控制流图

     

     

    1.下载jdk1.7并配置环境变量(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html),

       下载eclipse kepler(下载地址:http://www.eclipse.org/downloads/packages/eclipse-standard-43/keplerr),

       下载soot-2.5.0.jar(下载地址:http://pan.baidu.com/s/1kUzd8Tx)。

      【安装遇到的问题】

        1)jdk1.7安装,配置环境变量后报Error:could not open ‘C:Program FilesJavajre1.7.0_80libamd64jvm.cfg'.

              解决方法:把环境变量Path里面的%JAVA_HOME%/bin放在最前面,若没有%JAVA_HOME%/bin,则创建。

    2.把soot-2.5.0.jar导入项目,并复制粘贴到项目的bin目录,然后命令行进入项目bin目录,使用下面的命令生成dot文件。【sootTest为包(package)名,Triangle为类名】

    java -cp soot-2.5.0.jar soot.tools.CFGViewer --soot-classpath .;"%JAVA_HOME%"jrelib
    t.jar sootTest.Triangle

       

      

    执行后在项目bin目录下会生成sootOutput文件夹,里面有生成的dot文件,把生成的dot文件重命名。

      

    3.下载graphviz(不限版本),然后配置环境变量并安装(参考地址:https://blog.csdn.net/lanchunhui/article/details/49472949),使用dot -version查看安装是否成功。

      

    4.命令行进入sootOutput目录下,使用dot -Tpng Triangle.dot -o Triangle.png命令,来可视化dot文件。

       

        

       生成Triangle类的控制流图:

       

       生成Test类的控制流图:

          

    5.测试用例

       

    Triangle.java

    package sootTest;
    
    public class Triangle {
        public String check(int a, int b, int c){        
            String result = "";
            if(a == b && b == c){
                result = "该三角形为等边三角形";
            }else if(a == b || a == c || b ==c){
                result = "该三角形为等腰三角形";
            }else if(a + b > c && a + c > b && b + c > a){
                result = "该三角形为不等边三角形";
            }else{
                result = "这不是一个三角形";
            }
    
            return result;     
        }
    
    }

    Test.java

    package sootTest;
    
    public class Test {
        
        private double num = 5.0;
        
        public double cal(int num, String type){
            double temp=0;
            if(type == "sum")
            {
                for(int i = 0; i <= num; i++){
                    temp =temp + i;
                }
            }
            else if(type == "average")
            {
                for(int i = 0; i <= num; i++){
                    temp = temp + i;
                }
                temp = temp / (num -1);
            }else{
                System.out.println("Please enter the right type(sum or average)");
            }
            return temp;
        }
    }

       

  • 相关阅读:
    简介anaconda下的jupyter notebook的代码分块运行
    此文件的签名已损坏或无效或360下载提示下载失败解决办法
    Java基础加强
    XML
    Servlet
    Tomcat
    json和跨域
    jQuery的ajax
    ajax请求状态码 以及 页面请求状态码
    ajax 基础
  • 原文地址:https://www.cnblogs.com/meiqin970126/p/8977573.html
Copyright © 2020-2023  润新知