اختبار الانحدار هو عملية إعادة التحقق من التطبيق بعد إجراء تغييرات لاكتشاف العيوب في الوظائف التي كانت تعمل سابقًا. كل تغيير في الكود — ميزة جديدة، إصلاح خطأ أو إعادة هيكلة — يمكن أن يكسر عن غير قصد إمكانيات التطبيق الحالية. تقوم اختبارات الانحدار بأتمتة التحقق من أن الوظائف القديمة لا تزال تعمل. وفقًا لدراسة IBM، 2023، يغطي اختبار الانحدار من 30 إلى 70% من جميع الاختبارات المنفذة في فرق المنتجات التجارية، مما يبرز دوره كحاجز رئيسي ضد حوادث الإنتاج.
النقاط الرئيسية
اختبار الانحدار هو نوع من الاختبارات يهدف إلى تأكيد أن تغييرات الكود لم تكسر الوظائف الحالية. المصطلح «انحدار» يعني العودة إلى حالة أسوأ — عندما تتوقف وظيفة كانت تعمل في الإصدار السابق عن العمل في الإصدار الجديد. يتم تنفيذ اختبارات الانحدار بشكل متكرر في كل دورة تطوير، مما يميزها عن اختبارات الميزات الجديدة التي تُكتب مرة واحدة.
تنبع الحاجة إلى اختبار الانحدار من تأثير التغييرات المتتالية: إصلاح خطأ في وحدة واحدة قد يحل المشكلة لكنه يكسر الوظائف المجاورة التي تعتمد عليها. على سبيل المثال، تغيير استعلام SQL في مستودع المستخدمين قد يسرع المصادقة لكنه يكسر تصدير البيانات الذي استخدم نفس الاستعلام. سيكتشف اختبار الانحدار على تصدير البيانات هذا الخلل قبل الإصدار.
وفقًا لتقرير CISQ 2023، فإن تكلفة إصلاح عيب انحدار تم اكتشافه في الإنتاج أعلى بـ 15 مرة من مرحلة تشغيل الانحدار الآلي. الشركات التي تستثمر في اختبار الانحدار الآلي تقلل حصة عيوب الانحدار في الإصدارات من 25% إلى 5% خلال عام من التنفيذ، وفقًا لتقرير Capgemini World Quality Report.
هناك عدة طرق لاختبار الانحدار تختلف في النطاق ومعايير اختيار الاختبارات. اختيار الطريقة يعتمد على حجم المشروع، وتواتر التغييرات، والوقت المتاح في خط أنابيب CI. فيما يلي الأنواع الرئيسية لاختبار الانحدار مع خصائصها.
تشغيل الانحدار الكامل ينفذ جميع الاختبارات الآلية للمشروع دون استثناء. يوفر هذا النهج أقصى درجات الثقة لكنه يتطلب موارد حاسوبية ووقتًا كبيرين. يتم إجراء التشغيل الكامل قبل الإصدارات الرئيسية — كل 2–4 أسابيع. لتطبيق يحتوي على 5000 اختبار، يستغرق التشغيل الكامل من 2 إلى 6 ساعات حسب البنية التحتية.
النهج الانتقائي يشغل فقط الاختبارات المرتبطة بالوحدات المعدلة. لتحديد الارتباط، يتم استخدام تحليل التبعيات على مستوى الكود: إذا تم تغيير فئة UserRepository، يتم تشغيل الاختبارات التي تعتمد على UserRepository بشكل مباشر أو غير مباشر. توفر أدوات مثل Jacoco وAndroid Test Coverage وXcode Code Coverage خرائط تغطية للاختيار الدقيق. يتم إجراء التشغيل الانتقائي عند كل طلب سحب ويستغرق 5–15 دقيقة.
الانحدار القائم على المخاطر يصنف الاختبارات حسب أهمية الوظيفة واحتمالية الكسر. الوظائف الحرجة — المدفوعات، المصادقة، المزامنة — تُختبر عند كل تغيير في الكود. الوظائف المساعدة — شاشة «حول»، الرسوم المتحركة — تُختبر فقط قبل الإصدار. تتم مراجعة التصنيف كل ثلاثة أشهر بناءً على بيانات حوادث الإنتاج.
غالبًا ما يتم الخلط بين مفهومي اختبار الانحدار وإعادة الاختبار، على الرغم من أنهما عمليتان مختلفتان. إعادة الاختبار هي إعادة تشغيل اختبار محدد كان قد فشل سابقًا، بعد إصلاح العيب. الغرض من إعادة الاختبار هو التأكد من أن الإصلاح يعمل: لم يعد الخطأ يظهر. يتم إجراء إعادة الاختبار مرة واحدة، مباشرة بعد الإصلاح وتأكيد المطور للإصلاح.
اختبار الانحدار هو تشغيل اختبارات على الوظائف الحالية التي لم يتم تغييرها. الهدف هو التأكد من أن إصلاح عيب واحد لم يخلق عيبًا جديدًا في مكان آخر. يتم تشغيل اختبارات الانحدار بشكل متكرر في كل دورة تطوير، بغض النظر عن الأخطاء المحددة التي تم إصلاحها. الفرق الرئيسي: إعادة الاختبار تتحقق من الإصلاح نفسه، الانحدار يتحقق من عواقب الإصلاح.
في خط أنابيب CI/CD، يتم تنفيذ كلتا العمليتين بالتسلسل. بعد دمج طلب السحب، يتم إجراء إعادة اختبار للخطأ المحدد، يليه تشغيل انحدار كامل أو انتقائي. وفقًا لـ SmartBear (2022)، فإن فصل هذه العمليات يقلل وقت تشخيص عمليات CI الفاشلة بنسبة 30%، حيث يرى الفريق على الفور أي العيوب مرتبطة بالانحدار وأيها بالإصلاحات غير العاملة.
تعد أتمتة اختبار الانحدار عاملاً حاسمًا للنجاح في المشاريع المحمولة الحديثة. اختبار الانحدار اليدوي لا يتوسع: مع مجموعة من 200 اختبار، تتطلب عملية تشغيل واحدة 2–3 أيام عمل من مهندس QA، مما يجعل عمليات التشغيل اليومية مستحيلة. يتم تنفيذ اختبارات الانحدار الآلية في 10–60 دقيقة دون تدخل بشري، مما يسمح بتشغيلها عند كل commit أو طلب سحب.
للحفاظ على مجموعة الانحدار محدثة، يتم استخدام تحليلات الاختبارات: أدوات مثل Allure وReportPortal وXray تتتبع نسب النجاح والمدة والاستقرار لكل اختبار. الاختبارات التي ينخفض استقرارها عن 90% (غالبًا ما تنكسر بسبب تغييرات في المتطلبات) يتم وضع علامة عليها كقديمة وتعيينها للمالك للمراجعة.
دعنا نلقي نظرة على إعداد اختبار انحدار آلي على Android باستخدام مكتبة JUnit 5 وEspresso. يوضح المثال الانحدار الانتقائي — يتحقق الاختبار من أنه بعد إعادة هيكلة مستودع المستخدمين، لا تتعطل شاشة الملف الشخصي. بالنسبة لنظام iOS، يتم استخدام XCTest بمنطق مماثل — اختبار متكرر على سيناريو رئيسي.
يستخدم الاختبار MockWebServer لمحاكاة الخادم ويتحقق من المسار الكامل: تحميل بيانات المستخدم، عرضها على شاشة الملف الشخصي، ومعالجة الخطأ عند عدم توفر الخادم. يتم تضمين هذه الاختبارات في مجموعة الانحدار وتنفيذها عند كل تغيير في وحدة الملف الشخصي.
@RunWith(AndroidJUnit4::class)
class ProfileRegressionTest {
@get:Rule
val composeRule = createComposeRule()
@Test
fun profileScreen_rendersCorrectly() {
val user = User(id = 1, name = "Alice", email = "alice@test.com")
composeRule.setContent {
ProfileScreen(user)
}
composeRule.onNodeWithText("Alice").assertIsDisplayed()
composeRule.onNodeWithText("alice@test.com").assertIsDisplayed()
}
@Test
fun profileScreen_handlesNetworkError() {
setNetworkError()
composeRule.onNodeWithText("خطأ في التحميل").assertIsDisplayed()
}
}
بالنسبة لنظام iOS، يستخدم اختبار الانحدار XCTestExpectation للتحقق غير المتزامن من تحديث واجهة المستخدم بعد تلقي البيانات من API. يحاكي الاختبار استجابة الشبكة ويتحقق من تحديث عناصر واجهة المستخدم بشكل صحيح.
class ProfileRegressionTests: XCTestCase {
func testProfileScreen_rendersCorrectly() {
let viewModel = ProfileViewModel(userId: 1)
let view = ProfileView(viewModel: viewModel)
viewModel.loadProfile()
let expectation = expectation(description: "profile loaded")
viewModel.onProfileLoaded = {
XCTAssertEqual(viewModel.userName, "Alice")
XCTAssertEqual(viewModel.userEmail, "alice@test.com")
expectation.fulfill()
}
waitForExpectations(timeout: 3.0)
}
}
بناء مجموعة انحدار فعالة هو عملية تكرارية تعتمد على بيانات العيوب وتغييرات الكود. الاستراتيجية الأولية هي تضمين جميع الاختبارات الحالية في مجموعة الانحدار وتشغيل تمريرة كاملة قبل كل إصدار. مع نمو قاعدة الاختبارات (أكثر من 2000 اختبار)، يصبح التشغيل الكامل طويلاً جدًا ويصبح النهج الانتقائي مطلوبًا.
المرحلة الثانية — تنفيذ أدوات تحليل التبعيات: Jacoco لنظام Android، Xcode Test Plan لنظام iOS. تبني هذه الأدوات خريطة «اختبار — فئة — طريقة» وتسمح بتحديد الاختبارات المتأثرة بتغيير معين. التشغيل الانتقائي القائم على تحليل التغطية يقلل وقت التنفيذ بنسبة 60–80% مع الحفاظ على فعالية اكتشاف الانحدار بنسبة 95%، وفقًا لـ Spotify Engineering (2022).
المرحلة الثالثة — المراقبة المستمرة والتحسين. الاختبارات التي لم تفشل لمدة 6 أشهر تُنقل إلى مجموعة ذات أولوية منخفضة. الاختبارات التي تفشل أكثر من مرة في الشهر هي مرشحة للمراجعة: إما أنها تكتشف مشاكل حقيقية (تحتاج إلى إصلاح) أو أنها هشة جدًا (تتطلب استقرارًا). المراجعة ربع السنوية لمجموعة الانحدار هي ممارسة قياسية للحفاظ على فعاليتها وسرعة تنفيذها.
الأسئلة الشائعة
تشغيل الانحدار الانتقائي — عند كل طلب سحب. تشغيل الانحدار الكامل — قبل كل إصدار وأسبوعيًا (بناء ليلي). القاعدة الأساسية: كلما زاد تكرار التشغيل، زادت سرعة اكتشاف حالات الانحدار وانخفضت تكلفة إصلاحها. للمشاريع الحرجة، يمكن إجراء انحدار كامل عند كل دمج.
جميع اختبارات الوحدة (الانحدار الأساسي)، اختبارات التكامل على المكونات الرئيسية، واختبارات UI على سيناريوهات المستخدم الحرجة. لا تضمّن اختبارات الوظائف التجريبية، والاختبارات ذات عدم الاستقرار (flakiness) أعلى من 10%، والاختبارات التي تتطلب بيئة يدوية.
قم بإزالة اختبارات الوظائف التي تمت إزالتها، وقم بتحديث الاختبارات عندما تتغير المتطلبات، وقم بإجراء تدقيق ربع سنوي للمجموعة. تحليلات CI — Allure, ReportPortal — تساعد في تحديد الاختبارات التي فقدت أهميتها: إذا لم يتغير الاختبار أو يفشل لمدة 3 أشهر، فهو مرشح للإزالة من التشغيل اليومي.
استخدم التنفيذ المتوازي للاختبارات على أجهزة متعددة، وطبّق الانحدار الانتقائي بناءً على تحليل تغطية الكود المعدل، وقم بتعطيل اللقطات المرئية للشاشات غير ذات الصلة. الوقت المستهدف للتشغيل الانتقائي: 5–10 دقائق، للتشغيل الكامل: لا يزيد عن ساعتين.
لا، اختبار الانحدار يشمل أيضًا فحوصات يدوية: الاختبار الاستكشافي بعد الإصدار، وانحدار تجربة المستخدم، والتحقق من إمكانية الوصول بعد تغييرات الواجهة. تغطي الأتمتة 70–80% من فحوصات الانحدار؛ أما 20–30% المتبقية فهي يدوية، مركزة على السيناريوهات التي يستحيل أو يكون من المكلف جدًا أتمتتها.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا