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 Files\Java\jre1.7.0_80\lib\amd64\jvm.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%"\jre\lib\rt.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; } }