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

More Related Content

PDF
次世代I/Oインターフェイス「Eject-io」
PPTX
ネットワークカメラを使った玄関前モニタリングの苦労話
PDF
El concepto del limite (Cálculo I)
PDF
ネットワークへのCI的アプローチ
PPT
Let'sトライ!VisualStudio(C#)でGainerプログラミング-果たして忘れ物お知らせアプリは完成するのか?!
PDF
Unityと.NET
PDF
動的なILの生成と編集
PPT
2006-04-22 CLR/H #14 .NET and open source
次世代I/Oインターフェイス「Eject-io」
ネットワークカメラを使った玄関前モニタリングの苦労話
El concepto del limite (Cálculo I)
ネットワークへのCI的アプローチ
Let'sトライ!VisualStudio(C#)でGainerプログラミング-果たして忘れ物お知らせアプリは完成するのか?!
Unityと.NET
動的なILの生成と編集
2006-04-22 CLR/H #14 .NET and open source

Similar to 攻略ユニットテスト with Win32 API (20)

PDF
20120927 findjob4 dev_ops
PPTX
Out systemsaichiusermeeting#5 lt2
PPTX
ラウンドテーブル:結局アジャイルとは何だったのか
PDF
20150123 第28回 Unity 勉強会「Unity に於けるビルド自動化のおはなし & 設定管理とリソース管理のおはなし」
PPTX
ownCloudの深イイ話
PPTX
Abpro
PDF
第2回nseg slideshare
PPTX
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
PDF
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
PDF
アジャイルマニフェストから見るインセプションデッキ
PDF
徹底比較Unreal engine4&unity5
PDF
Intalio japan special cloud workshop
PDF
【第1回】アジャイル・スクラム勉強会
PPTX
Ossフル活用でinfrastructure as codeやってみた
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
PPTX
Unity ゲーム開発
PPTX
実録!HoloLens×AI×IoTアプリが開発できるまでの挫折と成功
PDF
Windows 8 Developers カンファレンス
PDF
デザイナー・コーダーのための黒い画面入門 先生:和田 修一
PDF
デザイナー・コーダーのための黒い画面入門
20120927 findjob4 dev_ops
Out systemsaichiusermeeting#5 lt2
ラウンドテーブル:結局アジャイルとは何だったのか
20150123 第28回 Unity 勉強会「Unity に於けるビルド自動化のおはなし & 設定管理とリソース管理のおはなし」
ownCloudの深イイ話
Abpro
第2回nseg slideshare
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
アジャイルマニフェストから見るインセプションデッキ
徹底比較Unreal engine4&unity5
Intalio japan special cloud workshop
【第1回】アジャイル・スクラム勉強会
Ossフル活用でinfrastructure as codeやってみた
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
Unity ゲーム開発
実録!HoloLens×AI×IoTアプリが開発できるまでの挫折と成功
Windows 8 Developers カンファレンス
デザイナー・コーダーのための黒い画面入門 先生:和田 修一
デザイナー・コーダーのための黒い画面入門
Ad

More from Ryo Amano (20)

PDF
もんじゃいるのススメ
PDF
「ツナガル」クミコミシステム
PDF
Movie Format in a Nutshell 2013
PDF
MY JOB WEND TO VIETNUM? DevSumi ver.
PDF
20130211.yuko party.beakmark
PDF
デブサミ100人本のご紹介
PDF
MY JOB WENT TO VIETNAM?
PDF
リーダー塾第4期説明会に寄せて
PDF
Meisters 6年目の挑戦
PDF
そろそろ飲み会マッシュアップについてヒトコト言っておくか
PDF
わたしといがいが
ZIP
XP Fiesta Kansai 2010 "アジャイルマインド勉強会の方からやってきました"
PDF
ビーク・マークとはなにか
PDF
動画圧縮のしくみ
PDF
Movie Format in a nutshell
PDF
IT現場のリーダー塾卒業式プレゼンテーション
PDF
"involve" NOT "evolve" DevLOVE ed.
PDF
Activities in the "R" Pj.
PDF
DDDのすすめ
PDF
"involve", NOT "evolve" -- DevSumi2008
もんじゃいるのススメ
「ツナガル」クミコミシステム
Movie Format in a Nutshell 2013
MY JOB WEND TO VIETNUM? DevSumi ver.
20130211.yuko party.beakmark
デブサミ100人本のご紹介
MY JOB WENT TO VIETNAM?
リーダー塾第4期説明会に寄せて
Meisters 6年目の挑戦
そろそろ飲み会マッシュアップについてヒトコト言っておくか
わたしといがいが
XP Fiesta Kansai 2010 "アジャイルマインド勉強会の方からやってきました"
ビーク・マークとはなにか
動画圧縮のしくみ
Movie Format in a nutshell
IT現場のリーダー塾卒業式プレゼンテーション
"involve" NOT "evolve" DevLOVE ed.
Activities in the "R" Pj.
DDDのすすめ
"involve", NOT "evolve" -- DevSumi2008
Ad

攻略ユニットテスト with Win32 API