Upgrade to Pro — share decks privately, control downloads, hide ads and more …

出前館におけるFlutterの現在とこれから

 出前館におけるFlutterの現在とこれから

株式会社出前館

November 13, 2023
Tweet

More Decks by 株式会社出前館

Other Decks in Technology

Transcript

  1. 田中 優之 自己紹介 • Webサービス開発ののち, アプリ開発を担当 • ゲームアプリ • カーナビアプリ

    • 2020年4月 ~ 出前館を担当 これまでの業務経験 その他 • 料理 • 博士(ソフトウェア工学) 株式会社出前館 プロダクト本部コンシューマ部 アプリ開発グループ グループマネージャ 所属 • LINEヤフー株式会社(京都オフィス所属) • 株式会社出前館へ出向
  2. これまでの取り組み 主なアプリの利用技術変遷 現在の利用技術 • 加盟店向けアプリ Xamarin • ドライバー向けアプリ React Native

    • 出前館アプリ(エンドユーザ向け) React Native • 加盟店向けアプリ Xamarin Flutter • ドライバー向けアプリ React Native Flutter • 出前館アプリ(エンドユーザ向け) React Native Flutter
  3. これまでの取り組み 主なアプリの利用技術変遷 • 加盟店向けアプリ Xamarin • ドライバー向けアプリ React Native •

    出前館アプリ(エンドユーザ向け) React Native • 加盟店向けアプリ Xamarin Flutter • ドライバー向けアプリ React Native Flutter • 出前館アプリ(エンドユーザ向け) React Native Flutter 以降は出前館アプリ のお話をします
  4. 出前館アプリ Rearchitectの取り組み モチベーション => 組織が利用する技術を統一し、アウトプットを最大化 多くの議論をした結果, 組織として進む方向を決定 • 状況に応じたアプリエンジニアのアサインの柔軟さ •

    利用技術統一によるナレッジ共有の効率化 • Flutterへの期待, 新しい技術への好奇心 背景として, すでに他ア プリでFlutterを利用して いたことがあります
  5. 出前館アプリ Rearchitectの取り組み 非機能要件 • コードフリーズ期間を設けることは難しい • Flutter版の開発と既存React Native版への機能追加を並行する • Flutter版は韓国チームで先行して進め,

    徐々に日本チームも合流 • 日本側メンバーはFlutterをこれから学習する • 不具合なく, できるだけ早くリリースする 機能要件 • 既存React Native版と同様の機能を提供する
  6. 出前館アプリ Rearchitectの取り組み 非機能要件 特別なアプローチは なく, できることを一 つずつ実施 • コードフリーズ期間を設けることは難しい •

    => アプローチ:案件調整, リリーススケジュール管理, 差分管理など • Flutter版の開発とReact Native版への機能追加を並行する • => アプローチ:リリーススケジュール管理, 差分管理など
  7. 出前館アプリ Rearchitectの取り組み 非機能要件 特別なアプローチは なく, できることを一 つずつ実施 • Flutter版は韓国チームで先行して進め, 徐々に日本チームも合流

    • => アプローチ:勉強会, コードレビュー, お互いをリスペクトする姿勢 • 日本側メンバーはFlutterをこれから学習する • => アプローチ:勉強会, コードレビューなど • 不具合なく, できるだけ早くリリースしてほしい • => アプローチ:リグレッションテストの見直し, 社内Betaテスト実施など
  8. 出前館アプリ Rearchitectの取り組み 非機能要件 • Flutter版は韓国チームで先行して進め, 徐々に日本チームも合流 • => アプローチ:勉強会, コードレビュー,

    お互いをリスペクトする姿勢 • 日本側メンバーはFlutterをこれから学習する • => アプローチ:勉強会, コードレビューなど • 不具合なく, できるだけ早くリリースしてほしい • => アプローチ:リグレッションテストの見直し, 社内Betaテスト実施など 汎用性の高いアプ ローチのご紹介
  9. 出前館アプリ Rearchitectの取り組み これらも今後何かし らの形でアウトプッ トします [余談] 苦労したこと • React Nativeにおけるステート管理をFlutterらしいステート管理へ

    • TypeScriptからDartへの書き換え • 読み替えをする作業に苦労した • React Native(React)とFlutterの両方に精通することは容易ではない・・・ • 言語特性の違いへの対応 • 韓国チームがすでにFlutterでの開発に慣れていたことが助けになった
  10. 出前館アプリ Rearchitectの取り組み 非機能要件 • Flutter版は韓国チームで先行して進め, 徐々に日本チームも合流 • => アプローチ:勉強会, コードレビュー,

    お互いをリスペクトする姿勢 • 日本側メンバーはFlutterをこれから学習する • => アプローチ:勉強会, コードレビューなど • 不具合なく, できるだけ早くリリースしてほしい • => アプローチ:リグレッションテストの見直し, 社内Betaテスト実施など 本題に戻り, 汎用性の高いアプ ローチのご紹介
  11. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し • モチベーション • 先行事例(どんなベストプラクティスがあるか) • テストケースへの不安(ex. テスト観点の不足)

    • Rearchitectをしたプロダクトの品質保証(QA) • ソフトウェアが巨大になるにつれ, テストケースも増える => 全てのリグレッションテストをすることが困難に • テストの効果を引き出すためのアプローチ • Test Suite Minimization • Test Case Selection • Test Case Prioritization 何らかの指標でテスト ケースを評価すること で効果を引き出す Y. Shin, and M. Harman, "Regression testing minimization, selection and prioritization: a survey," Software testin g, Verification and Reliability, vol. 22, no. 2, pp. 67-120, 2013.
  12. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し Test Planning Test Analysis Test Design Test

    Implementation Test Execution • スケジュール立案 • コスト試算 • ページ/機能単位 でスコアリング • スコアリング結果 を用いた優先度決 定 • ハイレベルテスト ケース作成 • テスト観点すり合 わせ • テストケース実装 • テストケース修正 テスト実施 次のページ/機能を 見直し
  13. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し Test Planning Test Analysis Test Design Test

    Implementation Test Execution • スケジュール立案 • コスト試算 • ページ/機能単位 でスコアリング • スコアリング結果 を用いた優先度決 定 • ハイレベルテスト ケース作成 • テスト観点すり合 わせ • テストケース実装 • テストケース修正 テスト実施 次のページ/機能を 見直し 以降は赤枠内の作業 詳細をご説明します
  14. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し Test Planning Test Analysis Test Design Test

    Implementation Test Execution • スケジュール立案 • コスト試算 • ページ/機能単位 でスコアリング • スコアリング結果 を用いた優先度決 定 • ハイレベルテスト ケース作成 • テスト観点すり合 わせ • テストケース実装 • テストケース修正 テスト実施 次のページ/機能を 見直し
  15. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Analysis • 成果物:ページ/機能単位のスコアリング結果 【評価式】 スコア =

    係数1 * metrics1 + 係数2 * metrics2 + 係数3 * metrics3 Page/Fe ature Incident Probabil ity Compl exity Frequen cy of use Result 店舗 ページ 1 2 2 💡 店舗一 覧ペー ジ 2 2 2 💡 ・・・ ・・・ ・・・ ・・・ ・・・ 集計結果 例 metrics1: Incident Probability(過去障害の分析結果利用) metrics2: Complexity(コード解析結果を利用) metrics3: Frequency of Use, (主なユースケース結果を利用)
  16. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Analysis • スコアリング:Incident probability Incident/Bug Page/Feature

    Importance 20230413_xx機 能不具合報告書 • 店舗ページ • レビュー表 示機能 ☆ 20230713_QA_xx 機能不具合チ ケット • 店舗一覧 ページ • 店舗カード ☆☆ ・・・ ・・・ ・・・ 例 過去資産を生かし, 不具 合が発生しやすいペー ジ, 機能をリスト化 Page/Feature Importance 店舗ページ ☆ 店舗一覧ページ ☆☆ ・・・ ・・・ スコアリング結果例 • 3段階で評価 • ☆:発見後, 数日以内に修正リリース • ☆ ☆:発見後, 翌日以降に修正リリース • ☆ ☆ ☆:発見後, 即時修正リリース • 過去の障害, QA時のバグ情報を参照 • 不具合報告書 • QA時のバグチケット
  17. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Analysis • スコアリング:Complexity Page/Feature Importance 店舗ページ

    ☆ 店舗一覧ページ ☆☆ ・・・ ・・・ 例 扱う状態の多いと複雑 さは増していく • 3段階で評価 • 状態の多寡でスコアリング • Dart Class Diagram Generatorを利用 • クラス図を参照し, 相対的にスコアを決定 • 手順1: 基準値の決定 (任意のPage/Featur eのImportanceを決定) • 手順2: 基準値を参照し, 他Page/Feature のImportanceを決定
  18. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Analysis • スコアリング:Frequency of use ユースケース

    Importance 関係する Page/Feature 新規会員が登録し て注文をする ☆ • 会員登録ページ • ・・・ 既存ユーザがクー ポンを使いクレ ジットカード決済 で注文する ☆☆ • 店舗一覧ページ • クレジット決済 機能 • ・・・ ・・・ ・・・ ・・・ ユースケース例 Page/Feature Importance 店舗ページ ☆ 店舗一覧ページ ☆☆ ・・・ ・・・ スコアリング結果例 基準値を参照し, スコアリ ング • 3段階で評価 • ユースケースを用いたスコアリング • 手順1: ユースケース作成 • 手順2: ユースケースの重要度決定 • 手順3: 基準値を参照し, 各ページ, Featureをス コアリング
  19. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Analysis Page/Fea ture Incident Probabilit y

    Complex ity Frequenc y of use Result 店舗ペー ジ 1 2 2 💡 店舗一覧 ページ 2 2 2 💡 ・・・ ・・・ ・・・ ・・・ ・・・ 算出結果 例 弊社のケースでは, 納得 のいく順序になってい ました • 各ページ, 機能ごとにスコアリングができ, 優先度付ができるように • 重要または不具合の出やすい機能, ページ から順にテストケースの見直しが可能 • 成果物:ページ/機能単位のスコアリング結果 【評価式】 スコア = 係数1 * metrics1 + 係数2 * metrics2 + 係数3 * metrics3 metrics1: Incident Probability(過去障害の分析結果利用) metrics2: Complexity(コード解析結果を利用) metrics3: Frequency of Use, (主なユースケース結果を利用)
  20. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し Test Planning Test Analysis Test Design Test

    Implementation Test Execution • スケジュール立案 • コスト試算 • ページ/機能単位 でスコアリング • スコアリング結果 を用いた優先度決 定 • ハイレベルテスト ケース作成 • テスト観点すり合 わせ • テストケース実装 • テストケース修正 テスト実施 次のページ/機能を 見直し 優先度付したリスト を参照し, 順番にテス トケースを見直す
  21. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Design, Test Implementation • 成果物: UML

    Testing Profile(UTP), テストケース • 進め方: 優先度順の高いページ, 機能に関するハイレ ベルテストケース, テスト観点のすり合わせを行う • 毎週1回の定例実施 w/QAチーム • UTPを用い, 認識合わせ(主にテスト要求とテス ト要件) • テストケースの抜け漏れがあれば修正
  22. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Design, Test Implementation • 成果物: UML

    Testing Profile(UTP), テストケース UTP利用は初トライで したが難解でし た・・・ <Test Objective> クーポン適用時の表記仕様との 合致を確認する <Test Requirement> クーポンが正しく適用される <Test Requirement> 表示される値引き内容が, クー ポン設定内容と合致する <Test Requirement> 無効なクーポン適用時, アラー トダイアログが出る クーポン適用表示テスト UTPでテスト要求をモデル化した例
  23. 出前館アプリ Rearchitectの取り組み リグレッションテストの見直し: Test Design, Test Implementation Test Planning Test

    Analysis Test Design Test Implementation Test Execution 約3ヶ月ほど優先度順 に見直しを実施 6月 9月 5月 11月 チームビルディング QA開始 リリース
  24. まとめ 主なアプリの利用技術変遷 • 加盟店向けアプリ Xamarin • ドライバー向けアプリ React Native •

    出前館アプリ(エンドユーザ向け) React Native • 加盟店向けアプリ Xamarin Flutter • ドライバー向けアプリ React Native Flutter • 出前館アプリ(エンドユーザ向け) React Native Flutter
  25. まとめ 非機能要件 • コードフリーズ期間を設けることは難しい • Flutter版の開発と既存React Native版への機能追加を並行する • Flutter版は韓国チームで先行して進め, 徐々に日本チームも合流

    • 日本側メンバーはFlutterをこれから学習する • 不具合なく, できるだけ早くリリースする 機能要件 • 既存React Native版と同様の機能を提供する 出前館アプリ Rearchitectの取り組み
  26. まとめ ~リグレッションテストの見直し~ Test Planning Test Analysis Test Design Test Implementation

    Test Execution • スケジュール立案 • コスト試算 • ページ/機能単位 でスコアリング • スコアリング結果 を用いた優先度決 定 • ハイレベルテスト ケース作成 • テスト観点すり合 わせ • テストケース実装 • テストケース修正 テスト実施 次のページ/機能を 見直し 出前館アプリ Rearchitectの取り組み