PySonar2 開源了經過 Google 的許可,我現在將 PySonar 第二版本開源,就叫 PySonar2 吧。代碼可以在我的 GitHub 下載: https://github.com/yinwang0/pysonar2 經過一陣子考察之后,我發(fā)現 PySonar2 仍然是當今最先進的 Python 靜態(tài)分析器。其分析的深度和準確程度其實超過了所有的 Python IDE (包括 PyCharm 3.0 在內)。PySonar2 做的是跨過程,具有精確控制流的分析,而現在最好的 Python IDE 仍然是局部過程分析。 PySonar2 的工作原理卻極其簡單,說白了就是:寫一個 Python 解釋器,然后想辦法讓它“停機”。實際上這個簡單的方法超過了一些程序語言研究者花幾十年做出來的“艱深理論”。比如 Olin Shivers 及其學生們的 control-flow analysis 系列 20 多年來的成果,當我看他們的論文的時候,發(fā)現他們其實在解決一個自己(不小心)造出來的問題。我一開頭什么都不知道,全憑自己感覺出發(fā),所以就沒有走上那條不歸路 ;-) 另外,其實給 Google 的代碼里有一個很“嚴重”的 bug,導致算法成為指數時間復雜度,所以他們其實仍然在用第一版的代碼 ;-) Sourcegraph.com 使用的也是第一版的代碼。在 Coverity 的時候,我從他們的代碼里面也發(fā)現同樣的問題,對某些 benchmark 運行時間太長。最后被我兩行代碼修好了(雖然找到這兩行代碼花了好幾天)。 最近重新燃起了對 PySonar 代碼的興趣。經過修改兩行代碼之后,這個性質與 Coverity 完全一樣的 bug 被消滅掉了。然后又發(fā)現一些邏輯細節(jié)和數據結構性能上的問題,也逐漸修補了?,F在它能夠處理整個 Python 2.5, 2.6, 2.7 的標準庫和類似 Django 的項目,只需要3分鐘的樣子。我驚喜的發(fā)現能夠檢索到的名字比第一版多很多。界面還算比較友好吧,但是有待提高。歡迎喜歡美工的人士參與合作。 因為 Python 語言的復雜性,而且由于我其實不是 Python 程序員,我相信 PySonar2 里面肯定還有一些細節(jié)沒有照顧到(雖然最主要的部分是沒問題的)。如果發(fā)現問題,請開啟 GitHub 的 issue。 另外,同樣的原理其實可以應用到所有的語言分析里面。在將來我希望開發(fā)出通用的代碼分析器,能夠處理多種語言。 |
|
|