ソフトウェアメトリクス(初歩)

数年に一度作るかどうかという奇跡のまともアプリw「マイ○スィー○ーもどき」のメソッドあたりの平均ライン数を求めてみます。
Smalltalk は強力なリフレクションを備えるため、いとも簡単に求めることができます。
商用のメトリクスツールなんて要りません。

| aBlock |
aBlock := [ :aClass |
		| lines methods |
		lines := aClass methodDict inject: 0 into: [ :result :each |
				result + (each value sourceCode substrings: { Character cr }) size].
		methods := aClass methodDict size.
		Transcript show: aClass printString, ' : '.
		Transcript show: lines printString , ' total lines, '.
		Transcript show: methods printString, ' methods, '.
		Transcript show: (lines / methods) asFloat printString, ' lines/method.'; cr].
Transcript clear.
(RPackageOrganizer default packageNamed: 'PBE-LightsOut') definedClasses
	do: [ :each | aBlock value: each ]

これをワークスペースにコピペして Do it します。*1

結果は面倒なのでトランスクリプトに吐きます(手抜き
コードにコメントは書かないので考慮しません!
空行も入れないので無視です!
カテゴリが LightsOut のままですが気にしない。面倒くさいのでリスペクトしたいので変更しませんw
コードはすべて Pharo のフォーマット機能で整形しています。

LOCellTest : 199 total lines, 31 methods, 6.419354838709677 lines/method.
LOGame : 134 total lines, 24 methods, 5.583333333333333 lines/method.
LOCell : 132 total lines, 36 methods, 3.6666666666666665 lines/method.
LOGameTest : 244 total lines, 22 methods, 11.090909090909092 lines/method.

メソッドあたりのステップ数は 10 行にもなっていませんね。
テストコードの方がボリュームがありますね。普通こうなるのが傾向でしょう。

Smalltalk の場合、文の区切りはピリオドなので、改行で区切って意味あるのか!
というツッコミはごもっともです。ピリオド区切りで計測した場合、メソッドあたりのステップ数はもっと少なくなります。ヤバイです!

*1:'PBE-LightsOut' の部分を好きに変えれば、お好みのパッケージ配下にあるクラス群の計測ができるよ!