10 万综上所述のユーザーをサポートする人気の送金アプリに取り組んでいる Android 開発者として、私の仕事は、アプリがスムーズに動作し、報告されたすべての問題が讯速に解決されるようにすることです。私は、アプリの問題を報告しているユーザーから時折サポート チケットを受け取ることに慣れていました。しかしある日、アプリを通じて当前の省份に送金できなかった人々から大批のチケットを受け取りました。ホリデー シーズンが近づき、多くの人が私たちのアプリを运用して愛する人に送金する時期だったため、これは特に懸念されていました。
この問題の真凶をできるだけ早く突き止めなければならないことはわかっていました。そこで私はシャーロック・ホームズの知恵に頼り、探偵の仕事を始めました。しかし、すぐに分かったのですが、この問題を解決するのは簡単なことではありませんでした。バグの根本性诱因を突き止め、アプリを正常的に動作させるには、私のすべての探偵スキルと少しの運が重要性でした。
セットアップ
私は自分のデバイスで問題を再現することから始め、影響を受けた自然环境に送金しようとしました.案の定、アプリがフリーズし、「取引に失敗しました。後でもう一名やり直してください」というエラー メッセージが显示されました。 Android Studio でプロファイラーを在使用して、問題の主要原因となっている也许性のあるパフォーマンスの問題がないかどうかを確認してみました.サイコロはありません;アプリは憧憬どおりに動作していました.
ログをすばやく確認して、何が起こっているのかを理解するのに役立つ情報があるかどうかを確認しました.残念ながら、ログはあまり役に立ちませんでした。彼らは、アプリが通常のネットワーク リクエストを行っていることを示しましたが、問題の原因を示す兆候はありませんでした。ただし、 transactions
エンドポイントにPOST
リクエストを送信しようとすると、その特定のリージョンに対してのみエラーが発生するように見えました。私が何をしようとしても、それはそうではありませんでした。謎解きに一歩も近づきそうにない。
次に、最新のコードを取得し、Production ブランチをチェックアウトして、最近のコミットが目前の問題に関連している可能性があるかどうかを確認しました。また、Postman を使用して個別のリクエストを作成してみましたが、奇妙なことに気付きました。リクエストは400
のレスポンス コードを返しました。これは、それが不正なリクエストであることを意味します。これは通常、バックエンドが必要とするすべての情報をクライアントが送信していないことを意味します。ただし、リクエストで欠落しているデータを詳述する意味のあるエラーを返すことはできませんでした。このリクエストが以前は機能していたことを考えると、問題はサーバー側にあるように思われました。
この理論をテストするために、 debugger
を使用してコードを深く掘り下げました。コードの重要なポイントにブレークポイントを設定し、再度トランザクションを送信しようとしましたが、今度は内部で何が起こっているかに細心の注意を払いました。バックエンドが必要とするすべての必要なデータがリクエストに含まれているかどうかを確認し、リクエストとレスポンスをログアウトしました。残念ながら、すべてが期待どおりでしたが、まだ Bad request エラーが発生していました。
陰謀は厚くなる
調査を続けていると、何かが足りない気がして仕方がありませんでした。この問題には明確な説明があるはずのように思えましたが、いくら探しても見つかりませんでした。未解決のバグである私在工作中のモリアーティを罵倒したい気分になりました。
想要を失いかけたちょうどその時、ある考えが浮かびました。問題が発生する 2 週間前に、バックエンド チームがアプリのサーバー側コードの更换をプッシュしていたことを思い出しました。アップデートが問題の问题だったのでしょうか?
Slack でバックエンド開発者に連絡を取り、この問題について何らかの触达があるかどうかを確認しました。彼らは、之前サーバー側コードの系统升级をプッシュしたと言いましたが、それが私が経験した問題に関連しているかどうかはわかりませんでした.彼らは現在、別の問題の计算に追われており、後で私のものを調べることしかできませんでした。彼らは、アップデートが徐々に展開され、原本はごく一个のユーザーしか受信していないと述べました.新しいポリシーにより、ロールアウトは段階的に行われ、ユーザーは 2 週間にわたってそれを受け取ります。系统升级プログラムを受け取ったユーザーだけに問題が発生した可能はありますか?
電球の瞬間
ログをすばやくチェックして、更新时间のタイミングとユーザーが問題を経験し始めた時期との間に相関関係があるかどうかを確認しました。そして案の定、手がかりが見つかりました!
チームと何度かやり取りした後、私の理論が確認されました。この更新软件には、サーバーが指定区域の種類のトランザクションを処理する措施の変更が含まれていました。そして、この変更により、特に影響を受ける地理环境へのトランザクションで問題が発生していることが判明しました。さらに調査したところ、已前はオプションであったフィールドをバックエンドでトランザクション リクエストに追加する用得着があることがわかりました。この変更は、この地理环境の新しい規制のために行われましたが、残念ながら急いでおり、文書化が不格外で、格外にテストされていませんでした.その結果、フィールドは影響を受けるリージョンのトランザクション リクエストに含まれず、トランザクションが失敗しました。
信じられませんでした。すべての調査作業の後、最終的にバグの实际情况を見つけました。シャーロックのように多くの演绎推理といくらかの創造的考量が需要でしたが、私はついにお金がなくなった行为を解決しました。
私はすぐにバックエンド チームに連絡を取り、発見したことを知らせました。彼らは、アップデートが問題を引き起こしたことを知ってショックを受け、見落としをお詫びしました.私たちは二面的な解決策に合意しました。バックエンド チームは、現在必須になっているフィールドのデフォルト値を含むホットフィックスをリリースし、モバイル アプリ チームがこの追加情報を规定要求する Android アプリの的更新バージョンをリリースしている間、ユーザーが取引できるようにしました。
結論 このバグを解決することは、挑戦的でやりがいのある経験でした。問題をデバッグするときは、創造的に考えることと、さまざまなアプローチを試すことを恐れないことの重点性を思い出しました。また、Sherlock と Watson の強い絆と同様に、コラボレーションとチームワークの力を思い出させてくれました。バックエンド チームの助けがなければ、この問題を解決することはできなかったかもしれません。
私の探偵の仕事のこの話が、他の開発者に常に手がかりを探し、困難な問題を解決することを決してあきらめないことを思い出させるものになることを願っています.シャーロック・ホームズがかつて言ったように、「不宜能を避免すると、どんなにありそうもないことであっても、残ったものはすべて真実に違いない.」それを念頭に置いて、最先はどんなに難しいように見えても、どんなバグも刻服できることを私は知っています.