- PR -

VisualStudioで不要なメソッド等の判別方法

投稿者投稿内容
yoshi
会議室デビュー日: 2007/07/05
投稿数: 4
投稿日時: 2007-10-03 13:45
みなさん、ご回答ありがとうございます。
レスがいっぱいついていてびっくりしました。

紹介してもらったツールは時間が無くてまだ調べられていませんが(すみません)、
どうも簡単な方法は無さそうな感じですね。。

終わりに近ければ近いほど余計なことを・・・という意見には全く同意です。

実は今回の件は取引先から不具合、として指摘されておりまして、、、それで、
もしこれを対応するならばどういった対応の仕方があるのか、どのくらい大変
なのか、を報告して相談させていただこうと考えておりまして、その情報
収集のため投稿した次第でした。

ツールはまだ調べていませんが、これで機械的にできないのであればリスクの
ほうが上回りそうな感触ですね。後で調べたらご報告します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-03 21:45
引用:

Error401さんの書き込み (2007-10-03 10:45) より:
話が微妙にずれてませんか?

もともとの質問は「不要なもの」を検出したいということでした。
その前提を覆して「あなたが不要と思っているものは、実は不要ではない。だから削除してはいけない」ということですか?


「不要なもの」という判断を、誰が行いましたか?それは機械的に判断できることですか?
ってのを引き出すための問題でした。
 答えは「渋木宏明(ひどり)さんの書き込み (2007-10-03 11:28)」の通りです。
補足しておくと、private なメソッドであっても、リフレクションをすれば呼び出せます(でないと、デバッガから見えなくなる)。なので、internal であったり private であっても、本当に使っていないかどうかは、人にしかわからないと思います。


 「不要と思われるものを検出して、可能なら削除する」ツールがありました。Dotfuscator<agtech.co.jp> です。高いですorz
VS のヘルプに Dotfuscator のヘルプもついていますが、それによると、「これは消すな」というのをマークできるようです。
Web アプリで使えるかどうかはわかりません。
Error401
常連さん
会議室デビュー日: 2007/03/12
投稿数: 39
投稿日時: 2007-10-04 10:41
internalやprivateの場合は、grepすればわかるんじゃないでしょうか…。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-10-04 11:24
引用:

internalやprivateの場合は、grepすればわかるんじゃないでしょうか…。



リフレクション使ってる場合は100%は難しいです。

フラグを見れば「internal, private なメソッドを使っている」ことまでは分かる(それでも強引な方法でフラグ値を決めているようならアウト)としても、メソッド名/プロパティ名/フィールド名は文字列で表現するわけです。

単純な文字列リテラルなら検索で発見出来ますが、プログラムちっくに文字列を組み立てていたり、通信などによって得られる情報から文字列を構築しているような場合はお手上げです。

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-10-04 11:34
引用:

どうも簡単な方法は無さそうな感じですね。。



「絶対に出来ない」わけではありません。
何の前提条件も示されていないので「一般解は無い」という回答になります。

例えば

・リフレクションなんか絶対に使っていない
・ソリューション横断の参照なんか無い

ということなら、VS のマクロでも実現可能かもしれません。

引用:

実は今回の件は取引先から不具合、として指摘されておりまして、、、



そういうこともあるでしょうね。
カバレッジテスト他で「未使用」とされてしまうこともあると思います。

基本的には、製造過程で無駄なメンバは逐次駆逐するのが正道と思います。
ソース管理他のツール類を有効に活用すれば、コメントや #if のカタマリを築かずに作業が進められるので。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-04 20:37
10数年前から、UNIXにはcrefという、コードを静的に解析して関数の呼び出し相関図を作るコマンドがありましたから、簡易的なものであれば、不可能ではないと思います。

問題は、ソリューションの構成がわからない、ところにあります。
ドキュメント生成ツールでも、相関図は出してくれます。
よくよく考えると、相関図に乗らなかったメソッドを、削除の提案もしないで残している、とも言えます。
なぜ?

ソリューションだけでプロダクトが完了しているなら、削除できます。しかし、完了しているかどうかは、ツールにはわかりません。

Dotfuscatorは、外部から呼び出される可能性があるメソッドをマークすることで、削除を防いでいます。


なんにしても、不具合と言われているなら、修正しなければならないでしょうね。
直接削除してくれるツールだけでなく、ドキュメント生成ツールのような、呼び出されているメソッドを見えるようにしてくれるツールを利用することも考えてみてはどうでしょうか。

スキルアップ/キャリアアップ(JOB@IT)