完璧なバグレポートの書き方 - ヒント、トリック、ベストプラクティス


明確で再現可能なバグレポートを、ブランド化されたタイトルと構造化された本文で記述します。 観察された動作を1文で述べるシンプルなテキストから始め、スラングを避けます。チームメンバーが今日データをアクセスできるように、環境についての少しのコンテキストを提供します。レポートを、HTMLブロックで他の人が素早く閲覧して影響を把握できる共有可能なアーティファクトとして扱います。
再現のための6つの具体的なステップをリストアップします。各ステップは動詞で始め、正確なアクション、入力、状態を記述します。ステップを簡潔に保ちます。長いステップは明瞭さを低下させ、エラーを増加させます。バグが特定のウィンドウサイズに依存する場合、幅 x 高さ(例: 1280x720)を記載します。重要なポイントにスクリーンショットを添付します:アクションの前、中、後で状態変化を示します。ステップではプレーンテキストを使用し、誤解を防ぎ、容易に繰り返し可能にします。
期待される結果と実際の結果を、正確な値やメッセージで対比します。ログやコンソールからのテキストスニペットを記載し、失敗が発生する時間を参照します。タイムスタンプを記載する場合、python-dateutilを使用して日付を解析したことを言及します。キャプチャされたフィールドがundefinedの場合、曖昧さを避けるために明示的にundefinedとしてマークします。このレポートはトリアージと解決に重要です。
環境スナップショット:オペレーティングシステム、ブラウザ、アプリバージョン、ロケール、および任意の機能フラグ。 exact バージョン番号を記録します(例: アプリ 3.14.2、python-dateutil 2.8.1)。問題が発生するハードウェアやインスタンス、および関連するユーザー役割を記載します。この情報はトリアージを本質的に加速し、やり取りを減らし、チームが観察からアクションへより速く移行するのを助けます。
バグの影響をビジネス用語で伝え、リスクの実在するアイデアにリンクします。レポートをブランド化し、アクセスしやすくし、正しいノードオーナーとステークホルダーと共有します。ステップと結果を記述するためにテキストブロックを使用し、再現のウィンドウが明確であることを確認します。不明なデータがある場合、推測する代わりにプレースホルダーを記載します。多くの価値は、他の人が今日検証とチーム間共有のために再利用できる正確で読みやすいデータから来ます。
Instagram Story フィルターバグの再現ステップ
再現可能なスクリプトを使用します:デバイスモデル、OSバージョン、Instagramアプリバージョン、および正確なフィルター名をキャプチャします。 exact タップ、持続時間、およびカメラがフロントかバックかをログします。バグをタイムスタンプ付きの短いビデオクリップを添付して説明します。再現スクリプトと呼ばれるガイドが一貫性を保つのを助けます。ログと証拠を1つのレポートに連結してレビュアーによる実行をします。
レポート内で、ステップをトリガーステートごとにグループ化し、テスト環境が提供する定数にマッピングします。第二に、コンテキストの混在を避けるためにログを単一ファイルに保ちます。失敗につながる5つの最も一般的なパスを特定します:フィルターの開く、エフェクトの切り替え、録画、保存、共有。テスターの役割は、各パスの結果を検証し、実行が期待される状態から逸脱する場所を特定することです。
記憶に頼らないでください。ここには推測はありません。すべてのアクションを正確な詳細で文書化します:ボタンラベル、コントロール状態、および任意のUI遅延。強力な証拠の例には、exact フィルター名、デバイスモデル、OSバージョン、タイムスタンプ、および問題を示す余分なノイズなしの短い事前作成ビデオが含まれます。ログを閲覧した場合、関連する定数とUIのプログラミングミスを記載します。これらの詳細は、レビュアーが結果を迅速に検証するのを助けます。ステップを見逃さないようにlighthouseチェックリストに従い、自分のテストを自分でラベル付けして名前を明確に保ちます。これらのノートはコンテキストの欠如を防ぎます。
| Step | Action | State/Trigger | Evidence | Expected Result |
|---|---|---|---|---|
| 1 | Instagram Story を開き、影響を受けるフィルターを選択 | フィルターがロードされ、アイドル | フィルター名のスクリーンショット;デバイス/時間 | フィルターが正常にロードされ、グリッチなし |
| 2 | 短いクリップ(5-10秒)を録画 | 録画が開始 | レポートに添付されたビデオクリップ | クラッシュなしで録画が進行 |
| 3 | 録画中にエフェクトを切り替えまたは露出を調整 | 画面上のコントロールがアクティブ | コンソールログ、画面録画 | レビューにエイリアシングなし;期待されるエフェクトが残る |
| 4 | ストーリーを保存または公開 | 状態が保存/公開に遷移 | ギャラリー内の保存資産、タイムスタンプ | 正常に保存;フィルターが安定 |
| 5 | ストーリーを再開して閲覧 | アプリ再ロード;状態が復元 | 閲覧シーケンス;再確認 | バグが再現または未再現;不一致を記載 |
環境、デバイス、フィルターバージョンの詳細をキャプチャ

問題を再現する際に使用したオペレーティングシステム、デバイスモデル、ファームウェア/ビルドバージョン、およびexact フィルターバージョンを即座にログします。
テンプレートのデータクラスを使用してキー フィールドを収集します:environment、device、build、filter_version、timestamp、およびchanges。テスト開始時に初期化し、完了時に更新します。データクラスを使ったクリーンなデータモデルを作成することで、タイピングを厳格に保ち、シリアライズを予測可能にし、レビューとチーム間共有を支援します。
環境項目をデバイスと構成のイテラブルリストとして保存します。アイテムごとの詳細をログします:モデル、OSバージョン、アプリビルド、および使用されたフィルター。一貫したプレフィックス(例: env_ または device_)を使用して解析を簡素化し、問題が特定のオペレーター設定に依存する場合、コンパクトなオペレーター ノートを提供します。
フィルターバージョンの詳細を別セクションとして記録します:名前、バージョン タグ、コミット ハッシュ、およびビルド日。バグと相関する変更を特定するために、以前のバージョンとの比較を記載し、トリアージをガイドするためにクイック検証テストの結果を添付します。
軽量の完了チェックリストを提供します:エイリアスの逆引きで初期化を検証し、収集データをレビューし、テンプレートがテストプランと一致することを確認します。エントリは、成功した実行後に環境スナップショットが完了し、サマリーがレビュー準備完了であると述べます。
適応可能な例の構造:BugContext という名前のデータクラスを定義し、フィールド:environment: str、devices: list[str]、filter_versions: list[str]、timestamp: str、items: list。これにより、単一の初期化ステップと関連ログの逆引きで、正確で最速の再現パスを作成し、結果をキャプチャできます。また、一貫したレビュー トレイルと信頼できるベースラインを提供し、プログラミング変更の追跡を可能にします。
バグを明確に記述:ステップ、期待される結果 vs 実際の結果、および影響

推奨: 何が失敗したか、どこで発生したか、誰が影響を受けるかを述べる簡潔な1行のサマリーから始めます。次に3つのセクションを提供します:再現ステップ、期待される vs 実際の結果、および影響。トリアージを加速するために、環境とロケールの背景詳細を記載します。
再現ステップ: 1) 英語ロケールで、Posts ページを開きます。2) 名前と生年月日がプライベートフィールドに含まれる顧客としてサインインします。3) 新しい投稿フォームのLaunch ボタンをクリックします。4) 8–12文字のタイトルと、複数の文字列とコンテンツを含む本文を入力し、合計100文字を超えます。5) 投稿を送信します。6) ページとアナリティクスで結果を観察します。
期待される結果: 投稿がエラーなしで保存され、記述された通りにページに表示され、コンテンツが同じ文字順序でレンダリングされます。プライベートデータが公開ビューに漏洩せず、アナリティクスが正しいペイロードで単一のpost-created イベントを発火します。
実際の結果: 保存操作がエラーを返したり、ページが変更されたコンテンツを表示したりします。投稿が切り詰められたテキストで表示されたり、異なる投稿が表示されたりします。生年月日などのプライベートフィールドがUIやログに表示される可能性があり、アナリティクスが不一致のイベント名や欠落ペイロードを報告します。入力文字列と保存されたものの比較が一部の場合で平均値でずれ、フォーマットステップの故障を示します。
影響とリスク: これにより顧客のユーザー フローが中断され、正確な公開、レビュー、アナリティクスに依存するワーカーの作業が遅くなります。プライベートデータを露出させ、ビジネスへの信頼を損ない、ローンチや投稿の頻度を遅らせる可能性があります。複数のページやコンポーネントが同じ関数セットを再利用する場合、またはコンテンツがページ間でコピーされる場合(例: プライベートノートから公開投稿へ)、深刻度が増します。エンジニア向けのクイックライティングとステークホルダー向けの別コメント スレッドを準備して、ステータスと決定を追跡します。
証拠とコンテキスト: 背景詳細を記載します:環境バージョン、ページ パス、および関連コード パス。失敗ウィンドウからのログと、入力の文字列とページに表示されるものの不一致を示す小さな代表サンプルを添付します。exact 入力(タイトル、本文、文字)を観察されたコンテンツにマッピングする比較テーブルを提供し、問題を再現する2回目の実行を記載します。関連アナリティクス イベントをキャプチャし、名前と生年月日などのプライベートフィールドが出力に漏洩しないことを確認します。プライベートテスト アカウントを使用する場合、機密フィールドを赤字し、コメントでアカウント名を参照して、他の人が投稿やアナリティクスでデータを露出せずに再現できるようにします。
修正内容と検証方法: バグをコンテンツ文字列を構築する関数とコード内の保存パスに絞り込みます。文字列長、多バイト文字、ページ間コピーをカバーする回帰テストを追加します。期待される結果と実際の結果の比較が2回目の試行と他のワーカーで成立することを検証します。ターゲットページに公開コンテンツのみがレンダリングされ、ローンチ後にアナリティクス ペイロードが正しいことを確認します。
証拠の収集:スクリーンショット、画面録画、およびログ
各ステップでタイムスタンプ付きの証拠をキャプチャ:各アクション直後にスクリーンショットを撮影し、機能が誤動作したときに画面録画を開始します。 これにより、問題の分析のための明確なトレイルを作成し、exact ユーザー入力とUI状態を示すことでトリアージを加速します。
証拠の種類:スクリーンショット、画面録画、およびログ。スクリーンショットは特定の時点でのUIを示します。画面録画はシーケンス、入力、エラーダイアログをキャプチャします。ログはイベントとタイミングを明らかにします。メタデータにアプリバージョン、OS、デバイスモデルを含めて証拠をコンテキストに配置し、問題を引き起こしたexact アクションを記載します。
一貫した命名スキームでファイルを準備します。レコードのためにデータクラスライクな構造を使用します:時間、アクション、期待される結果、実際の結果、メモリ スナップショット、およびキー定数。スクリーンショット、ビデオ、ログのサブフォルダ付きの単一のバグ フォルダにデータを配置して、後でフィルタリングとクロスリファレンスを簡素化します。
何を記録し、どれくらいの長さ:エラーメッセージからの明確なテキストをキャプチャし、完全なスタック トレースをコピーし、関連ネットワーク要求を含めます。各ステップでタイプされたexact 文字と完全なコマンド シーケンスを記録します。シーケンスがバックステップや繰り返しアクションを含む場合、失敗が一貫して再現するまで繰り返します。ステップ間の進捗と一時的な状態を記載します。
安全に赤字し共有:共有前にログとメモリ ダンプから機密データを削除します。メモリが関連する場合、失敗時のフットプリントをMBでログし、連続試行での変更を追跡します。非技術者向けに、Canva テンプレートを使用して簡潔な1ページ サマリーをエクスポートし、生の証拠を別途添付します。プレゼンテーションをレポートの構造に合わせ、読みやすさを向上させます。
分析と整理:インシデント周辺の狭い時間ウィンドウやエラーレベル エントリのみを明らかにするフィルターを適用します。シーケンスの分析は機能の役割と他のモジュールとの相互作用を特定するのを助けます。失敗の持続時間を測定し、失敗パスでのログ行数をカウントし、問題のあるパスがどれくらい頻繁に現れるかを追跡します。作成者のノートは、各アーティファクトを再現ステップの具体的なステップに明確にリンクして、レビュアーが進捗を迅速に検証できるようにします。
バグの優先順位付け、割り当て、およびステータス通信
影響と可能性でバグをランク付けし、単一のオーナーを割り当て、明確な期限付きでチケットのステータスを更新します。
- ビジネス影響と頻度を測定して優先順位付け:顧客、ワークフロー、インストール パスにマッピングします。ルート コーズをキャプチャし、既存コードやレンダリングに影響するかどうか、およびバグがインストールやインストール中の通常作業をブロックするかどうかをします。バグが重要なワークフローをブロックする場合、すぐに優先順位を上げ、より厳格な深刻度基準を使用します。
- 明確に割り当て:単一のオーナーまたは小さな責任あるペアを選択し、具体的なターゲット 日付を指定し、記述されたプランを添付します。チームにデフォルト オーナーがいる場合、チケットに記載し、ルートコーズ ステップを加速するために関連ドキュメントへのヘルパー リンクを追加します。調査を絞り込み、デバッグ ステップのループを避けるために、関連するグローバルやコード領域を参照します。
- ステータスを一貫して通信:定期的な頻度でチケットと共有チャネルで更新を公開します。各更新は、現在の既知の原因、影響を受けるユーザー、およびインストールやレンダリングが影響を受けるかどうかを述べます。情報が部分的な場合、チケットに既存の不確実性を記載し、次の措置をします。関連する場合、他のチャネルや過去のチケットでチームが言及したものを含めます。ブランド、ビジネス、品質、顧客、または内部ステークホルダー向けの期待を設定するために、類似の問題からの例を使用します。新規データが到着するまで、ステータスを正確で古くならないように保ちます。修正が依存関係でブロックされている場合、ブロックと期待されるターンアラウンドを記載します。ビジネス チームからの需要が調整を駆動します。
Ready to leverage AI for your business?
Book a free strategy call — no strings attached.


