اختبار الأداء (Performance Test) هو عملية قياس سرعة واستجابة واستقرار تطبيق محمول تحت حمل العمل. بالمقارنة مع الاختبارات الوظيفية، التي تتحقق من صحة المنطق، فإن اختبارات الأداء تقيم مدى سرعة وسلاسة عمل التطبيق في ظروف العالم الواقعي. وفقًا لبحوث Google Research (2024)، يترك 53% من المستخدمين التطبيق إذا استغرق إطلاقه أكثر من 3 ثوان. اختبارات الأداء تساعد في تحديد الاختناقات قبل إصدار الإصدار وتضمن الالتزام بمعايير الجودة المقبولة.
النقاط الرئيسية
اختبار الأداء (Performance Test) هو نوع من الاختبارات غير الوظيفية الذي يحدد مدى سرعة وكفاءة التطبيق في تنفيذ مهامه. بالمقارنة مع اختبارات الوحدة أو اختبارات واجهة المستخدم، فإن اختبار الأداء يقيس الخصائص الكمية: وقت الاستجابة، حمل CPU، استهلاك RAM واستخدام البطارية. وفقًا لتقرير Sauce Labs (2025)، يضم 68% من فرق تطوير التطبيقات المحمولة اختبار الأداء في دورة الاختبار المنتظمة، ويؤتت 41% منه في CI.
الهدف الرئيسي لاختبار الأداء هو التأكد من أن التطبيق يلبي متطلبات الأداء المحددة في الوثائق. إذا تجاوز وقت إطلاق الشاشة 500 ملي ثانية أو استهلك التطبيق أكثر من 200 ميجابايت من RAM على جهاز متوسط، فهذا إشارة للتحسين. الخط الأساسي للأداء يتم تحديده عند أول إصدار مستقر ويتم مراجعته مع كل تحديث رئيسي.
يتم إجراء اختبار الأداء على أجهزة حقيقية، لا على المحاكيات، لأن المحاكاة لا توفر صورة دقيقة لاستخدام موارد CPU و GPU والشبكة. وفقًا لمؤتمر Apple WWDC (2024)، تظهر الاختبارات على المحاكي نتائج مرتفعة مقارنة بالجهاز الحقيقي بنسبة 15–30%. الجهاز الحقيقي يبقى المصدر الوحيد الموثوق لبيانات الأداء.
تعتمد حدود تنفيذ اختبار الأداء على دورة التطوير. وفقًا لتوصيات Google Android Performance (2024)، يجب أن تتم القياسات الأساسية في كل pull request، ومجموعة كاملة قبل كل إصدار. الأتمتة هذه القياسات تسمح باكتشاف الانحدارات في الأداء في مراحل مبكرة.
في تطوير التطبيقات المحمولة، يتم تحديد خمسة مقاييس رئيسية تغطي 90% من سيناريوهات اختبار الأداء. وقت الإطلاق (cold start و warm start) هو المقياس الأول الذي يتم التحقق منه في كل إصدار. تسجل Google Play Console (2024) وقت الإطلاق حسب العتبة: يجب ألا يتجاوز cold start 5 ثوان، و warm start — 1.5 ثانية. يؤثر تجاوز هذه العتبات مباشرة على التقييم في متجر التطبيقات.
يتم قياس cold start من لحظة النقر على الأيقونة حتى ظهور أول إطار للتطبيق. iOS تستخدم `dispatch_async` للتهيئة المؤجلة، مما يقلل وقت الإطلاق المرئي. يتضمن cold start في Android إنشاء العملية، تهيئة Application وبدء Activity. وفقًا لبيانات Google Performance (2024)، كل 100 ملي ثانية تأخير في cold start تقلل معدل التحويل بنسبة 1.2% في تطبيقات التجارة الإلكترونية.
FPS (Frames Per Second) هو معدل الإطارات خلال الرسوم المتحركة وتمرير القوائم. تتطلب واجهة سلسة 60 FPS مستقرة. يظهر Android Studio Profiler و Xcode GPU Report انخفاضات FPS أثناء العمليات الثقيلة — تحميل الصور، تحليل JSON أو عرض التصاميم المعقدة. ينخفض الانخفاض دون 30 FPS كلاق، ويؤدي إلى انخفاض معدل الاحتفاظ بنسبة 22% وفقًا لبيانات Adjust (2025).
استهلاك RAM هو المقياس الحرج الثالث. تسربات الذاكرة هي السبب الرئيسي لتدهور الأداء في الجلسات الطويلة. تساعد Instruments Allocations و Android Memory Profiler في اكتشاف المراجع الدائرية في Swift والأنشطة غير المفرجة في Android. استهلاك البطارية هو مقياس يتم تجاهله غالبًا خلال الاختبار. وفقًا لبيانات Apple Developer (2024)، تتم تقييد التطبيقات ذات استهلاك الطاقة العالي في الخلفية على iOS. Energy Log في Xcode يسجل ملف استهلاك الطاقة للتطبيق لكل جلسة.
| المقياس | العتبة | الأداة |
|---|---|---|
| Cold start | < 5 ث | Xcode Organizer, Google Vitals |
| FPS | ≥ 55 مستقر | Xcode GPU Report, Android Profiler |
| RAM | < 200 MB | Instruments, Memory Profiler |
| APK/IPA | < 150 MB | Xcode Build, Gradle APK Analyzer |
اختبار الحمل (Load Test) يتحقق من سلوك التطبيق تحت العدد المتوقع من المستخدمين المتزامنين. للباكيند المحمول، هذا يعني محاكاة 1000–10000 طلب API متزامن. يجب على الخادم تحمل الحمل الذروي دون زيادة وقت الاستجابة بأكثر من 20% من القيمة الأساسية. وفقًا لمعايير k6 (2024)، يتضمن تكوين Load Test النموذجي منحنى تصعدي من 0 إلى 1000 VUs (مستخدم افتراضي) خلال 5 دقائق.
اختبار الإجهاد (Stress Test) يحدد نقطة فشل التطبيق — اللحظة التي يتوقف فيها النظام عن الاستجابة للطلبات أو يتدهور بشكل غير مقبول. وخلافًا لاختبار الحمل، فإن اختبار الإجهاد يحمل النظام خارج الحدود الطبيعية. نقطة الفشل تسجل حسب أحد المعايير: تجاوز وقت الاستجابة 10 ثوان، أو تجاوز نسبة أخطاء 5XX نسبة 5%، أو وصول استهلاك RAM إلى 90% من الذاكرة المتوفرة.
اختبار الحجم (Volume Test) يقيم سلوك التطبيق عند العمل مع حجوم كبيرة من البيانات. في سياق التطبيقات المحمولة، يتضمن ذلك اختبار العمل مع آلاف السجلات في قاعدة بيانات محلية، عشرات الجيجابايت من مخزون التخزين المؤقت، أو ملايين إشعارات الدفع. SQLite على Android و Core Data على iOS يظهران أداءً مختلفًا عند تجاوز 100000 سجل.
Xcode Instruments هو الأداة الرئيسية لتحليل أداء تطبيقات iOS. يظهر Time Profiler الأساليب التي تستهلك أكبر قدر من CPU، بينما يتتبع Allocations تخصيص الذاكرة وتحريرها. يدعم Instruments التسجيل في جلسات طويلة (حتى 30 دقيقة) وتصدير المسارات للمقارنة بين البنيات. Activity Monitor داخل Instruments يظهر حمل النظام الإجمالي في الوقت الحقيقي.
Android Studio Profiler هو المحلل المضمن لنظام Android. يجمع بين محللات CPU والذاكرة والشبكة والطاقة في واجهة واحدة. من مميزات Android Profiler دعم الجلسات التفاعلية: يمكن للمطورين تنفيذ إجراءات في التطبيق ورؤية استجابة المقاييس الفورية. وفقًا لمؤتمر Google I/O (2024)، Profiler يدعم التسجيل بتنسيق .perf، والذي يمكن مقارنته مع الخط الأساسي في CI.
Charles Proxy و Proxyman هما أدوات لتحليل حركة الشبكة. تظهر وقت كل طلب HTTP، وحجم الاستجابة ورؤوس الطلب. لاختبار الأداء، من المهم تسجيل الطلبات التي تستغرق أكثر من 500 ملي ثانية — هذه مرشحة للتخزين المؤقت أو التحسين. Charles يدعم وصفة الخنق (throttle) لمحاكاة الشبكات البطيئة: 3G و Edge و LTE. Proxyman هو بديل أخف لنظام macOS مع معمارية Swift أصلية.
import XCTest
class PerformanceTests: XCTestCase {
func testLaunchPerformance() {
measure(metrics: [XCTClockMetric(),
XCTMemoryMetric()]) {
XCUIApplication().launch()
}
}
func testScrollPerformance() {
let app = XCUIApplication()
app.launch()
let tableView = app.tables["list"]
measure {
tableView.swipeUp()
tableView.swipeDown()
}
}
}
يعد دمج اختبار الأداء في CI/CD معيارًا صناعيًا لعامي 2025–2026. خط أنابيب الأداء يشمل ثلاث مراحل: ما قبل الإجراء (pre-commit) — قياسات سريعة على pull request، ليلية — مجموعة كاملة من الاختبارات، وما قبل الإصدار — مقارنة مع الخط الأساسي على أجهزة مرجعية. تدعم Bitrise و GitHub Actions تشغيل Xcode Instruments CLI و Gradle Profiler.
GitHub Actions (2024) نشرت قالبًا رسميًا لاختبار الأداء على iOS باستخدام `xcodebuild test-without-building`. يشغل القالب الاختبارات على إحدى آلات GitHub وينشر التقرير كقطعة فنية (artifact). الخط الأساسي يخزن في ملف JSON في المستودع: عند تجاوز العتبة بنسبة 10%، يفشل الخط الأنابيبي مع خطأ. يمنع هذا النهج تدهور الأداء دون مراجعة يدوية لكل بنية.
مشكلة اختبار الأداء المحمول في CI هي عدم استقرار النتائج على آلات مختلفة. تعطي Apple Silicon (M1–M4) و Intel Xeon أوقات تنفيذ مختلفة. الحل هو استخدام نسبة مئوية مقارنة بالخط الأساسي بدلًا من القيم المطلقة. إذا استغرق الاختبار وقتًا أكثر بنسبة 15% من الخط الأساسي، تُوسم البنية بأنها تتطلب المراجعة.
XCTest Performance على iOS يستخدم طريقة `measure(metrics:)`، التي تشغل كتلة الكود 10 مرات وتعيد إحصاءات: المتوسط، الوسيط، الانحراف المعياري. لاختبار أداء قاعدة البيانات، يستخدم XCTest XCTMemoryMetric بشكل ملائم لتسجيل استهلاك RAM الذروي. العتبة تحدد عبر `XCTPerformanceReport` بعد اكتمال الاختبار.
Android Macrobenchmark هي مكتبة من Google لقياس الأداء على مستوى التطبيق. تشغل Macrobenchmark سيناريوهات المستخدم (بدء Activity، تمرير RecyclerView، فتح WebView) وتقيس وقت التنفيذ. Baseline Profile هو مجموعة من الفئات والطرق التي يقوم مجمع Android بتحسينها مسبقًا. يستخدم Google Play Baseline Profile لتسريع أول إطلاق بنسبة 30%.
@RunWith(AndroidJUnit4::class)
class StartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() {
benchmarkRule.measureRepeated(
packageName = "com.example.app",
metrics = listOf(StartupTimingMetric()),
iterations = 5
) {
pressHome()
startActivityAndWait()
}
}
}
كلا النهجين — XCTest Performance و Android Macrobenchmark — يستخدمان نفس المفهوم: القياس المتكرر مع الحساب المتوسط والمقارنة مع عتبة. الأداء لا يمكن اختزاله إلى رقم واحد. يجب أن يصحب كل إصدار تقرير أداء يحتوي على اتجاهات المقاييس على مدار آخر 5 بنيات. يسمح هذا التقرير للفريق برؤية التدهور قبل أن يلاحظه المستخدمون.
الأسئلة الشائعة
Performance Test هو فئة واسعة تشمل Load Test و Stress Test و Volume Test وأنواعًا أخرى. Load Test هو حالة خاصة من Performance Test تتحقق من سلوك النظام تحت الحمل المتوقع. كل Load Tests هي Performance Tests، ولكن ليس العكس.
القياسات الأساسية (cold start، FPS، RAM) — في كل pull request. مجموعة كاملة من Performance Test — قبل كل إصدار. التشغيل الليلي — للمشاريع ذات البنيات اليومية. توصي Google بتنفيذ Macrobenchmark مرة واحدة على الأقل في اليوم.
تعتبر ثلاث مقاييس حرجة: وقت cold start (لا يزيد عن 5 ثوان)، FPS أثناء التمرير (لا يقل عن 55 FPS)، واستهلاك RAM الذروي (لا يزيد عن 200 MB). تتبع Google Play Console و App Store Connect هذه المقاييس تلقائيًا.
نعم، يتم أتمتة Performance Test بالكامل عبر Xcode CLI (`xcodebuild test`) و Gradle (`gradle connectedCheck`). تقوم أدوات مثل k6 و Gatling بأتمتة اختبارات الحمل للباكيند. التكامل مع CI/CD يسمح بتشغيل Performance Test دون تدخل بشري.
Baseline (الخط الأساسي) هو قياس مرجعي للأداء تقارن به نتائج البنيات الجديدة. يتم تحديد الخط الأساسي عند أول إصدار مستقر ويخزن في JSON أو XML. إذا تجاوزت البنية الجديدة الخط الأساسي بنسبة 10%، يشير خط أنابيب CI إلى انحدار.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا