2017年のKPT

あけましておめでとうございます。 遅くなったけど2017年のKPTを書きました。 今年もよろしくお願いします。

  • K
    • 働き方の定期的な見直し
      • 3年間いた教育スタートアップからFintechスタートアップに転職
      • 理由
        • 創業時からいるので、これ以上温室にいると腐ってしまいそう
        • 資本力、規模感がないと裁量があっても技術的に得るものが少ない
        • 市場規模が小さいので事業の将来性を信じられなくなった
        • バス係数が高まり自分が抜けてもOK
      • 転職先
        • Twitterでおかげでいくつもお声がけ頂いて驚いた
        • 転職ドラフトも試したけど、結局リファラルで転職
        • 外国人多、エンジニアに優しい文化で働きやすい
        • ドメイン知識が0からでドメイン駆動設計不可能。勉強中
        • goとswiftを書けていて満足(goはまだ慣れない..)
    • 勉強会の開催
      なんだかんだで主催は一番勉強する。続けたい。
      • swift実践入門読書会
        • 最終日に石川さんが来てくれたし最高さしかない
      • kotlinスタートブック読書会
        • ゆっくりペースなのでまだ終わらない.. 引続き頑張る
      • 登壇(1件のみ)
        • マモリオ社にて、UnitTestの基本について話した
        • 登壇駆動もあるけど読みたい本多いし手を動かしてたいので、今後も登壇はあまりしない方針
    • 手を動かすこと
      • 仕事ではkotlin+spring bootでapi書けたので良かった
      • 個人iOSアプリのリリースの実績解除
      • 自然言語処理100本ノック(途中で面倒になってやめてしまった.. )
      • SwiftMojiのswift4化(ただのStringの拡張、学習用)
      • A Tour of GoとGo Web Examplesの写経 https://gowebexamples.com/
      • 開発を効率化するテストのデザインパターンの写経(今年一番ためになったかも)
    • 読書
    • Podcast
      • 熊谷と繪面がプログラミングコードの内から聴こえてくる声に耳を傾けて楽しむラジオ
      • nextstep.fm
      • rebuild.fm
      • The Talk Show With John Gruber
      • Takram Cast
  • P
    • 転職を子供が生まれるのに上司に切り出すとバタバタする
    • 転職を12月にすると確定申告をすることになりがち
    • 転職時にいい感じのポートフォリオがなくてバタバタする
    • 新しい技術をあまり試せていない
    • 自分は10人以下の熱量が高すぎるスタートアップに向いていない(淡々と良いものを作っていく方があっている。)
    • 自主管理マンションの理事2年目、月10時間程とられる。年間1万円くれるので時給83円なので辛い。
  • T
    • 個人でWeb/iOSアプリを2本以上リリースする
    • コンさんのスタートアップは社会問題を解決するべきという言葉が引っかかっている、何か作りたい
    • 本を50冊読む(マクロ経済学認知心理学ファシリテーションとかもう少し視野を広げたい)
    • 変なタイミングで転職しない
  • Not T(やらないこと)
    • 資格の取得
      • セキュリティ関連の資格に興味があるが手を動かせる事を優先する
    • Androidアプリの開発
      • 単純にあまり興味がないので必要最低限に
    • 英語の積極的な勉強
      • 困らない位は出来ていると思うので困るまではこれくらいで
    • 積極的なOSS活動
      • ちょっとしたツール位は個人アプリ開発の延長で作るかもだけど、自作ライブラリの為の開発はしない

iOS Test Night #4に参加しました

こんにちわ or こんばんわ iOS Test Night #4にブログ枠で参加させて頂きました!
これはその際のレポート記事となります。 testnight.connpass.com

イベントの目的

次のような目的で開催されるイベントとの事です。

本イベントはiOSにおけるテスト周りに関する知識を共有することを目的としたものです。

テスト周りに関するものであれば何でもOKです。 例をあげるとすれば以下のようなものなどです。

テストをはじめてみた&ここで苦労した このテスティングフレームワークはここがハマりどころ テスティングフレームワークをこうやって使い分けている こうやって工夫してテストしている オレが考えるiOSアプリにおけるテスタビリティの高い設計 弊社のCI/CD環境はこんな感じにしている WWDC2017前に盛り上がっておきたい 上記のような内容について「話したいことがある!」「聞いてみたい!」という方は是非参加してください。

発表 (15分枠)

AppiumからXCUITestに変え、そのためにSwiftを学び始めた話 nemoto_tadashiさん

speakerdeck.com

  • E2Eテストの自動化、リグレッションテスト自動化の話
  • iOSは初心者だが、webの知見を持ってAppiumを使ってはじめはtry
  • 結局AppiumからXCUITestに変えた↓理由 
    • Accessibilityを付与するレポジトリとテストを書くレポジトリが分かれていた
    • 動作速度、安定性(xcunittest-driverは当時安定していなかった)動作が遅いと書くのも遅くなる
  • waitもPage Object Patternを使って安定実行出来た
  • 1ヶ月半でE2Eテストを実装した
  • リグレッションテストの50%自動化
  • Xcodeのコマンド、pxctest, bluepill, snapshotなど学べたの良かった
  • 良かったこと
    • 自動化にかかる工数感がイメージできるようになった
    • 違うチームにも導入の検討が波及
    • QAエンジニアもUIテスト自動化に興味が出てきた
    • QAテスターがメンテできるようになる事が近い目標 (多く賛同を得られているエンジニアがドキュメントを整備中)
    • 中途半端ではなく、一定のレベルまでUITestを行ったことで知見が溜まった

「XCUITestする時のTIPs 〜あなたを助けるXCUITestへ〜」PoohSunnyさん

スライドはUPされ次第追記します。

speakerdeck.com

  • Selenum実践入門のレビューワーの方
  • UIテストを実践しているか?1割にも満たない挙手。したらいいじゃんは3割程度挙手
  • appiumはtoo matchだった
  • appiumはiosの仕様に振り回される可能性があり様子見
  • どのくらいUIテストしたらいいの?
  • 楽しいから書いてしまうが、半年後にメンテで死ぬ
  • 最初はスモークテストが良い
    • 煙がでない最低限のテスト
    • 基本的な導線の確認
    • タウンワークでユーザーが募集を検索して応募するなど
    • 重要な所、利用規約のリンクなど
  • テストの数は多くない
  • 旨味があって変更コストが低い部分に対して書く
  • UIテストはフラジャイルになりやすい
  • Page Object Patternを利用
  • テストシナリオとボタンなどのコンポーネントを切り離す。変更容易性が高まる
  • よくある失敗。このテスト何しているか分からない
  • テスト用のメソッド名を全て日本語にする。(testのprefixは残るが)
  • given, when, thenを意識する
  • 4phase testが知られているが、テストがこけた時に事後状態を残した方が分かりやすいのでteardownいらないという話も。なので3Aでも
  • 自分たちを助ける為にテストを書くはずが苦しめがちなのを助ける3tipsでした

発表 (10分枠)

「Pull Request時の画面差分取得の自動化」duck8823さん

www.slideshare.net

  • storyboardなどの差分確認を簡単に
  • スクリーンショットリポジトリで管理
  • fastlane snapshotを使った
  • dangerで画像の有無を確認
  • imageMagickで画像の比較
  • compositとidentifyコマンドで比較できる。真っ黒なら差分なし
  • Github Pull Reuest上で確認できること
    • 2-up(画像を横に並べる)
    • swip (画像を重ねてswipeして少しづつ差分確認可能)
    • onion skin (画像を重ねて透明度を重ねて確認)
  • Dangerが.xib, .storyboard, .stringsに変更が合った場合に動く
  • コミットしただけでlaneが実行される
  • ステータスバーは非表示に(時間がかわるので)
  • webviewやアニメーションは課題。(アプリに関係なく変わったり、タイミングが難しいもの)

「UIテストの実行時間の短縮の方法」としさん

www.slideshare.net

  • UIテスト自体導入している所が少ないが、近い将来出てくる実行時間という課題
  • bluepillは複数シミュレータでのテストを同時に実行できる
  • テストの数をシミュレータ数で割り切れる数でやると速い 、割り切れないと+1つシミュレータが立ち上がってしまうので
  • bluepillはテストケースを分割できる
  • pxctestはosカバレッジを取りたい時
  • スピードを取りたいならbluepill
  • テストの実行時間のバラ付きをなくしたい
  • テストの追加、削除に対応している、自動テストをサポートするサービス。ポメラニアン。SWET製
  • 不安定なテストとの検出と並列実行計画の最適化

発表 (5分枠)

「Stubる 〜Mockingjayを使ったHTTPクライアントのテスト〜」ktanaka117さん

www.slideshare.net

「テストコードをアプリケーションコードと同じ階層に置きたい」kikuchyさん

www.slideshare.net - 間違ってapplicationのtargetにテストコードを入れってしまって人知を超えた目grep力が必要になる
- コマンドラインで間違えて入れてしまったファイルをtestターゲットに再配置するツールを作った
- GitHub - kikuchy/lodger: Retargeting test source files from production to test at Swift Xcode project

「開発で学んだUnitTest 5つのTips」ぐりーんさん

Quickの利用が前提です。
5つのTipsを初心者がUnitTestに取り組みフィードバックを受けた感想を発表します。

  1. GivenWhenThenを意識する
  2. itの中にはexpectのみにする
  3. 1つのitに対して1つのexpectにする
  4. テスト出来る設計にする (DIなど)
  5. Mockを利用し通信でのレスポンスをテストする (テストを短く、また堅牢する為)

「実践 bluepill」Noritaka Kamiyaさん

speakerdeck.com

  • bluepillを前回のtest nightで聞いて早速試したがいきなりCase Sensitive File Systemでは動かなかった
  • 結果bluepillのコントリビューターとなった
  • テストケースが多いとハングする (1000で試した)これもpull req準備中
  • fastlaneでscan build_for_testing trueが出来る
  • waitが挟まるテストが多い場合に効果がある感じ
  • メモリは沢山欲しい
  • Travis CIなどの貧弱な環境だとしても効果はありそう
  • BluepillはObjective-C
  • Bluepill is a tool to run iOS tests in parallel using multiple simulators.

「テストを書かない言い訳をした結果」takasekさん

speakerdeck.com

  • テストを書かない言い訳をさせてくれ(前回発表資料)
  • 煽ったタイトルなどの結果 114のブックマークを獲得
  • テストファイルへの距離が遠い
  • ファイルを並べておく?レガシーコード改善ガイドにのっている方法
  • ショートカットキーで対応飛びやすくなる(Command + Shift + O)など
  • 足りない Testへのトグルが無い
  • Testコードへの切り替えが出来るツールをapplescript + Xcode Custom Behaviorsで作った
  • Xcode BehaviorsのCustomでHot KeyをTriggerしている
  • Xcode Source Editor Extensionではファイルをまたぐ操作はできなかった

感想

今回はUIのテストに関する話が多かったように感じます。appiumなのかXCUITestなのかの議論も以前より進んでいて、かけるコストをに見合う部分で書いてみたいと思いました!参加させて頂き有難うございました!

参考リンク

Page Object Pattern - Selenium

Appium

Selenium

Danger

Mockingjay - Github

Bluepill - Github

tddbc/swift_quick - Github

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Behold: Image view modes(2-up, Swipe, Onion Skinについて) - Github