VBLex使ってVB6のソースコードのサイクロマチック数を解析する
サイクロマチック数=実行経路の数
という認識でいいのかな?まあ、プロジェクト内での相対的な複雑度が計測できればいいから、その定義が違ってもあまり問題にはならないだろう。
と、かなり適当だがとりあえず上記の認識でスクリプト書いてみた。
スクリプトは、標準入力の内容を読み込んでその解析結果を出力するようになっている。
以下のように実行する。
cscript analyze.wsf < hogehoge.cls
ためしに、vbUnit3の中の、Assert.cls というソースコードを食わせてみる。
c:\Users\snaka\work\lang\wsh\vblex>cscript analyze.wsf < vbUnit3\vbUnitFramework\Assert.cls Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. LINES COMLEX PROCEDURE ===== ====== ========= 1 1 IAssert_SetSeverity 1 1 IAssert_StopTesting 4 2 IAssert_Verify 6 2 IAssert_StringsEqual 5 2 IAssert_LongsEqual 5 2 IAssert_DoublesEqual 5 2 IAssert_CurrenciesEqual 21 8 IAssert_VariantsEqual 15 8 ToString 1 1 CountAssertion 4 2 IAssert_EnablePrintMsg 1 1 IAssert_DisablePrintMsg 3 2 IAssert_PrintMsg 1 1 IAssert_ClearTrace 1 1 IAssert_Trace 3 1 IResultUser_Init 1 1 BeforeSetup 2 1 BeforeTestMethod 3 1 IResultUser_Shutdown
結果から、Assert.clsの中で、特に IAssert_VariantsEqual() と ToString() の複雑度が高いことがわかる。
でも行数からして、20行程度なのでそんなに問題じゃないだろうということもわかる。