C#でも逆コンパイル

先日、オフショア先に自分が修正したソースをメールで送付しました。
修正自体は対したものでは無かったため、当然オフショア先でも動作確認は問題ないだろうと思っていましたが、
「エラーが出て動かない」と連絡がありました。


「そんなはずは無いんだけどなぁ・・・」と思って、
ソースの反映漏れは無いか確認して貰いましたが、
反映している。とのこと。


どう考えてもソースの反映漏れしか思いつかなかったので、
オフショア先のソースを全て送付して日本側で確認しましたが、
確かに全て反映されていました…。


私が修正したソースはオフショア先でも多少の修正があったため、
単純にファイルを上書きしたわけではなく、エディタで反映させたものもあるようでした。


「まさか、修正したソースをセーブする前にビルドしてしまったわけではないよなぁ…」
と思いながら、
オフショア先のexeを逆コンパイルしたところ・・・
コンパイルしたソースには一部しか反映されていませんでした。(笑)
修正して最後にセーブしないままビルドしたのかな?


同じ場所で開発をしていればすぐに分かる物ですが、
違う場所で開発をしているためか、最初はそういったことは疑いもしませんでした。
特に実行環境がVistaであったため、
Vistaの設定がオフショア先と日本側で違うのではと思ってしまったのです。
(修正した箇所がWEBサービスであったため、
ネットワークの設定を疑ってしまった)
お陰でこんなことで半日も時間を費やしてしまいました。


その時使用した逆コンパイルツールは「Reflector for .NET」です。
説明は下記を参照
.NET逆コンパイラと
コードを難読化するDotfuscator

ツール自体は知っていましたが、まさかこんな時に役に立つとは思っても見ませんでした(笑)。


その時のやり取りは下記のとおり。

中国側:頂いたソースでは正常に動きません。
私  :何かエラーは発生していますか?
中国側:SoapException〜が発生しています。
私  :(SoapException〜?
        WEBサービスを修正したから、ネットーワーク関連のエラーか?
    いや、しかしそのエラーはクライアントからサーバにWEBサービスの実行要求を行った時に、
    該当のWEBサービスメソッドが存在しない場合に発生したエラーと全く同じだな。
    追加したWEBメソッドが反映されていない可能性が高そうだ。)
中国側:日本側では正常に動作しているのですか?
私  :日本側では正常に動作しています。
中国側:それでは環境の違いでしょうか?
私  :うーん。どうでしょうね。私が送ったソースは全て反映していますか?
中国側:(ブリッジSEと担当者がここでソースを確認・・・)
中国側:全て反映しています。
私  :(本当かなぁ。ちょっと自分で確認してみたいなぁ)
私  :念のため中国側のソースを送ってもらえますか?
中国側:了解しました。
私  :(ソース受領後)
    (あれぇ。たしかに全て反映されてある。
     それではネットワークやPCの設定等の環境の違いなのか?
     念のため動作しないと言っているexeも送ってもらうか。)
私  :すみません。念のためコンパイル後のExeも送って頂けますか?
中国側:了解しました。
私  :(確認したソースは問題無かったから、
     ソースを上書き保存しないでビルドしたってことはさすがにないよなぁ。
     まぁ。駄目元で逆コンパイルしたソースも確認しておくか・・・)
私  :(逆コンパイルのソース確認後)
     ガハッ。修正したソース反映されてないじゃないか(笑)。
私  :すみません。もう一度ビルドして試して頂けますか?
中国側:了解しました。
中国側:(数分経過)すみません。こちらにミスがあったようです。
    正常に動作しました。
私  :安心しました。(苦笑)

(実際のやり取りはお互いに環境周りの調査等行ったため、
 こんな数分のやり取りではなく、半日以上掛かりました)


うーん。正常に動作しなかったらせめて一度はリビルドして試して欲しかった。

同じ場所で開発していれば、

相手:正常に動作しません。
私 :えっ!本当ですか。念のためリビルドしてもらっていいですか?
相手:了解です。
相手:あっ。正常に動きました。すみません。セーブし忘れていました。
私 :よかった。

といった感じで数分で解決すると思います。


オフショア開発ということで、
全然違う場所で開発しているため、
そういったこと(再確認)は既に行っていると思っていました。
それで環境周りの確認も行って無駄に時間をついやしてしまいました。


今回のまとめ?

■少しでも疑問に思ったことは、すぐ確認。
■口頭だけの確認では無く、エビデンスも確認する。
 (今回の例では、オフショア先のソースとExe)
■自分(日本側)の考え、手順等を当たり前だと思わない。

といっても当たり前のことですね。
その当たり前のことがなかなかできていないです。
反省、反省。