Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
誤配送の原因を作ったのは私です
Search
虎の穴ラボ株式会社
August 18, 2022
Technology
1
120
誤配送の原因を作ったのは私です
エンジニアの失敗学 LT会 - vol.2のLT資料になります
虎の穴ラボ株式会社
August 18, 2022
Tweet
Share
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
1
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
200
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
190
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
220
虎の穴ラボスキルアップ支援制度の利用例
toranoana
0
660
【虎の穴ラボ Tech Talk #1】Ansible Lintの警告への対処
toranoana
1
190
【虎の穴ラボ Tech Talk #1】虎の穴ラボの利用技術紹介
toranoana
0
250
サークルポータルを支えるフロントエンドアーキテクチャの選定
toranoana
1
290
フレックスタイム制度の活用例
toranoana
1
1k
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
130
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
630
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
800
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
380
Lexical Analysis
shigashiyama
1
150
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
33
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Bash Introduction
62gerente
608
210k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
91
GraphQLとの向き合い方2022年版
quramy
43
13k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Music & Morning Musume
bryan
46
6.2k
Become a Pro
speakerdeck
PRO
25
5k
RailsConf 2023
tenderlove
29
900
Transcript
誤配送の原因を作ったのは私です 2022年8月17日 エンジニアの失敗学 LT会 - vol.2 浜田 拓実 1
自己紹介 現在の職業 とらのあなエンジニア 2022年6月から勤務 2 趣味 VRゲーム開発 バイクツーリング
ご注意 今回紹介するやらかしは 「前職での」 やらかしになります。 3
目次 4 ・システム概要紹介 ・失敗した内容と案件の紹介 ・発生した障害内容 ・対策 ・まとめ
システム概要紹介
前職で関わっていたシステム ・趣味の用品を扱うECサイトの運用、開発 ・年商100億円規模 ・一般会員、業者会員の大きく2種類の会員種別 ・会員種別で利用できる機能が異なるが サイト自体は一つのプロジェクトで管理 →業者会員のみ「掛売」といった機能を利用可能 →if(業者会員)で利用できる機能を分離 6
失敗した内容と案件の紹介
失敗の内容 大量の誤配送が発生!その原因を作ったのは 8 私です
失敗の背景 業者会員向けに大掛かりな機能改修を実施 ・出荷のタイミングをお客様が選択できるようにする。 ・更に、明細単位で自由に出荷タイミングを選択できるようにする 9 今までは「注文単位で商品が揃ったら出荷」で動いていたが・・・ その概念が崩れる
失敗の背景 - 今まで 10 注文 明細1 明細2 明細3 明細4 出荷
失敗の背景 - 新機能 11 注文 明細1 明細2 明細3 明細4 明細2
指示を待って出荷 明細3 送料無料金額で出荷 明細4 キャンセル 明細2 指定曜日に出荷 明細3 要件: お客様が望むがまま 自由自在に出荷の単位を 変更することができるように!
失敗の背景 - 今まで 12 ご注文内容 お届け先住所 ・〇〇〇〇〇〇〇 お客様情報 ・〇〇〇〇〇〇〇 お支払い情報
・カード xxxx-xxxx-xxxx-xxxx ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 掛売を利用している会員 →お届け先住所変更不可 それ以外 →お届け先住所変更可能
失敗の背景 - 新機能 13 ご注文内容 お届け先住所 ・xxxxxxxx お客様情報 ・〇〇〇〇〇〇〇 お支払い情報
・カード xxxx-xxxx-xxxx-xxxx ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 掛売を利用している または 新機能を利用している会員 →お届け先住所変更不可 それ以外 →お届け先住所変更可能
失敗の背景 エンジニア: 4名 開発期間: 約4ヶ月(要件定義〜リリースまで) 結合テストパターン:約400〜500 14 なんとかリリース
失敗の背景 もともと規模の大きいプロジェクトだったため、 運用部門含め、テストはしっかりやっていた 15 リリース当日は すべての機能が正常に機能
発生した障害内容
発生した障害内容 - 大量の問い合わせ 「指定した住所に届かない」という問い合わせ多数 17 決済画面で登録したお届け先住所が 注文データに反映されていなかった 一般会員限定で・・・
18 ご注文内容 お届け先住所 ・〇〇〇〇〇〇〇 お客様情報 ・〇〇〇〇〇〇〇 お支払い情報 ・カード xxxx-xxxx-xxxx-xxxx ご注文明細
・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 変更したのに 反映されない
発生した障害内容 今回の機能を利用した場合、お届け先住所の 指定は不可 という要件を組み込む 19 if文に条件追加するだけだよね・・・ と思っていた ご注文内容 お届け先住所 ・xxxxxxxx お客様情報
・〇〇〇〇〇〇〇 お支払い情報 ・カード xxxx-xxxx-xxxx-xxx x ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 新機能を利用する場合、変更不可
発生した障害内容 - 既存のプログラム if(!掛売){ お届け先住所 = 決済画面の住所 } else {
お届け先住所 = 会員登録時の住所 } 20
発生した障害内容 - 新仕様 if(!掛売 && 業者会員 && !新機能利用){ お届け先住所 =
決済画面の住所 } else { お届け先住所 = 会員登録時の住所 } 21
失敗の背景 - 仕様の比較 22 決済方法 新機能利用 通常 掛売 利用 未利用
業者会員 変更可能 変更不可 変更不可 変更可能 一般会員 変更可能 - - - お届け先の指定 - 新機能の仕様
失敗の背景 - 仕様の比較 23 決済方法 新機能利用 通常 掛売 利用 未利用
業者会員 変更可能 変更不可 変更不可 変更可能 一般会員 変更不可 - - - お届け先の指定 - 条件ミス
発生した障害内容 - 結果 一般会員について、お届け先住所の指定が不可に! 24 ・注文データを作るときの動き →会員登録時の住所で上書きされてしまった →決済画面の入力情報は保存してない お客様が入力した情報の復旧が困難
発生した障害内容 - 行った対応 25 ・早急なバグ修正 & リリース ・出荷済みのお客様に謝罪メール ・配送業者と連携し、配送をストップ ・MySQLのバイナリログを解析し
入力された住所をサルベージ ・未出荷データのお届け先修正
発生した障害内容 - 今回の敗因 if文の条件を1行変えるだけという油断から 丁寧なテストを行わなかった 26
対策
対策 以下2点の対策を実施 ・決済画面の入力内容を保存するテーブルを追加 ・Seleniumを利用した自動テストを導入 28
対策1:入力内容を保存するように 29 決済画面 ・xxxxxxxx ・xxxxxxxx ・xxxxxxxx 注文データ データ加工 入力データ 決済画面の入力内容を
そのまま保存
対策1の効果 ・データ復旧が容易に行えるようになった →決済画面の入力内容をそのまま保存 データ不正があれば、入力内容から復旧 30
対策2:ブラウザ自動テストの導入 31 ・一般会員 全決済、全入力項目の自動テスト ・業者会員 全決済、全入力項目の自動テスト
対策2:ブラウザ自動テストの導入 32 + + Chrome Driver ・ECサイトがChromeの利用を推奨していたため Chrome Driverを選択 ・Pythonは勉強のため選択
(ツール類は開発言語を自由に選択できた)
対策2:ブラウザ自動テストの導入 33 ①テストユーザーで ログイン ②商品画面で カートに投入 ③決済画面で 項目を入力し、決済 上記の一連の操作をSeleniumで自動化 決済パターン分繰り返すことで、
全ての決済方法が正常に動作することを確認
対策2:ブラウザ自動テストの導入 34 名前:xxxx xxxx お届け先:xxx-xxxx xxxx xxxx 合計金額:xxxx円 ポイント利用:xxx pt
決済方法:xxxxxxxx その他:xxxxxxxx 入力データ 名前:xxxx xxxx お届け先:xxx-xxxx xxxx xxxx 合計金額:xxxx円 ポイント利用:xxx pt 決済方法:xxxxxxxx その他:xxxxxxxx 注文データ 決済後、入力データ、注文データの突き合わせを実施 決済画面で入力した内容で、注文データが生成されたことを確認
対策2の効果 ・決済画面の全パターンの動作確認を自動化 →全パターンでテストを行うため、 決済機能の破損に気付けるようになった →対策1で追加した入力データ保存のテーブルを チェックし、入力内容の正当性チェックも自動化 35
まとめ
まとめ ・小さい改修でも必ずテストを →蔑ろにした結果、大きな障害につながった ・テストの自動化を検討する →サービスが大きくなると、 人力ですべてのパターンをチェックするのは難しい 37
まとめ 今回の失敗で得られたこと →自動テストの導入を行うことができた。 38 今後も失敗を糧にして より良い仕組みを導入していきたい!