エンジニアの小林と申します。
LIFULL HOME'S の横断領域の開発を担当しています。
私たちの開発しているLIFULL HOME'Sでは、A/Bテストの実施によって市場学習(≒PDCA)の回数を増やし、より良いプロダクトを作り上げることを目的として、日々多くのA/Bテストが実施されています。
しかしながら、いくつかの問題があります。
今回はLIFULL HOME'SにおけるA/Bテストの成熟度と課題、そして現在の取り組みをご紹介します。
続きを読むエンジニアの小林と申します。
LIFULL HOME'S の横断領域の開発を担当しています。
私たちの開発しているLIFULL HOME'Sでは、A/Bテストの実施によって市場学習(≒PDCA)の回数を増やし、より良いプロダクトを作り上げることを目的として、日々多くのA/Bテストが実施されています。
しかしながら、いくつかの問題があります。
今回はLIFULL HOME'SにおけるA/Bテストの成熟度と課題、そして現在の取り組みをご紹介します。
続きを読むこんにちは、グループデータ本部データサイエンスグループの清田です。
5月28日から31日にかけて静岡県浜松市にて開催された人工知能学会全国大会(JSAI 2024)に参加してきました。
LIFULLでは、今年もシルバースポンサーとして協賛しております。
今年は、学会理事および副実行委員長として運営にも関わっていましたので、舞台裏の部分も少しお伝えします!
なお、昨年熊本で開催されたJSAI 2023の様子も書かせていただいています。
続きを読むこんにちは、エンジニアの中島です。
この記事は2024年7月のLIFULL社でのアクセシビリティ改善およびやっていき活動の報告です。
この活動報告は月次で出すかもしれないし出さないかもしれないくらいの温度感で運用されています。
続きを読むグループデータ本部データサイエンスグループの嶋村です。
データサイエンスグループが主催でデータサイエンス系の自社イベント『LIFULL AI Hub 100 ミニッツ #2 「ファクトブック」』を開催しました。第1回目の『LIFULL AI Hub 100ミニッツ #1 「LLM(大規模言語モデル)の研究開発」』に引き続き、オフライン・オンラインともに盛況となり、今回も講演を聴講していて学びがありました。当日は、X(旧Twitter)でも実況しておりましたので、当日の様子が少しでも伝わればと思います。
主催のデータサイエンスグループはグループデータ本部配下の研究開発組織になります。グループデータ本部は、LIFULLグループで生まれる新たなデータを安全かつ効果的に活用できるようにし、事業の変化と持続的な成長を促進することを目指している組織です。その中で、データサイエンスグループは「活用価値のあるデータを創出」し、「データを活用した新たな機能やサービス」の研究開発に取り組んでいます。
今回のテーマである「ファクトブック」は、以前本ブログでも記載した「LIFULLファクトブックで目指す真のドメイン知識獲得」に関する発表となります。弊社LIFULLの事例だけではなく、先行してファクトブック活動を続けられている東北一円にドラッグストアを展開する薬王堂さまの事例に関する発表もありました。
続きを読むこんにちは、エンジニアの中島です。
この記事は2024年4月〜6月のLIFULL社でのアクセシビリティ改善およびやっていき活動の報告です。
この活動報告は月次で出すかもしれないし出さないかもしれないくらいの温度感で運用されています。
続きを読むQAの山下です。
QAグループという名前で横断組織として手動&自動テストやツール開発、プロセス改善など仕組みづくりに取り組んでいます。
今回は LIFULL HOME'S の開発で実行されているE2Eテスト(リグレッションテスト)をシフトレフトし、実行時間を80%短縮した話を紹介します。
以下の図の通りです。
Git-Flowをベースとしたフローに則り開発されていたリポジトリで、developマージ後に実施されていたE2Eテストの9割をPR上で実⾏できるようにシフトレフトしました。
コードのpushからE2Eテスト完了まで5~8分で完了します。
今回のPJの紹介にあたって前提となる情報を記載します。
本番相当の環境で、ビジネスプロセスを最初から最後まで実⾏するテストの⼀種です。(ISTQBより)
LIFULL HOME'Sでは内製の⾃動テストフレームワーク「Bucky」を使ってE2Eテストを実施しています。
ソフトウェアの変更されていない領域の欠陥を検出するためテストの⼀種。(ISTQBより)
Aの機能に手を加えたのにBの機能でバグが出た!のような現象を検知するテストです。
テストスコープは以下です
テストおよび品質保証の活動の実施を、ソフトウェア開発ライフサイクル内で可能な限り早く⾏うためのアプローチ。(ISTQBより)
今回はdevelopブランチで実施されていたテストをPR上で実行するようにしたことでシフトレフトを実現しています。
シフトレフトするメリットは以下が挙げられます
今回実施した対象のリポジトリの規模を記載します。
ここまではこのPJに関する前提状況を書きました。ここからはPJの中で実施したことを時系列順で書いていきます。
前述したdevelopブランチマージ後に実施していたテストは、合計400ケースほどありました。これらをそのまますべてシフトレフトすると以下の懸念がありました。
※後述のリファクタは保証したい内容は変えずにシナリオを変えることを指してます。例えば元々1ケース1アサート*2 だったシナリオを1ケースで2アサーションするように変更する等です。
これらの問題を解決するため、テストの再設計を実施しました。結果としてテストケース数を3割削減、またテストの実行時間も削減できました。
この項目で実施したことは以下です。
本題とは離れるので詳しくは割愛しますが、HelmにおけるChart Hooksを編集し、前述のEEデプロイ後にEEに対して E2Eテストを実行するようにデプロイパイプラインを修正しました。
ここまでで「リモートブランチにPushされる度にPR上でE2Eテストが実行される」状態にはできました。しかし作ったら終わりではありません。ここから運用課題とどう向き合ったのかを書いていきます。
挙がっていた運用課題は以下です。
それぞれについて問題の概要、検討事項、解決法を書いていきます。
現状E2Eテストが完了した際に以下のようなコメントがされます。
画像
開発している時には気づけなかったのですが、コミット数が多くなってくるとコメントがその分量産されPRの見渡しが悪くなるとのフィードバックをもらいました。
「PR内に存在する過去のE2E結果コメントを削除→新規のテスト結果コメントを投稿」の処理に変えれば良いのでは?と考えました。
懸念としては、PR内で過去のテスト結果を見ることができなくなることでした。
しかし
ので問題無しと判断しました。
以下の処理に変更しました。
このE2EテストはCIとしてPushの度に実行されます。またリグレッションテストとしての役割も持っているので、当然全てのテストが成功してからdevelopブランチに反映されるべきです。
そのため導入時はテストが100%成功していないとマージができないようにしていました。
しかし、このルールでは開発者体験が悪化してしまいました。原因は以下です。
マージ要件に閾値を設ける手段を取りました。
具体的には自動テストのpass率が90%を超えている場合にはマージ可能としました。
チーム内で話し合った結果、避けたかったこととしては以下が列挙されました。
上記の「バグの流出」と「E2Eテストの形骸化」は自動テスト成功率を100%を強いることで解決できますが、3つ目に関しては自動テスト成功率を100%を強いると起こり得てしまう問題です。
過去の自動テストの結果を見て、flakyテストとABテストで期待していないパターンを引いた場合でも90%は下回らないということが分かりました。
そのためマージ要件をE2Eテストのpass率100%→90%に変更しました。
テストの再実行を行いたい場合、以下の手順を踏む必要がありました。
特にコードの修正をしていない場合の再実行では、E2Eを再実行したいだけのためにEEの再構築も行わなければなりません。
EE再構築からテスト完了まで10分を超えることもあり、これはユーザーにとってストレスでした。
GitHub Actionsのworkflow_dispatchを使い、E2Eテストの再実行を楽にしました。
以下の流れでテストの再実行が実施されます。
これによってコードの変更をしていない場合でのE2Eテスト再実行の手間が軽減され、時間としては10分→5分ほどにまで削減できました。
シフトレフトすることでE2Eテストの実行時間を80%短縮することができ、早期にフィードバックができるようになりましたが、まだまだ改善できる部分があります。
e2eテストの安定化
現在はUIの変更や改修に対して脆いテストが存在しています。これを解消するためにdata-testidのような自動テスト用の属性をプロダクトコードに導入し、テストの安定化を図りたいです。
アラートの仕組み化
前述の通り閾値を設けてマージの可否を決めています。そのため本来メンテが必要なテストケースが放置されてしまう可能性があります。
現在はQAGが定期的にテスト結果をモニタリングし、担当部署にアナウンスしていますが今後はアラートの仕組みを導入して一定の条件で担当部署に通知するようにしたいです。
ABテストに対応するためのcookie固定化
前述の通りLIFULL HOME'Sでは多くのプロジェクトが並行して進んでおり、ABテストも数多く存在し、この数に比例して「自動テストで期待していないパターンを引いてしまう」という問題が発生しやすくなります。
これを解消するために「e2eテストからのリクエストだった場合はABテストのcookieを固定化する」ような仕組みを開発者と協力し導入したいです。
これからもQAとして品質改善、開発スピード、開発者体験向上に貢献していきたいと考えています。
グループデータ本部データサイエンスグループの嶋村です。
グループデータ本部は、LIFULLグループで生まれる新たなデータを安全かつ効果的に活用できるようにし、事業の変化と持続的な成長を促進することを目指している組織です。その中で、データサイエンスグループは研究開発組織として、「活用価値のあるデータを創出」し、「データを活用した新たな機能やサービス」の研究開発に取り組んでいます。
事業を革進し続けて様々な社会課題を解決していくために、データを最大限に活用できる状態にしていきたいと考えています。その一環として、不動産情報・住宅サイトであるLIFULL HOME'Sに掲載される不動産広告画像を定量的に評価(数値化)し、その評価結果をプロダクトの改善に活用できる状態にするための取り組みを続けています。
2024年4月27日に弊社が協賛している「第88回 Machine Learning 15minutes! Hybrid」が開催され、今回の取り組みについて登壇をしました。
続きを読む