paint-brush
行方不明のお金のケース: アプリのバグを追跡するために探偵スキルをどのように使用したか 🔍@mikeynyzw
12,226 測定値
12,226 測定値

行方不明のお金のケース: アプリのバグを追跡するために探偵スキルをどのように使用したか 🔍

Michael Nyamande5m2023/01/10
Read on Terminal Reader

長すぎる; 読むには

人気のある送金 Android アプリが、特定の地域への送金に失敗していました。アプリは通常のネットワーク リクエストを行っていましたが、問題の原因を示す兆候はありませんでした。根本原因を突き止めるには、私のすべての探偵スキルと、少しの運が必要でした。
featured image - 行方不明のお金のケース: アプリのバグを追跡するために探偵スキルをどのように使用したか 🔍
Michael Nyamande HackerNoon profile picture

10 万人以上のユーザーをサポートする人気の送金アプリに取り組んでいる Android 開発者として、私の仕事は、アプリがスムーズに動作し、報告されたすべての問題が迅速に解決されるようにすることです。私は、アプリの問題を報告しているユーザーから時折サポート チケットを受け取ることに慣れていました。しかしある日、アプリを通じて特定の地域に送金できなかった人々から大量のチケットを受け取りました。ホリデー シーズンが近づき、多くの人が私たちのアプリを利用して愛する人に送金する時期だったため、これは特に懸念されていました。


この問題の真相をできるだけ早く突き止めなければならないことはわかっていました。そこで私はシャーロック・ホームズの知恵に頼り、探偵の仕事を始めました。しかし、すぐに分かったのですが、この問題を解決するのは簡単なことではありませんでした。バグの根本原因を突き止め、アプリを正常に動作させるには、私のすべての探偵スキルと少しの運が必要でした。

セットアップ

UnsplashのMediamodifierによる写真

私は自分のデバイスで問題を再現することから始め、影響を受けた地域に送金しようとしました.案の定、アプリがフリーズし、「取引に失敗しました。後でもう一度やり直してください」というエラー メッセージが表示されました。 Android Studio でプロファイラーを使用して、問題の原因となっている可能性のあるパフォーマンスの問題がないかどうかを確認してみました.サイコロはありません;アプリは期待どおりに動作していました.


ログをすばやく確認して、何が起こっているのかを理解するのに役立つ情報があるかどうかを確認しました.残念ながら、ログはあまり役に立ちませんでした。彼らは、アプリが通常のネットワーク リクエストを行っていることを示しましたが、問題の原因を示す兆候はありませんでした。ただし、 transactionsエンドポイントにPOSTリクエストを送信しようとすると、その特定のリージョンに対してのみエラーが発生するように見えました。私が何をしようとしても、それはそうではありませんでした。謎解きに一歩も近づきそうにない。


次に、最新のコードを取得し、Production ブランチをチェックアウトして、最近のコミットが目前の問題に関連している可能性があるかどうかを確認しました。また、Postman を使用して個別のリクエストを作成してみましたが、奇妙なことに気付きました。リクエストは400のレスポンス コードを返しました。これは、それが不正なリクエストであることを意味します。これは通常、バックエンドが必要とするすべての情報をクライアントが送信していないことを意味します。ただし、リクエストで欠落しているデータを詳述する意味のあるエラーを返すことはできませんでした。このリクエストが以前は機能していたことを考えると、問題はサーバー側にあるように思われました。


この理論をテストするために、 debuggerを使用してコードを深く掘り下げました。コードの重要なポイントにブレークポイントを設定し、再度トランザクションを送信しようとしましたが、今度は内部で何が起こっているかに細心の注意を払いました。バックエンドが必要とするすべての必要なデータがリクエストに含まれているかどうかを確認し、リクエストとレスポンスをログアウトしました。残念ながら、すべてが期待どおりでしたが、まだ Bad request エラーが発生していました。

陰謀は厚くなる

UnsplashのVolodymyrHryshchenkoによる写真

調査を続けていると、何かが足りない気がして仕方がありませんでした。この問題には明確な説明があるはずのように思えましたが、いくら探しても見つかりませんでした。未解決のバグである私自身のモリアーティを罵倒したい気分になりました。


希望を失いかけたちょうどその時、ある考えが浮かびました。問題が発生する 2 週間前に、バックエンド チームがアプリのサーバー側コードの更新をプッシュしていたことを思い出しました。アップデートが問題の原因だったのでしょうか?


Slack でバックエンド開発者に連絡を取り、この問題について何らかの洞察があるかどうかを確認しました。彼らは、最近サーバー側コードの更新をプッシュしたと言いましたが、それが私が経験した問題に関連しているかどうかはわかりませんでした.彼らは現在、別の問題の修正に追われており、後で私のものを調べることしかできませんでした。彼らは、アップデートが徐々に展開され、最初はごく一部のユーザーしか受信していないと述べました.新しいポリシーにより、ロールアウトは段階的に行われ、ユーザーは 2 週間にわたってそれを受け取ります。更新プログラムを受け取ったユーザーだけに問題が発生した可能性はありますか?

電球の瞬間

UnsplashのJack Carterによる写真

firebase crashlyticログをすばやくチェックして、更新のタイミングとユーザーが問題を経験し始めた時期との間に相関関係があるかどうかを確認しました。そして案の定、手がかりが見つかりました!


チームと何度かやり取りした後、私の理論が確認されました。この更新には、サーバーが特定の種類のトランザクションを処理する方法の変更が含まれていました。そして、この変更により、特に影響を受ける地域へのトランザクションで問題が発生していることが判明しました。さらに調査したところ、以前はオプションであったフィールドをバックエンドでトランザクション リクエストに追加する必要があることがわかりました。この変更は、この地域の新しい規制のために行われましたが、残念ながら急いでおり、文書化が不十分で、十分にテストされていませんでした.その結果、フィールドは影響を受けるリージョンのトランザクション リクエストに含まれず、トランザクションが失敗しました。


信じられませんでした。すべての調査作業の後、最終的にバグの根本原因を見つけました。シャーロックのように多くの推理といくらかの創造的思考が必要でしたが、私はついにお金がなくなった事件を解決しました。


私はすぐにバックエンド チームに連絡を取り、発見したことを知らせました。彼らは、アップデートが問題を引き起こしたことを知ってショックを受け、見落としをお詫びしました.私たちは二面的な解決策に合意しました。バックエンド チームは、現在必須になっているフィールドのデフォルト値を含むホットフィックスをリリースし、モバイル アプリ チームがこの追加情報を要求する Android アプリの更新バージョンをリリースしている間、ユーザーが取引できるようにしました。

結論

このバグを解決することは、挑戦的でやりがいのある経験でした。問題をデバッグするときは、創造的に考えることと、さまざまなアプローチを試すことを恐れないことの重要性を思い出しました。また、Sherlock と Watson の強い絆と同様に、コラボレーションとチームワークの力を思い出させてくれました。バックエンド チームの助けがなければ、この問題を解決することはできなかったかもしれません。


私の探偵の仕事のこの話が、他の開発者に常に手がかりを探し、困難な問題を解決することを決してあきらめないことを思い出させるものになることを願っています.シャーロック・ホームズがかつて言ったように、「不可能を排除すると、どんなにありそうもないことであっても、残ったものはすべて真実に違いない.」それを念頭に置いて、最初はどんなに難しいように見えても、どんなバグも克服できることを私は知っています.