題:
我可以使用什麼軟件來測量Bash腳本的LLOC,功能點和圈複雜度?
Arseni Mourzenko
2016-10-22 03:15:52 UTC
view on stackexchange narkive permalink

我想收集一些有關存儲庫的統計數據,以便隨時間進行比較。目的是了解特定語言的使用方式是如何隨著時間變化的,以及不同項目的複雜性和大小如何增長或縮小。

有一個很棒的工具,稱為 cloc 可以測量不同語言的代碼行。這是一個很好的開始,但是LOC度量不是很有代表性。我想收集更好的方法,例如,從代碼和功能點的邏輯行開始,最後是循環複雜性。

也有一些工具可以做到這一點:

  • Python具有出色的 radon 庫,該庫提供了LLOC,圈複雜度等,並可以間接確定功能點的數量。

  • C#顯然具有Visual Studio的 Code Metrics,它還提供了詳細的信息,包括ILLOC,與LOC不同,ILLOC可以很好地代表項目的規模以及循環複雜度。

  • JavaScript具有 complexity-report ,這也使得計算功能點,以及LLOC和圈複雜度。

  • PHP似乎也有一個工具,它既提供了LLOC又提供了功能數點,圈複雜度和其他信息。

我找不到的是Bash的類似工具。有一個眾所周知的 ShellCheck靜態分析工具,但這不是我想要的:ShellCheck而是搜索代碼中可能存在的問題,類似於JavaScript的 jslint 和C#的代碼分析

所以:

  • 是否有一個工具,類似於 cloc ,可以顯示數十個LLOC,功能點和圈複雜度語言?

  • 還是有專門針對Bash腳本的工具?


注意:我對可以在Linux終端上使用的免費工具,付費產品,在線服務或API不感興趣。

看看http://softwarerecs.stackexchange.com/questions/36961/linux-utility-for-gather-statistics-about-a-codebase/36971#36971
@SteveBarnes:雖然與`cloc'相比更具相關性,更重要的是,它增加了循環複雜性,但缺少LLOC和功能點。另一方面,對於Bash來說,LLOC是否真的比LOC更相關,對我而言還不清楚,並且功能點也可能不相關(例如,對於不包含函數的大型腳本)。我建議我們等待幾天才能找到其他答案,如果沒有答案,請重複我的問題。
二 答案:
Ira Baxter
2016-12-17 10:04:43 UTC
view on stackexchange narkive permalink

[2個月,無回應。我正在提供商業答案,因為似乎沒有其他答案。]

我們的源代碼搜索引擎(SCSE)用於搜索包含許多(可能是數十種)語言的大型存儲庫有趣的代碼習語。它之所以快速,是因為它根據每種語言的詞法語法對代碼庫進行索引;每個語言都有一個語言精確的詞法分析器。 (這是Windows產品,但已顯式打包以允許Wine進行操作,並且使用Shell腳本使其對Linux而言是本機。)

引人注目的是,索引過程的副作用是使用SLOC,非空白代碼行,空白行,圈複雜度和halstead度量生成的各種文件級指標。它不做功能點(您需要每種語言的反火數字,然後您可以輕鬆地計算出它)。指標實際上是作為XML文件生成的;一個簡單的腳本會將其轉換為類似所示的HTML表。

這將覆蓋代碼庫中除Bash之外的語言。 (不是現成的,但是SCSE擁有定義此類詞法分析器的過程,並且有可能為Bash定義精確的詞法分析器)。但是,可用的詞法分析器之一是用於我們稱為AdhocText的事物,該語言旨在作為您在隨機計算機編程書中找到的編程語言,因此它包含您希望以通用語言找到的所有經典詞素。這比您在隨機編程語言上預期的效果要好。

一個龐大的代碼庫的一個麻煩問題是,根據哪種語言對文件進行分類,以將每個文件與其相應的語言詞典相關聯。我們還有另一個文件清單工具,該工具可以指向一組目錄,根據擴展名和內容提示對文件進行分類,然後使用與SCSE相同的詞法分析器重新驗證分類。運行該工具基本上需要使用完全雜亂的目錄集,根據類型對文件進行分類,識別重複項,並生成配置文件以運行SCSE。

摘要:

  • SCSE是一種工具,可以計算包含LLOC,多種語言的圈複雜度的XML文件
  • ,它根據語言類型使用精確的詞法分析器來處理源文件
  • 它可以處理Bash(或其他未知語言)作為Adhoc Text;或者,可以為Bash定義語言精確的詞法分析器。
  • FileInventory工具可以對大量文件進行分類,以準備與SCSE一起使用
  • SCSE不計算功能點
  • 免費的“附加”功能:跨代碼庫的快速交互式搜索
Koichi Nakashima
2020-03-16 22:22:06 UTC
view on stackexchange narkive permalink

我發布了用於Shell腳本的Cyclomatic Complexity Analyzer。

ShellMetrics-用於Shell腳本的Cyclomatic Complexity Analyzer
https://github.com/shellspec/shellmetrics

它測量外殼腳本(包括bash)的NLOC(非註釋代碼行),LLOC(邏輯代碼行)和CCN(循環複雜度數)。

以下是覆蓋率報告的示例

  ======================================== ======================================= LLOC CCN位置-------- -------------------------------------------------- -------------------- 1 1用法:9 shellmetrics ... 3 1 repeat_string:73 shellmetrics 3 2 array:79 shellmetrics 2 1 array_is_empty:86 shellmetrics 7 2 push_array :91 shellmetrics 11 3 pop_array:102 shellmetrics 11 3 shift_array:119 shellmetrics 8 3果皮:136 shellmetrics 7 3 pretty:149 shellmetrics 2 1進程:162 shellmetrics 65 27 parse:167 shellmetrics ... 52 2 <main> shellmetrics ------------------------------------------------ ------------------------------ 1個文件,共分析了33個功能。 [bash 4.4.20(1)-release] ======================================== ===================================== NLOC NLOC LLOC LLOC CCN Func File(lines:comment :blank)總平均Avg平均avg cnt ----------------------------------------- ------------------------------------- 412 12.48 332 10.06 3.18 33 shellmetrics(479:5:62 )------------------------------------------------- ----------------------------- ===================== ================================================== ========================================================================================================= -------------------------------------------------- ---- 412 12.48 332 10.06 3.18 33 1 479 5 62
-------------------------------------------------- ----------------------------  


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...