Slide 1

Slide 1 text

MagicPod でテスト自動化エンジン と共に歩んだ一年 HIRAYAMA Ayumu ©︎ MagicPod Inc. 2024

Slide 2

Slide 2 text

今日お話しする内容 自己紹介 私から見た MagicPod 開発の実際 ©︎ MagicPod Inc. 2024 1

Slide 3

Slide 3 text

whoami 平山 歩(HIRAYAMA Ayumu) 元 Air Traffic Controller @ MLIT 管制塔でパイロットと無線交信 管制システムのパラメーター設定・ログの解析 Python でツール開発・機械学習 Raspberry Pi で NTP, GitLab, PyPI Mirror... 現 Software Engineer @ MagicPod 1 児の父 / フルマラソン / たまに AtCoder 気象庁「国内悪天予想図(FBJP)」を加工して作成→ ©︎ MagicPod Inc. 2024 2

Slide 4

Slide 4 text

なぜ MagicPod へ? 様々な技術にプロダクト作りを通じて触れてみたい ご縁があった のびのび開発できそう いきなり CEO @ 採用面接 ©︎ MagicPod Inc. 2024 3

Slide 5

Slide 5 text

中からみた MagicPod 人 真摯 of 真摯 みんななんかすごい 技術 広い:Web とテスト自動化技術の掛け合わせ 深い:低いレイヤーのソースコードを読み解く必要 裁量を持って開発できる ©︎ MagicPod Inc. 2024 4

Slide 6

Slide 6 text

この一年で開発したものの例 テストケースの一部を一時的にコメントアウトするための機能開発 モバイル端末の位置情報を変更するコマンドの開発 タッチ系コマンドを W3C プロトコルに準拠させる(for Appium 2.0) スワイプに再現性を持たせる方法の模索と実装 ©︎ MagicPod Inc. 2024 5

Slide 7

Slide 7 text

こんなこともしてました AppiumConf 2023 へセッション提案 残念ながら延期に OSS への貢献 Appium Chromium のバグを発見・報告 ©︎ MagicPod Inc. 2024 6

Slide 8

Slide 8 text

スワイプに再現性がない件 デバイスに投入するタッチ動作の始点・終点・移動時間が全て同じでも、移動距離にばらつ きがある状態 ©︎ MagicPod Inc. 2024 7

Slide 9

Slide 9 text

困ったことになる例 画像差分をとっても意味をなさない たまに探している要素を通り越してしまってテスト失敗 わかっていたこと ゆーっくり動かすといい(でもテストは遅くなる) ©︎ MagicPod Inc. 2024 8

Slide 10

Slide 10 text

先ずアプリより始めよ 比較検討のためにデータ採りがしたい ネイティブアプリを書きます 後で E2E テストを書いた時に楽できるよう、iOS・ Android で要素ロケーターを共通化 ^1 ©︎ MagicPod Inc. 2024 9

Slide 11

Slide 11 text

準備は続くよどこまでも 検討した方法を MagicPod に組み込んで検証するには、ビルドタイムがかかって辛い スワイプの実行と、実行後の移動量を取得するためだけのちっさい MagicPod が欲しい デバイスとのやりとりを WebDriverIO で書く サンプル取得用スクリプトを書く const samples: number[] = []; let previous = await getPosition(positionElementLocator); for (let i = 0; i < ATTEMPT_COUNT; i++) { await postActions(swipeAction); const current = await getPosition(positionElementLocator); samples.push(current - previous); previous = current; } return samples; ©︎ MagicPod Inc. 2024 10

Slide 12

Slide 12 text

ヒトの動きを見て真似る 人っぽく動かせば良いのでは? 画面に指が吸い付いている間はブレる余地が無い ゆっくり動かしてブレが減る=慣性スワイプの影響 が少ない 慣性スワイプを無くせば良いのでは? 様々な減衰関数を使って徐々に減速させてみる 単調増加な関数 減衰度合い 補間の滑らかさ 全移動時間 ©︎ MagicPod Inc. 2024 11

Slide 13

Slide 13 text

Eureka! 始点・終点を補間する減衰関数 。ただし は移動開始を 0、移動終了を 1 とした無次元 時間。 20ms 毎に補間 全移動時間 500ms f(τ) τ f(τ) = 1 − (1 − τ)α α = 7 ©︎ MagicPod Inc. 2024 12

Slide 14

Slide 14 text

そして回帰テストへ この良さげな手法を MagicPod に組み込む 減衰関数の量子化ロジックはちょっと複雑なのでユ ニットテストで担保 このアプリを用いた、スワイプ後の移動距離を測る テストを MagicPod で書く 日次テストで安定性を確認 iOS Simulator / Android Emulator 実機(BrowserStack / SauceLabs / Remote TestKit) ©︎ MagicPod Inc. 2024 13

Slide 15

Slide 15 text

To be continued... Android: ばらつき 0 を達成 iOS: 特定の条件下でまだ不安定 → 別の手法で克服済み この続きは MagicPod で。 ©︎ MagicPod Inc. 2024 14

Slide 16

Slide 16 text

まとめ MagicPod でソフトウェアエンジニアをすると、無比な冒険が待っています。 ©︎ MagicPod Inc. 2024 15