80:20の法則(part 1)

ENdoSnipeの設定が簡単になりましたで取り上げているように、
ENdoSnipeのVer. 4.0からは、メソッドの実装内容を見て、
BCIの対象とするかどうかを判断します。


getterやsetter、あるいは単純に他のメソッドを呼び出すだけのようなものは、
そもそも性能問題が発生する事がないので、計測不要と考えたというわけです。


実際には、単純なメソッドを何度も呼び出す事で、
性能問題が発生する事はあり得ますが、
この場合は呼び出し元のメソッドの処理時間の増大として検出されるでしょう。


この機能をつけた理由は先に挙げたブログを読んで頂くとして、
実際にどれぐらい効果的かを検証しました。


以前は以下のように設定していました。

############################################################
# Settings for S2JSF Example
############################################################
examples.jsf.action.impl..*Impl,JavelinConverter
examples.jsf.logic.impl..*Impl,JavelinConverter
examples.jsf.dao..*,JavelinConverter


Action、Logic、Daoの各層の主要なメソッドを対象にしていますね。
簡単なサンプルプログラム程度であれば、
試行錯誤してこのような設定を決めれば良いのですが、
急場の大規模プロジェクトではそのような時間もないので、
改善が必要だったわけです。


では、新機能を用いた新しい設定は以下の通りです。

############################################################
# Settings for S2JSF Example
############################################################
examples.jsf..*,JavelinConverter


examples.jsfパッケージ配下に含まれる全クラスの、
全メソッドを性能測定の対象に指定しています。


では、これで動作比較をやってみようと思います。
観点としては、

  1. 対象クラス・メソッド数の変化
  2. クラス図・シーケンス図の変化
  3. オーバヘッドの変化


を取り上げたいと思います。
それでは、続きをお楽しみに。