تكرار السؤال: …
الإجابة المختصرة
يقوم بتعديل شروط الكود عمداً (مثل عكس الشروط أو حذف السطور)؛ فإذا نجحت الاختبارات رغم التخريب (Survived)، فهذا يكشف ضعف التوكيدات وحالات حدية غير مغطاة.
الشرح
نسبة تغطية الكود (Code Coverage) لا تعني جودة الاختبارات. تقوم أداة dotnet-stryker بحقن طفرات في الـ IL والـ Syntax (Mutants)؛ مثل استبدال > بـ >= أو استبدال true بـ false. إذا فشل الاختبار عند حدوث الطفرة، يُعد الطافر مقتولاً (Killed)، أما إذا نجح الاختبار، فهذا إنذار بوجود كود غير مفحوص بتوكيد حقيقي أو اختبار سطحي لا قيمة له.
مثال بالكود
// MathRules.cs
public static bool IsAdult(int age) => age >= 18;
// MathRulesTests.cs
[Fact] public void Adult_is_true_for_30() => Assert.True(MathRules.IsAdult(30)); // the mutant `age > 18` survives
[Fact] public void Boundary_18_is_adult() => Assert.True(MathRules.IsAdult(18)); // kills that mutant
// Run Stryker.NET from the test project folder:
// dotnet tool install -g dotnet-stryker
// dotnet strykerأخطاء شائعة
- الافتخار بتحقيق 100% Code Coverage مع وجود نسبة Mutation Score متدنية جداً تكشف هشاشة الاختبارات.