...
ブログ
完璧なバグ報告の書き方 - ヒント、テクニック、およびベストプラクティス完璧なバグ報告の書き方 - Tips、Tricks、およびベストプラクティス">

完璧なバグ報告の書き方 - Tips、Tricks、およびベストプラクティス

アレクサンドラ・ブレイク, Key-g.com
によって 
アレクサンドラ・ブレイク, Key-g.com
11 minutes read
ITスタッフ
9月 10, 2025

ブランド化されたタイトルと構造化された本文を持つ、明確で再現可能なバグ報告を作成してください。 まずは簡単なものから始めましょう。 Translation not available or invalid. 観察された挙動を一文で述べ、専門用語を避けてください。提供する little チームメンバーが環境に関する背景情報を理解できるようにします。 アクセス the data today. Treat the report as a 共有-ready artifact that others can skim in html ブロックを理解し、その影響をすぐに把握することができます。

再現するための具体的な手順を6つリストアップしてください。各手順は動詞で始まり、正確な操作、入力、状態を記述します。手順は簡潔に保ちます。手順が長くなると、明確さが低下し、エラーが増加します。バグが特定のウィンドウサイズに依存する場合は、幅 x 高さ (例えば、1280×720) を含めてください。添付してください。 スクリーンショット 重要なポイント: 行動の前後(前、中、後)で、状態変化を示すために使用します。誤解を防ぎ、そうあることを確実にするために、ステップではプレーンテキストを使用してください。 easily repeatable.

期待される結果と実際の結果を、正確な値やメッセージで対比します。Include a Translation not available or invalid. ログやコンソールからの抜粋を添付し、失敗が発生した時間を参照してください。タイムスタンプを含める場合は、使用したことを明記してください。 python-dateutil to parse dates. If any captured field is 未定義, mark it explicitly as undefined to avoid ambiguity. This report is crucial トリアージと解決のため。

環境スナップショット: オペレーティングシステム、ブラウザ、アプリのバージョン、ロケール、および機能フラグ。正確なバージョン番号を記録してください(例:アプリ 3.14.2、python-dateutil 2.8.1)。問題が発生したハードウェアまたはインスタンス、および関連する場合はユーザーロールに注意してください。この情報 基本的に トリアージの迅速化、やり取りの削減、そしてチームが観察から行動へより迅速に移行するのに役立ちます。

ビジネス用語で影響を説明するために、バグを実際のものにリンクします。 アイデア リスクの。レポートのブランド化とアクセシビリティを維持し、適切なノードの所有者および利害関係者と共有してください。使用する。 Translation not available or invalid. ブロックを使用して手順と結果を説明します。確認する確保します。 複製に関する規定は明確です。不明なデータがある場合は、推測するのではなく、プレースホルダーを含めてください。 much その価値の大部分は、他の人が今日再利用して検証し、チーム間で共有できる正確で読みやすいデータに由来します。

Instagramのストーリーフィルターのバグ再現手順

再現可能なスクリプトを使用してください。デバイスモデル、OSバージョン、Instagramアプリのバージョン、正確なフィルター名をキャプチャします。正確なタップ、期間、カメラがフロントかバックかを示す情報をログに記録します。もちろん、バグを説明するための短い動画クリップを含めてください。再現スクリプトと呼ばれるガイドは、一貫性を保つのに役立ちます。ログと証拠を1つのレポートに連結し、レビュー担当者が実行できるようにします。

レポート内では、トリガー状態ごとにステップをグループ化し、テスト環境で提供される定数に対応付けます。第二に、ログを単一のファイルに保持して、コンテキストの混在を避けてください。失敗につながる5つの最も一般的なパスを特定します。フィルタの開き、エフェクトの切り替え、録画、保存、共有です。テスターの役割は、各パスの結果を検証し、実行が予期される状態からどのように逸脱する場所を特定することです。

記憶に頼らないでください。ここでは推測は一切ありません。ボタンのラベル、コントロールの状態、およびあらゆるUIの遅延など、あらゆる操作を正確な詳細で文書化してください。強力な証拠の例としては、正確なフィルタ名、デバイスモデル、OSのバージョン、タイムスタンプ、およびノイズのない問題を明らかにする短い既製のビデオなどがあります。ログを表示した場合、関連する定数を添付し、UI内のプログラミングミスを注記してください。これらの詳細は、結果を迅速に確認しようとするレビュー担当者が非常に役立ちます。灯台チェックリストに従って、ステップが漏れないようにし、自分のテストにラベルを付けて、名前を明確にしてください。これらのメモは、コンテキストの欠如を防ぎます。

Step アクション 状態/トリガー 証拠 Expected Result
1 Instagramのストーリーを開き、影響を受けたフィルターを選択してください。 フィルターが読み込まれました。アイドル。 フィルター名を示すスクリーンショット; デバイス/時間 フィルタは通常通りロードされ、不具合はありません。
2 短いクリップ (5〜10秒) を記録してください。 録音開始 報告書に添付されたビデオクリップ 記録はクラッシュすることなく続行されます。
3 録画中にエフェクトを切り替えたり、露出を調整したりします。 画面上のコントロールが有効になっています。 コンソールログ、スクリーンレコーディング レビューではエイリアシングは見られません。予想通りの効果が残っています。
4 物語を保存または公開する 保存/公開された状態遷移 ギャラリーにアセットを保存しました。タイムスタンプ 保存に成功しました。フィルターは安定しています。
5 物語を再度開き、表示します アプリの再読み込み;状態が復元されました 確認済みのシーケンス;再確認 バグが再現されたかどうか、または不一致があるかどうかを注記します。

Capture Environment, Devices, and Filter Version Details

Capture Environment, Devices, and Filter Version Details

問題を再現する際に使用したフィルタのバージョンや、オペレーティングシステム、デバイスモデル、ファームウェア/ビルドバージョンなど、環境全体をすぐに記録してください。

テンプレートのdataclassを使用して、主要なフィールド(environment、device、build、filter_version、timestamp、およびchanges)を収集します。テスト開始時に初期化し、完了時に更新します。dataclassでクリーンなデータモデルを作成することで、型付けが厳密になり、シリアル化が予測可能になり、レビューやチーム間の共有が容易になります。

環境項目を反復可能なデバイスと構成のリストとして保存します。各項目に関する詳細をログに記録します: モデル、OSバージョン、アプリのビルド、および使用されたフィルター。env_ または device_ のような一貫したプレフィックスを使用して解析を簡素化し、問題が特定のオペレーター設定に依存する場合は、コンパクトなオペレーターメモを提供します。

記録フィルタのバージョン詳細を個別のセクションとして記録する:名前、バージョンタグ、コミットハッシュ、およびビルド日付。バグと相関する変更を特定するために、以前のバージョンとの比較を含め、トリアージを支援するためのクイック検証テストの結果を添付する。

軽量な完了チェックリストを提供する:エイリアスの逆ルックアップによる初期化の検証、収集されたデータのレビュー、テンプレートがテスト計画に準拠していることを確認する。エントリーには、正常な実行後に環境スナップショットが完了しており、概要がレビューの準備ができていると記載されている。

例として、BugContextというデータクラスを定義します。このデータクラスには、environment: str, devices: list[str], filter_versions: list[str], timestamp: str, items: listというフィールドがあります。これにより、正確かつ最速で再現経路を確立し、単一の初期化ステップで結果をキャプチャするとともに、関連ログの逆検索をサポートします。また、一貫性のあるレビューの記録と信頼性の高いベースラインを提供し、プログラミングの変更を追跡できるようにします。

バグを明確に記述する: 手順、期待される結果 vs 実際の結果、および影響

バグを明確に記述する: 手順、期待される結果 vs 実際の結果、および影響

Recommendation: 失敗の概要を簡潔に1行で示し、何が、どこで、誰が影響を受けたかを明確にします。その後、再現手順、期待される結果と実際の結果、影響という3つのセクションを提示します。トリアージを迅速化するために、環境やロケールなどの背景情報を含めてください。

再現手順: 1) 英語のロケールで、投稿ページを開きます。2) プライベートフィールドに名前と生年月日を含む顧客としてサインインします。3) 新しい投稿フォームの「開始」ボタンをクリックします。4) 8~12文字のタイトルと、複数の文字列とコンテンツを含む本文を入力し、合計で100文字を超えるようにします。5) 投稿を送信します。6) ページとアナリティクスで結果を確認します。

予期される結果: 投稿はエラーなしで保存され、記述したとおりにページに表示され、内容は同じ文字順でレンダリングされます。プライベートデータがパブリックビューに漏れることはなく、アナリティクスは正しいペイロードと共に、投稿作成イベントを1回発火します。

実際の結果: 保存操作でエラーが発生するか、ページの内容が変更されることがあります。投稿が切り捨てられたテキストで表示されたり、別の投稿が表示されたりします。生年月日などの個人情報は、UIまたはログに表示される可能性があり、分析レポートではイベント名が一致しない、ペイロードが欠落しているなどの問題が発生します。入力文字列と保存されているデータの比較において、平均値で誤差が生じる場合があり、これは書式設定の段階でのエラーを示唆しています。

Impact and risk: これは顧客のユーザーフローを混乱させ、正確な公開、レビュー、分析に頼る作業者の作業を遅らせます。機密データへの暴露、ビジネスへの信頼の低下、および立ち上げまたは投稿のペースの遅延を引き起こす可能性があります。複数のページまたはコンポーネントが同じ関数セットを再利用する場合、またはコンテンツがページ間でコピーされる場合(たとえば、プライベートノートを公開投稿にコピーする場合)に深刻度が増します。エンジニア向けの簡単なドキュメントを作成し、ステータスと意思決定を追跡するために、ステークホルダー向けの別のコメントスレッドを用意してください。

証拠と文脈: 背景の詳細を含めてください。環境バージョン、ページパス、および関連するコードパス。失敗ウィンドウからのログを添付し、入力内の文字列とページに表示される文字列との不一致を示す小さな代表的なサンプルを提供します。入力(タイトル、本文、文字)を観察された内容にマッピングする比較表を作成し、問題が再現される2回目の実行があるかどうかを注記します。関連する分析イベントをキャプチャし、名前や生年月日などの機密フィールドがアウトプットに漏洩しないようにします。プライベートなテストアカウントを使用している場合は、機密フィールドを赤字で塗りつぶし、チームメイトがデータを投稿や分析に公開することなく再現できるように、アカウント名をコメントで参照してください。

修正すべき点と検証方法: バグを、コンテンツ文字列を構築する関数とコード内の保存パスに絞り込む。文字列の長さ、マルチバイト文字、およびページ間のコピーをカバーする回帰テストを追加する。2回目の試行と他のワーカー上での期待値と実際の比較が有効であることを検証する。ターゲットページに公開コンテンツのみがレンダリングされ、起動後もアナリティクスペイロードが正しいことを確認する。

証拠の収集:スクリーンショット、画面録画、およびログ

各ステップのタイムスタンプ付き証拠を記録してください。各操作の直後にスクリーンショットを撮り、機能が誤動作した場合は画面録画を開始してください。 これは問題の分析のための明確なトレイルを作成し、正確なユーザー入力とUIの状態を表示することで、トリアージを加速させます。

証拠の種類スクリーンショット、スクリーンレコーディング、およびログ。スクリーンショットは、ある時点でのUIを示します。スクリーンレコーディングは、シーケンス、入力、およびエラーダイアログをキャプチャします。ログは、イベントとタイミングを明らかにします。証拠を文脈に配置するために、アプリのバージョン、OS、およびデバイスモデルをメタデータに含め、問題を引き起こした正確なアクションをメモしてください。

一貫性のある命名規則でファイルを用意してください。レコードにはdataclassのような構造を使用します: 時間、アクション、予想される結果、実際の結果、メモリのスナップショット、および重要な定数。データを単一のバグフォルダに配置し、スクリーンショット、ビデオ、ログ用のサブフォルダを作成することで、後でフィルタリングと相互参照を簡素化します。

何 recording するべきか、また recording する期間: エラーメッセージから明確なテキストをキャプチャし、完全なスタックトレースをコピーし、関連するネットワークリクエストを含めてください。完全なコマンドシーケンスと、各ステップ中にタイプした正確な文字を recording してください。シーケンスがバックステップまたは繰り返しの操作を含む場合は、失敗が常に再現されるまで繰り返します。進行状況と、ステップ間に現れる一時的な状態をメモしてください。

機密情報を削除して安全に共有:ログとメモリダンプから機密データを削除してから共有してください。メモリが関連性を持つことが判明した場合、失敗時にMB単位のフットプリントを記録し、次の試行で発生した変更を追跡してください。非技術的な読者のために、Canvaテンプレートを使用して簡潔な1ページの要約をエクスポートし、生の証拠を別途添付してください。レポートの構造に合わせてプレゼンテーションを調整することで、可読性を向上させます。

分析と整理: フィルターを適用して、エラーレベルのエントリのみを表示するか、インシデントの周辺の狭い時間ウィンドウを表示します。シーケンスを分析することで、機能の役割と他のモジュールとの相互作用を特定するのに役立ちます。障害の期間を測定し、障害パス内のログ行の数をカウントし、問題のあるパスが表示される頻度を追跡します。作成者のメモには、各アーティファクトが再現手順の具体的な手順に明確にリンクされている必要があります。これにより、レビュー担当者は進捗状況を迅速に検証できます。

優先順位付け、割り当て、およびバグのステータスの伝達

バグの影響度と発生可能性に基づいてランク付けし、単一の担当者を割り当て、明確な期日を記載してチケットのステータスを更新する。

  • ビジネスへの影響と頻度を測定して優先順位を付けます。顧客、ワークフロー、およびインストールパスにマッピングします。根本原因を把握し、既存のコードまたはレンダリングに影響を与えるかどうか、また、バグがインストールをブロックするか、通常のインストール中の作業を妨げるかどうかを把握します。バグが重要なワークフローをブロックする場合は、緊急に対応し、厳格な基準で深刻度を評価してください。
  • 明確に割り当てる:単一の担当者または少人数の説明責任のあるペアを選び、具体的な目標日を指定し、書面による計画を添付します。チームに既定の担当者がいる場合は、チケットにそれを記載し、根本原因を特定する手順を迅速化するために、関連ドキュメントへのヘルパーリンクを追加します。調査を絞り込み、デバッグ手順のループを避けるために、関連するグローバルまたはコード領域を参照します。
  • ステータスを常に一貫して伝達する: チケットと共有チャネルに定期的にアップデートを公開してください。各アップデートでは、現在の既知の原因、影響を受けるユーザー、およびインストールまたはレンダリングに影響があるかどうかを記載します。情報が不完全な場合は、チケットに既存の不確実性を記載し、次に実行する手順を記載します。関連する場合は、他のチャネルや過去のチケットで言及された内容を含めてください。同様の問題からの例を使用して、対応者を手助けし、ブランド、ビジネス、品質、顧客、または社内関係者に対する期待を設定します。新しいデータが到着するまで、ステータスを正確かつ最新の状態に保ちます。修正が依存関係によってブロックされている場合は、ブロックとその予想される所要時間について説明してください。ビジネスチームからの要求が整合性を推進する必要があります。