狠狠撸
Submit Search
攻略ユニットテスト with Win32 API
?
1 like
?
903 views
Ryo Amano
Follow
2006.1.13 : 第14回 XPJUG ユーザー会 * 『攻略ユニットテスト with Win32 API』
Read less
Read more
1 of 38
Download now
Download to read offline
More Related Content
攻略ユニットテスト with Win32 API
1.
攻略 UnitTest with Win32
API 2006.1.13 あまのりょー
2.
自己紹介 like.no.other ? こんにちは、あまのりょーです。おかげ様で、順調 に復活しています。cf.) XP祭り2005 ?
とあるメーカー系ソフトハウスでメディア系のア プリケーションを作っています。 ? ホントは Mac OS が得意&やりたいんですけど、 仕事ではやっぱり Windows の仕事が多いです。 orz ? 永和の天野さんとの区別の方法を日夜研究中です。
3.
2005.11.17 ? Embeded Technology
2005 (ET2005) の公開セッ ション「アジャイル手法は組込みシステム開発に使えるか」 ? アジャイラーからは平鍋さん、永瀬さんなどの 錚々たるパネリスト
4.
私が理解した所の 結論 ? アジャイル手法は組み込み開発に使えるでしょ。 ? いや、むしろ
XP とか SCRUM とか名前を付けてな いだけで、アジャイルっぽい何かはクミコマーの中 に存在するよね。 ? クミコマーもアジャイルのコミュニティに参加しよ うよ。
5.
ん? ? っていうか、オイラがアジャイル系コミュ ニティの懇親会で名刺交換したことある のって、かなり主観だけど、、、、、、
6.
Webアプリ屋さん & Javaアプリ屋さん Rails W ebO bjects .asp M ySQ L DI-Container Swing JUnit
7.
やっぱり多い。 でも、
8.
クミコミ屋さん も割といるような 希ガス μITRON VxW orks bootstrap Flash M em ory P操 作 V操 作 JTAGICE data sheet
9.
ひょっとし て???
10.
PCアプリ屋さん が少なくね?
11.
今日は敢えて ? あまり仲間がいない(断定していいのか!?) PC
ア プリ屋さんが、ターゲットです。 ? Windoze の アプリを作っている。 ? VisualStudio で C++、そしてもちろん unmanaged だ。(たぶん BCB でもイケル) ? CppUnit を使ってユニットテストしている。 (たぶん boost::unit_test_framework でもイケ ル)
12.
EoT (Ease of
Testing) ? ITメディアの平鍋さんの Blog (An Agille Way http:// blogs.itmedia.co.jp/hiranabe/) 2005/8/18 のエントリ より。 ? そのためには??? ? MVC の分離(MFCだと大変だけど) ? Mock の利用(Mockpp を使えばある程度は) ? et cetera... EoTの高い設計が、よいオブジェクト指向設計である。
13.
そうはいっても ? 最後には Win32
API を呼んでいるコードが残るよ ね。 ? Win32 API 用 Interface を用意して、テスト時には その Mock Object を用意してすげ替える? ??→ 現実的じゃないし ? むーん???
14.
しかし今 ? ここに来て追い風が???
15.
時代は Binary 2.0 カンファレンス行きたかった???
16.
コンセプト ? テスト時には Win32
API をちょっぴり Hackして 乗っ取った ちょっぴり Hook してみた(えへ) コードが呼ばれるようにしてみよう。 ? つまり Win32 API 自体を Mock 化してみよう。
17.
!!CAUTION!! ? この技を追求しすぎると、人は時として、暗黒面に 堕ちます。 ? 通報されたり、タイーホ されないように??? ?
実際、この hack をした mat 氏の mixi 名はある日「ダース?フモフモ」に 変わってました。
18.
IAT書き換え ? さぁ、今回は IAT
(Import Address Table) を書き換え てみましょう。 ? 参考文献: ? 今回は技術的な詳細には触れません。気になる方 は私に直接声かけてくださいませ。
19.
ケース1 ? ::GetDiskFreeSpaceEx() API
を使って、ディスクの 空き容量をチェックし、閾値 _以上_ なら true を返 すメソッドをテストしたい。 ? テストコード内で巨大なファイルを touch するなど の方法が考えられますが、閾値付近に制御するこ とは非常に難しい。
20.
実行例1 - Hook無し Hookしていないと、容量が足りない 場合のテストコードが試せない
21.
実行例1 - Hook有り Hookして、少ない容量を返すように するとテストパス
22.
ケース2 ? Web アプリ系でも問題になるテスト時の
pseudo DB。Windows では簡単な値の永続化はレジストリ を使って行います。 ? レジストリアクセスの API は ::RegQueryValueEx() ですが、これを Hook すればOK。(もちろん Open/Close 用の API も Hook します)
23.
実行例2 - Hook有り HKLM
を書き込み権限で Open できて しまうユーザでテストしているので Open失敗の場合のテストが出来ない
24.
実行例2 - Hook有り Hookして、Openが失敗するようにし てみるとテストパス
25.
and so on ?
この他にも、Win32 API の挙動を制御してユニット テストしたいケースはあると思います。(例:ウィ ンドウ位置調整など) ? こういった場合に今回紹介した手法は使えるかも しれません。
26.
まとめ
27.
Win32 API Hook で ユニットテスト してウハウハ
28.
でもダークサイド に堕ちちゃいやん
29.
PCアプリ屋さん はもっとコミュニ ティに参加しよう
30.
以上。
31.
ヨンキュー! ご清聴ありがとう mixi コミュ: ヨンキュー普及委員会
もよろしく
32.
おまけ まだ終わってなかった時の
33.
先日、私が関わっているプロジェクトの 最初のイテレーションが終わりましたが、 その時のバーンダウンチャートです。 4つのモジュールがあります。
34.
トレンドはいいけど、最初に沢山設定しす ぎましたね。
35.
平坦部分が気になるけど、最後は収束。 タスク粒度の問題か。
36.
そ、その日にいったい何が???
37.
どこから始まってんねん!
38.
ホントに おしまい
Download