#あすみかんの上にあすみかん

#たのしいことしかかかないことをここに決意します

テスト品質を向上させよう! 〜 アンチパターン回避メソッド 〜 をみたよ / asumikam #phpcon_odawara Advent Calendar

adventar.org

これは、asumikam #phpcon_odawara Advent Calendarの14日目の記事です🎄 本日は「テスト品質を向上させよう! 〜 アンチパターン回避メソッド 〜」の感想を書いていきます!

💡 トーク概要・動画 fortee.jp

🤖 logmiさんのまとめ記事

何をテストするか・どのような状況とシナリオか・期待される結果は何か 明日からでもすぐにできるアンチパターン回避メソッド | ログミーBusiness テストカバレッジが100%でもそれが意味のあるテストかは断言できない Mutation Testでテストコード自体の検証をしよう | ログミーBusiness

Kanonさんの登壇が文字起こしされています、ぜひみにいってください🌸

感想

テスト品質を向上するための、「明日からすぐにできること」「継続的に取り組めること」「さらにその先のお話(Mutation Test)」というお品書きで登壇していただきました。 テンポよく基本から応用まで話してくれていて聞きやすかったです。

  • 明日からすぐにできること
    • テスト名を気にしよう: 「XはYのときZ」
      • テスト名めっちゃ大事!!端的に仕様を表現できるとよいですよね
      • 軽視されそうがち...だが、ちゃんとやるとよいぞ!と話してくれるところに信頼感があります
    • AAAパターンを表明しておく
      • 意外にこれめっちゃ大事なんですよね〜わかる〜
      • 少しの努力で視認性めっちゃ上がりますもんね
    • パラメタライズテスト
      • いわゆる dataProvider 適切に使おうね、ですね
    • エラーはキャッチせず、エラーを期待する
      • テストコード中に、willThrowException を使わずに try-catch しているのをみかけた、という話
      • 流石にこれはみたことないが、確かに知らないとこうなってまうか・・・!w 原体験を登壇に落とし込んでくれるのありがたい
  • 継続的に取り組めること
    • 適切なコードカバレッジ
      • 高すぎても低すぎてもダメで、ちゃんと閾値きめて計測しようね、という話
      • 高すぎてもダメ、本当にそうなんですよね〜、それはHowなんよ、ですね
    • カバレッジレポートを精査する
      • カバレッジの最終の数字が良くても中身がダメなこともあるよね、という話
        • それはそう
  • さらにその先のお話(Mutation Test)
    • わざと"ダメなコード"に置き換えて、ちゃんと失敗するのか?をみる手法
      • Killed / Survived

ぺちおだの登壇だとMutation Testはさわりだけだったので、他のアウトプットもdigってきました⚒️

speakerdeck.com

まずは、この前のYAPC::Hakodateのやつです。「こんな感じでやるんだよ〜」と「こんな課題感と戦っていたよ〜」を話してくださっています。 お〜、マジでバグを埋め込んでくれるんだ、すげ〜。賢い・・・! まあ、そうなったら遅くなりそうだわな・・・という気持ちにもなりました。

Stryker Playground

▲ Playgroundも見つけたので遊んでみました。 100 + 0 = 100というテストケースだとSurvivedしちゃいますね。たしかに。

Stryker Playground

100 + 30 = 100というテストケースに手元に書き換えたらKilledになりました!おもしれ〜〜

zenn.dev

そして、調べれば調べるほどKanonさんのアウトプットが出てくる!えらすぎる!! PHPでの使用感はこんなかんじなのかー、がわかりました。

Kanonさん、登壇ありがとうございました

さまざまな視点でのテスト品質の向上に取り組んでいることが伺えて、👏偉業👏というきもちになりながらみさせていただきました!! Mutation Test、ちゃんと運用に載せてうまく使ってそうだし、毎回ちゃんとアウトプットしてるのも素敵.......

登壇ありがとうございました!!あと、結婚祝いのビールも😆🍺!!!ww