Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
君はPower Assertを知っているか #potatotips
Search
FUJI Goro
May 15, 2014
Technology
4.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
君はPower Assertを知っているか #potatotips
potatotips #7 2015/5/15 at DeNA
FUJI Goro
May 15, 2014
More Decks by FUJI Goro
See All by FUJI Goro
ステートレスなLLMでステートフルなAI agentを作る - YAPC::Fukuoka 2025
gfx
7
2k
How to Boost Your Code with WebAssembly
gfx
2
3.2k
AssemblyScriptでライブラリコードの高速化をしてみる
gfx
5
3.3k
実践TypeScriptトークバトル
gfx
1
1.3k
歴史的経緯の説明 as code
gfx
7
2.9k
Elasticsearchによる 全文検索の実装 in Rails
gfx
6
9.8k
すばらしきGraphQLのSEKAIへようこそ
gfx
20
10k
マルチテナント・ウェブアプリケーションの実践
gfx
14
9.8k
How to choose the ORM on Android
gfx
1
4.4k
Other Decks in Technology
See All in Technology
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
160
自宅NWにISR4331を導入してみた話
okaits
0
120
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.7k
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
300
2027年のMetricKit
kantacky
0
160
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
5
890
強化学習「理論」入門
enakai00
3
3.6k
Oracle MCP Servers Explained
thatjeffsmith
0
440
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
320
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
900
猫付きpingコマンドを自作
uyuki234
0
300
dbt と Snowflake と tag
kevinrobot34
1
190
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Being A Developer After 40
akosma
91
590k
Side Projects
sachag
455
43k
4 Signs Your Business is Dying
shpigford
187
23k
It's Worth the Effort
3n
188
29k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
So, you think you're a good person
axbom
PRO
2
2.1k
Building an army of robots
kneath
306
46k
How GitHub (no longer) Works
holman
316
150k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Transcript
܅ Power Assert Λ͍ͬͯΔ͔ FUJI Goro (@__gfx__), a software engineer
in COOKPAD #potatotips 2014/5/15 at DeNA
FUJI Goro (@__gfx__) • software engineer @ COOKPAD Inc. •
Android / iOS ͚ڞ௨ϥΠϒϥϦͷઃܭɾ։ൃ
Assertions in Java // EXPR͕ࣦഊ͢Δͱ throw new AssertionError() Λ࣮ߦ͢Δ assert
foo == 42; ! // commentAssertionErrorͷҾͱͯ͠͞ΕΔ assert foo == 42 : “with message”; ! // assertແޮ͕࣌ࣜධՁ͞Εͳ͍ͷͰॏΊͷલఏ݅νΣοΫՄ assert checkParamsButSlow(foo);
Assertions in Android • AndroidͰJavaͷassertจ͕͑Δ • `assert getActivity() != null;`
• ͨͩ͠assertσϑΥϧτͰແޮ • `adb shell setprop debug.assert 1` Ͱ༗ޮԽ • …Ͱ͖Δ͜ͱ͋Δʢ࣮ػͩͱͰ͖ͳ͍ʁʣ
Assertionsͷ • εΠον͕ΞϓϦ͝ͱͰͳ͘͝ͱ • ͦͦޮ͔ͳ͔ͬͨΓ͢Δ͠ • ։ൃऀશһͰৗʹ༗ޮʹ͢Δͱ͍͏ͷ͍͠ • ࣦഊ࣌ͷใʹ͍͠ •
ৄࡉΛ͏ͨΊʹϒϨʔΫϙΠϯτΛࠐΜͰ σόοά͢Δඞཁ͕͋Δ
ͭΒ͍
ͱ͜ΖͰ Power Assert Λ͍ͬͯ·͔͢
Power Assert ͷػೳ • assertࣦഊ࣌ʹؔ͢ΔࣜͷΛදࣔ͢Δ def x = new File(“foo.groovy”)
assert x.absolutePath.contains("bar") // shows: Assertion failed: ! assert x.absolutePath.contains("bar") | | | | | false | /path/to/foo.groovy foo.groovy at foo.run(foo.groovy:4)
࣮ͷͨΊͷπʔϧνΣΠϯ • ࣮ߦલʹίʔυΛॻ͖͑Δඞཁ͕͋Δ • JavaScript൛ιʔείʔυΛॻ͖͑Δ • SpockίϯύΠϧޙͷASTΛॻ͖͑Δ • ASTʹରͯ͠ϝλϓϩάϥϛϯάͰ͖Δڥ ͕͋ΕOK
AndroidͰPower Assert͕ ͍͍ͨੈքઢʹߦ͖͍ͨ…
– OSSքͷ֨ݴ “ͩͬͨΒ͓લ͕Ε”
Γ·ͨ͠
Android Power Assert Plugin • assertจΛڧ੍తʹ༗ޮԽ • assertࣦഊ࣌ʹใΛՃ • ϦϦʔεϏϧυͰԿ͠ͳ͍
• ࣮ߦʹӨڹ΄ͱΜͲͳ͠ • APKͷαΠζ૿͑ͳ͍
ग़ྗྫ assert findViewById(R.id.never).isFocused();
σϑΥϧτͷྫ֎
assert findViewById(R.id.never).isFocused(); with default mode java.lang.NullPointerException: at MainActivity.onButton2Click(MainActivity.java:28) (…stacktrace͕ଓ͘…) !
// NOTE: // KitKat͔Β͏গ͠ใ͕૿͑ͯɺͳʹ͕nullͩͬͨͷ͔Θ͔Γ͘͢ͳ͍ͬͯΔ
Power Assert༗ޮͷͱ͖
assert findViewById(R.id.never).isFocused(); with power assert java.lang.NullPointerException: 26: void onButton2Click() {
27> assert findViewById(R.id.never).isFocused(); 27: } MainActivity.findViewById()=<null> at MainActivity.onButton2Click(MainActivity.java:28) (…stacktrace͕ଓ͘…)
͍ํ // The root build.gradle buildscript { dependencies { classpath
‘com.github.gfx:android-power-assert-plugin:0.10.+’ } } ! // in build.gradle of a module apply plugin: ‘android-power-assert’
͋ͱassertจΛ͏͚ͩ
Power Assert ೋͭͷଆ໘
ΞϓϦέʔγϣϯίʔυͰ͏ • ڥ͕ಛఆͷঢ়ଶͰ͋Δ͜ͱΛอূ͢Δ • ҾͷνΣοΫnullνΣοΫͳͲ • Android StudioͰNPEܯࠂΛ੩ΊΔͨΊ • ϦϦʔε൛Ͱassertจফ͑ΔͷͰɺ͋͘·Ͱ
ʮ։ൃऀ͕ਖ਼͍͠ίʔυΛॻ͍͍ͯΔ͜ͱΛอ ূ͢ΔʯͨΊʹ͏
ςετͰ͏ • ൚༻ςετϚονϟʔͱͯ͠͏ • JUnitͷassertEquals()ͷҾͷॱ൪Λߟ͑ͳ͘ ͯΑ͘ͳΔ • ࣜͷ్தܦաΛදࣔ͢ΔͷͰɺෳͷ assertXXX()Λ·ͱΊΒΕΔ •
assert obj.foo().bar().equals(“baz”)
How it works
JavassistʹΑΔόΠτίʔυૢ࡞ • $assertionsDisabledΛৗʹfalseʹ͢Δ • assertจʢ͕ίϯύΠϧ͞ΕͨόΠτίʔυʣ Λݟ͚ͭͨΒपลใΛूΊͯจࣈྻΛੜ ͢ΔίʔυΛૠೖ͢Δ • field access
/ method calltry-catchͰғΜͰ NPEΛΩϟονˍपลใΛ༩ͯ͠re-throw
՝ • Ճใ͕ଟ͗͢Δ • ͍·ϩʔΧϧมΛͯ͢dump͍ͯ͠Δ • SpockͷΑ͏ͳࠩදࣔΛ͍ͨ͠ • ͍·commonsͷToStringBuilderΛ͍ͬͯΔ •
JavassistͰେྔͷίʔυΛॻ͘ͷਏ͍ͷͰɺग़ྗ ϑΥʔϚολΛผʹ࣮͢Δඞཁ͕͋Δ
We are hiring! https://info.cookpad.com/jobs/
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ https://github.com/gfx/android-power-assert-plugin ਓபืूத