[プログラミング]ソフトウェアメトリクス(続き)

単に改行で行数を計ってしまうと、コードの記述の仕方によって差異が出てしまったり、フォーマッタを使用するプログラマとそうでないプログラマで差異が出てしまったり、コメントを書く量で差異が出てしまうので、あまりよろしくないですね。もうちょっときちんと計測する方法が必要です。

| classes parseBlock |
parseBlock := [ :aClass |
		| lines methods |
		lines := aClass methodDict inject: 0 into: [ :result :each |
				result + (Parser new parse: (aClass methodDict value at: each value selector) sourceCode class: aClass) block statements size].
		methods := aClass selectors size.
		{ aClass . lines . methods . (lines / methods) asFloat round: 2 } ].
classes := (RPackageOrganizer default packageNamed: 'PBE-LightsOut') definedClasses
	reject: [ :each | each isTestCase ].
classes collect: [ :each | parseBlock value: each ]

Parser>>parse:class: を使います。例えばこんな風に。

Parser new parse: (Number methodDict value at: #to:by:do:) sourceCode class: Number

これを Inspect it してインスペクタで

self block statements size

を Print it すればステートメント数が求まります。
f:id:umeaji:20181012060152p:plain
Number>>to:by:do: のステートメント数は 4 です。

Parser を使えばコメント部分と空行は数えず、ステートメント(ピリオド区切り)の行数を数えますから冒頭に示した問題を解決できます。