Claude Opus 5 (also works well with GPT-5.4 -- needs strong log-reading and causal reasoning, not ideal for smaller/faster models)You're a backend engineer and your team's CI pipeline has a test that fails about 1 in 15 runs with no code changes. Nobody wants to spend a sprint chasing it, so it's been ignored for three weeks -- and now two more tests in the same suite are starting to flake too.Developer Tools

أداة تشخيص اختبار Flaky Test: تحويل الإخفاقات المتقطعة في CI إلى فرضيات سببية جذرية مرتبة

مشاركة:
أداة تشخيص اختبار Flaky Test: تحويل الإخفاقات المتقطعة في CI إلى فرضيات سببية جذرية مرتبة

لماذا تهم هذه المطالبة

Flaky tests that get ignored quietly erode trust in the entire suite: engineers start re-running failed CI jobs by reflex instead of reading why they failed, which means a genuine regression can slip through disguised as 'oh, that test is just flaky.' Teams that let flaky tests accumulate past a small fraction of the suite typically see their mean time to detect real production bugs get significantly worse, because the signal-to-noise ratio of CI failures has collapsed.

فيم نستخدمها

You're a backend engineer and your team's CI pipeline has a test that fails about 1 in 15 runs with no code changes. Nobody wants to spend a sprint chasing it, so it's been ignored for three weeks -- and now two more tests in the same suite are starting to flake too.

المطالبة

Act as a senior test infrastructure engineer who specializes in diagnosing intermittent, non-deterministic CI test failures ("flaky tests").

CONTEXT:
- Test name / file: [TEST NAME OR FILE PATH]
- Test framework and language: [e.g. "pytest, Python" or "Jest, TypeScript"]
- Failure frequency: [e.g. "1 in 15 runs" or "roughly once a week, no clear pattern"]
- Failure logs from 3-5 recent failed runs (paste full stack traces / error output, not summaries): [PASTE FAILURE LOGS HERE, SEPARATED BY RUN]
- Recent changes to the test or the code it covers, if known: [DESCRIBE OR PASTE RELEVANT DIFF, OR WRITE "NONE KNOWN"]
- What the test is actually verifying (in plain English): [ONE-SENTENCE DESCRIPTION OF TEST INTENT]

TASK:
Analyze the failure patterns across the provided logs and produce ranked root-cause hypotheses. Consider these common flaky-test categories and rule each in or out based on the evidence: timing/race conditions, shared state or test pollution from other tests, external dependency instability (network, third-party API, database), resource exhaustion (memory, connection pool, file handles), non-deterministic test ordering, and environment differences between CI and local runs.

CONSTRAINTS:
- Do not simply conclude "the test is flaky" without committing to at least 2 specific, falsifiable hypotheses ranked by likelihood
- Every hypothesis must cite specific evidence from the pasted logs -- if the logs don't support a hypothesis, don't include it
- Clearly distinguish between issues safe to quarantine now and investigate later, versus issues that likely mask a real production bug and must be fixed before quarantining
- If the provided logs don't contain enough information to diagnose confidently, say exactly that, and specify precisely what additional logging or instrumentation to add before the next failure

OUTPUT FORMAT:
1. A ranked table: Hypothesis | Confidence (High/Medium/Low) | Evidence From Logs | Suggested Fix
2. A single recommended immediate action: Quarantine and Investigate Later / Must Fix Before Quarantining / Needs More Data First
3. If "Needs More Data First": the exact logging statements or CI configuration change to add so the next failure captures what's missing

النتيجة

Diagnosis: test_checkout_confirms_payment_status (pytest, Python)

Failure frequency: ~1 in 12 CI runs, no clear time-of-day pattern.

HypothesisConfidenceEvidence From LogsSuggested Fix
Race condition between async payment webhook handler and the assertion checking order statusHighAll 3 failed runs show the assertion firing at order.status == 'pending' rather than 'confirmed' -- the webhook handler logs show it completing 40-180ms AFTER the assertion ran in 2 of 3 failuresReplace the fixed 100ms sleep before the assertion with an explicit poll-until-status-or-timeout helper (max 2s), and add a log line at the exact moment the webhook handler acquires its DB lock
Shared test database state from a preceding test in the same suiteMediumOne failure log shows an order ID that doesn't match the expected sequence, suggesting a prior test's order wasn't cleaned up -- but this only appears in 1 of 3 logs, so it's a contributing factor, not the primary causeAdd explicit teardown assertion verifying zero leftover orders before this test starts; run this test in isolation for 20 iterations to confirm whether it still flakes without the suite context
Third-party payment sandbox API latency spikeLowNo log evidence of elevated response times from the payment sandbox in any of the 3 failures -- ruled out based on available dataN/A -- not supported by current evidence

Recommended Immediate Action: Must Fix Before Quarantining

This is not safe to quarantine. The race condition hypothesis is high-confidence and points to a genuine bug: the webhook handler and the test assertion have no synchronization mechanism between them, which means the SAME race condition could cause a real customer to see a stale "pending" payment status in production under load. Quarantining this test would hide a real timing bug, not just a test artifact. Fix the polling logic first; if the test still flakes after that fix, investigate the shared-state hypothesis as the secondary cause.

كل فريق هندسي يراكم اختبارات Flaky Test، وكل فريق يطور نفس العادة السيئة رداً على ذلك: شخص ما يعيد التشغيل، ويمر الاختبار في المرة الثانية، ويتحرك الجميع دون معرفة سبب فشله في المرة الأولى. هذه العادة مدمرة. بمجرد أن يبدأ فريق في التعامل مع إخفاقات CI كضوضاء بشكل افتراضي، سيتخلف انحدار حقيقي داخل تلك الضوضاء ويصل إلى مرحلة الإنتاج.


يفرض هذا prompt انضباطاً مختلفاً. بدلاً من قبول تشخيص غامض "إنه Flaky"، يتطلب prompt أن يقرأ النموذج سجلات الإخفاق الفعلية من عدة عمليات تشغيل وأن يلتزم بفرضيتين محددتين على الأقل قابلة للدحض — مرتبة حسب الثقة، كل منها مدعومة بسطر محدد من الأدلة من السجلات بدلاً من تخمين عام. الأسباب الجذرية الأكثر شيوعاً هي حالات السباق (Race Conditions)، وحالة الاختبار المشتركة، وعدم استقرار الاعتماديات الخارجية، واستنزاف الموارد، وانحراف البيئة بين CI والمحلي، ويمر prompt عبر كل منها بشكل منهجي بدلاً من القفز إلى أكثرها ألفةً.


الجزء الأكثر فائدة في المخرج هو الحكم الذي تتجاهله معظم الفرق تماماً: هل من الآمن عزل هذا الاختبار لمراجعته لاحقاً، أم أن التقلب يكشف بالفعل عن خطأ حقيقي يمكن أن يؤثر على الإنتاج تحت نفس الظروف؟ حالة السباق بين معالج Webhook غير المتزامن وفحص الحالة، على سبيل المثال، ليست مجرد مشكلة اختبار — إنها نفس الخطأ الذي يمكن أن يواجهه عميل حقيقي تحت الضغط. عزل ذلك الاختبار سيخفي مشكلة إنتاج خلف علامة خضراء. الحصول على هذا التمييز بشكل صحيح، في كل مرة، هو ما يفصل الفرق التي لديها إشارة CI موثوقة عن الفرق التي توقفت بهدوء عن الثقة في مجموعة الاختبارات الخاصة بها.

testingci-cddebuggingsoftware-qualityflaky-tests
مشاركة: