أداء تطبيقات الجوال

أداء تطبيق الجوال هو مدى سرعة استجابته ومقدار ما يستهلكه من موارد الهاتف أثناء ذلك. وبمصطلحات معيار ISO/IEC ⁦25010⁩ يشمل خاصيتين فرعيتين من كفاءة الأداء (Performance efficiency) هما السلوك الزمني (Time behaviour) واستخدام الموارد (Resource utilisation)، وعلى الهاتف تحمل خمسة مقاييس معظم المخاطر: زمن بدء التشغيل، ومعدّل الإطارات، والذاكرة، والبطارية، والسلوك في ظروف الشبكة الحقيقية. وتفحص كلاً منها مقابل هدف متفق عليه أو مقابل الإصدار السابق، على الأجهزة التي يملكها مستخدموك فعلاً.

مثال: تطبيق تسوّق يعرض شاشته الرئيسية في ⁦1.8⁩ ثانية على الهاتف الرائد (Flagship) الجديد لدى المطور. أما على أرخص هاتف يدعمه الفريق، وبدءاً من عملية (Process) متوقفة، فتستغرق الشاشة نفسها ⁦4.6⁩ ثانية، وتتقطّع قائمة المنتجات أثناء تحميل الصور، وعلى اتصال جوال ضعيف تنتظر الشاشة الرئيسية ⁦19⁩ طلباً. لا تفشل أي حالة اختبار وظيفية، ومع ذلك يلاحظ الفرقَ كلُّ من يستخدم هذا الهاتف.

لماذا يهم

يحكم المستخدمون على التطبيق في ثوانيه الأولى ومع كل تمرير. فالبدء البطيء أو القائمة المتقطّعة أو الهاتف الذي يسخن ويفقد شحنه قد يؤدي إلى حذف التطبيق وتقييمات ضعيفة في المتجر. والمنصتان تقيسان ذلك أيضاً: فمؤشرات Android vitals في Google Play Console تعرض زمن بدء التشغيل والإطارات البطيئة والمتجمّدة والسلوك المرتبط بالبطارية من أجهزة حقيقية، وتعرض نافذة Organizer في Xcode زمن الإطلاق وحالات التعليق (Hangs) والذاكرة واستهلاك البطارية من المستخدمين الذين يشاركون بيانات التحليلات.

وبالنسبة إلى المختبِر، يسهل أن تفوته عيوب الأداء لأنها تعتمد على الظروف: جهاز رخيص، أو بدء بارد، أو جلسة طويلة، أو إشارة ضعيفة. كما أنها تتسلل قليلاً مع كل إصدار حتى يصبح التطبيق أبطأ بوضوح مما كان. وقياس السيناريوهات نفسها بالطريقة نفسها في كل إصدار يحوّل عبارة «يبدو بطيئاً» إلى أرقام يستطيع المطور العمل بها.

المقاييس الخمسة وما يعنيه كل منها

لكل مقياس تعريفه وطريقته الخاصة في الإخفاق. فتعلّم المفردات أولاً: التقرير الذي يقول «بدء التشغيل بطيء» أضعف بكثير من تقرير يقول «البدء البارد حتى أول إطار ارتفع من ⁦1.4⁩ ثانية إلى ⁦2.6⁩ ثانية».

  • زمن بدء التشغيل: البدء البارد (Cold start) يُطلق التطبيق وعمليته غير قائمة، فيُنشأ كل شيء ويُحمَّل؛ والبدء الدافئ (Warm start) يعيد استخدام جزء مما هو موجود لكنه يعيد إنشاء الشاشة؛ والبدء الساخن (Hot start) يعيد فقط شاشة ما زالت في الذاكرة إلى الواجهة. ويسمّي Android لحظتين: زمن العرض الأولي (Time to initial display - TTID) أي أول إطار، وزمن العرض الكامل (Time to full display - TTFD) حين يصبح المحتوى الذي جاء المستخدم من أجله جاهزاً، ويُبلغ عنه التطبيق باستدعاء reportFullyDrawn(). وتقيس Android vitals زمن البدء حتى أول إطار (TTID)، وتَعُدّ زمناً مفرطاً كلَّ بدء بارد يستغرق ⁦5⁩ ثوانٍ أو أكثر، وكلَّ بدء دافئ يستغرق ثانيتين أو أكثر، وكلَّ بدء ساخن يستغرق ⁦1.5⁩ ثانية أو أكثر.
  • معدّل الإطارات: عند ⁦60⁩ هرتز يملك التطبيق نحو ⁦16.7⁩ مللي ثانية لإنتاج كل إطار، وعند ⁦120⁩ هرتز نحو ⁦8.3⁩ مللي ثانية. والإطارات التي تتجاوز هذه الميزانية تظهر تقطّعاً يسمى Jank (وتتحدث Apple عن «hitches»). وتعرض Android vitals العرض البطيء (Slow rendering) والإطارات المتجمّدة (Frozen frames)؛ والإطار المتجمّد هو الذي يستغرق عرضه أكثر من ⁦700⁩ مللي ثانية. والسبب المعتاد عمل طويل على الخيط الرئيسي (Main thread)، وهو الخيط نفسه الذي يؤدي انسداده إلى حالة ANR التي رأيتها في درس Android وiOS.
  • الذاكرة: راقب الذروة التي يحتاجها المسار، وهل تعود الذاكرة إلى خط الأساس (Baseline) عند انتهائه؛ فالذاكرة التي تنمو مع كل تكرار تعني تسرّباً (Memory leak). والاستهلاك المرتفع يؤدي إلى إنهاء التطبيق: في الخلفية يُنهيه النظام أسرع، فقد يعود المستخدم إلى تطبيق أُعيد تشغيله وفقد ما أدخله؛ وفي المقدمة يُنهيه تجاوزُ حدّه على شكل انهيار بسبب نفاد الذاكرة (Out of memory).
  • البطارية: تذهب الطاقة إلى الشاشة والمعالج وأجهزة الاتصال اللاسلكي والمستشعرات مثل GPS. والعيوب المعتادة عمل لا يتوقف: تحديثات الموقع بعد مغادرة المستخدم للخريطة، وأقفال الإيقاظ (Wake locks) التي تُبقي المعالج مستيقظاً، والاستعلام من الخادم كل بضع ثوانٍ، ومهام الخلفية التي تتجاهل وضع الخمول Doze في Android أو وضع الطاقة المنخفضة (Low Power Mode) في iOS. وتعرض إعدادات البطارية في كل منصة حصة كل تطبيق.
  • ظروف الشبكة: ينتقل المستخدمون بين Wi-Fi وبيانات جوال سريعة وبطيئة وانعدام الإشارة. والكمون (Latency)، أي زمن كل رحلة ذهاب وإياب، يعاقب الشاشات التي ترسل طلبات كثيرة واحداً تلو الآخر؛ وعرض النطاق (Bandwidth) المنخفض يعاقب الصور والاستجابات الكبيرة؛ وفقدان الحزم (Packet loss) يفرض إعادة إرسال البيانات المفقودة فيزيد التأخير.
مقاييس أداء الجوال الخمسة في جدول واحد: ما تسجّله للبدء والإطارات والذاكرة والبطارية والشبكة، وأدوات Android وiOS التي تُظهره، وعلامة التحذير التي تدل على عيب.
المقياسما تسجّلهكيف: Android ثم iOSعلامة التحذير
زمن بدء التشغيلالبدء البارد والدافئ والساخن؛ TTID وTTFDوسيط ⁦10⁩ تشغيلات على نسخة إصدارAndroid: الأمر am start -W بعد am force-stopiOS: قالب App Launch في Instrumentsبدء بارد يستغرق ⁦5⁩ ثوانٍ أو أكثرزمن مفرط في Android vitals، أو أبطأ من الإصدار السابق
معدّل الإطاراتزمن الإطار مقابل الميزانية⁦16.7⁩ مللي ثانية عند ⁦60⁩ هرتز، و⁦8.3⁩ عند ⁦120⁩ هرتزAndroid: الإطارات المتقطّعة والمئينات في dumpsys gfxinfoiOS: أداة Animation Hitches في Instrumentsتقطّع مرئي أثناء التمريرإطارات متجمّدة تتجاوز ⁦700⁩ مللي ثانية
الذاكرةالذروة أثناء المسار والعودة إلى خط الأساسكرّر المسار نفسه ⁦20⁩ مرةAndroid: الأمر dumpsys meminfo ومحلّل الذاكرة في Android StudioiOS: أداتا Allocations وLeaks في Instrumentsنمو مع كل تكرارتطبيق أُعيد تشغيله بعد العودة من الخلفية
البطاريةالاستنزاف في جلسة ثابتة؛ وعمل الخلفية⁦30⁩ دقيقة على البطارية، ثم ساعة في الخلفيةAndroid: الأمر dumpsys batterystatsiOS: مقياس الطاقة في Xcode؛ وفي المنصتين: حصة كل تطبيق في الإعداداتالموقع أو أقفال الإيقاظ أو الاستعلام ما زالت نشطة بعد مغادرة الشاشة
ظروف الشبكةالزمن حتى شاشة قابلة للاستخدام والبيانات المستهلكة، لكل ملف تعريفWi-Fi جيد، و4G معتاد، وملف ضعيف يشبه 3GAndroid: سرعة المحاكي وتأخيره، أو وكيل يُبطئ الاتصالiOS: ملفات تعريف Network Link Conditionerطلبات متتابعة كثيرة؛ واستجابات كبيرةمؤشر تحميل لا ينتهي

حدود البدء والإطارات المتجمّدة من Android vitals، وميزانية الإطار تنتج عن معدل التحديث. قارن كل نتيجة بالإصدار السابق على الجهاز نفسه.

القياس الموثوق: الظروف قبل الأرقام

لا معنى للرقم إلا مع ظروفه. فنسخ التصحيح (Debug builds) تحمل فحوصاً إضافية وقد تكون أبطأ بكثير مما يثبّته المستخدمون، لذا قِس نسخة الإصدار (Release build). واستخدم أجهزة حقيقية، بدءاً بأضعف جهاز تدعمه؛ فالمحاكي يعمل على معالج حاسوبك ولا يخبرك بالكثير عن هاتف اقتصادي. وحافظ على الحالة نفسها بين التشغيلات: الحساب والبيانات نفسها، والتطبيقات الأخرى مغلقة، ووضع توفير الطاقة متوقف، واترك الهاتف الساخن يبرد، لأن الحرارة تُبطئ المعالج.

كرّر كل قياس (عشرة تشغيلات خيار شائع) وأبلغ عن الوسيط (Median)، أي القيمة الوسطى بعد ترتيب التشغيلات، مع مدى التفاوت من أدنى تشغيل إلى أعلاه؛ فتشغيل واحد لا يثبت شيئاً. وقارن بالإصدار السابق مقيساً بالطريقة نفسها، فهذا يكشف الانحدار حتى حين لم يضع أحد هدفاً. وأرقام مختبرك تعيد إنتاج المشكلات وتؤكد الإصلاحات، أما البيانات الميدانية في Android vitals وOrganizer في Xcode فتُظهر ما يعيشه المستخدمون الحقيقيون على أجهزة كثيرة.

# Android: release build on a real device, adb from the SDK platform tools
adb shell am force-stop com.example.shop          # the next launch is a cold start
adb shell am start -W -n com.example.shop/.MainActivity
#   TotalTime: 1873                                 # ms to the first frame, about TTID
adb logcat -d | grep "Fully drawn"                  # TTFD, if the app reports it
#   ... Fully drawn com.example.shop/.MainActivity: +2s105ms
adb shell dumpsys gfxinfo com.example.shop reset    # clear the frame statistics
#   ...scroll the list for 30 seconds...
adb shell dumpsys gfxinfo com.example.shop          # janky frames, frame percentiles
adb shell dumpsys meminfo com.example.shop          # memory used by the app process
adb shell dumpsys batterystats --reset              # start a battery session
#   ...unplug the phone, use the app for 30 minutes, plug it back in...
adb shell dumpsys batterystats com.example.shop     # the app's use since the reset

# iOS: Xcode > Product > Profile opens Instruments with templates such as
#   App Launch, Time Profiler, Animation Hitches, Allocations, Leaks, Network

جرّبها: محوّل البايت / KB / MB / GB

الاختبار في ظروف شبكة حقيقية

عرض دليل السيناريوهات كيف تبدّل الشبكات وتفرض حالات انعدام الاتصال. أما في الأداء فالسؤالان هما: كم ينتظر المستخدم، وكم من البيانات يستهلك التطبيق على اتصال ضعيف؟ استخدم مجموعة ثابتة من ملفات تعريف الشبكة (Profiles) لتبقى النتائج قابلة للمقارنة، مثل Wi-Fi جيد و4G معتاد وملف ضعيف يشبه 3G بكمون مرتفع وبعض الفقد. يضبط محاكي Android السرعة والتأخير، ويقدّم Network Link Conditioner في iOS ملفات مثل 3G وEdge و«Very Bad Network»، ويغطي وكيلٌ (Proxy) يُبطئ الاتصال أو شبكة Wi-Fi اختبارية مقيّدة أجهزةَ Android الحقيقية.

يتراكم الكمون مع الطلبات المتتابعة: ستة استدعاءات واحداً بعد الآخر بزمن ⁦300⁩ مللي ثانية لكل رحلة ذهاب وإياب تكلّف ⁦1.8⁩ ثانية على الأقل من انتظار الشبكة وحده. وعرض النطاق يعاقب الحجم: استجابة بحجم ⁦2⁩ ميغابايت لا يلاحظها أحد على Wi-Fi المكتب تستغرق ثوانيَ على اتصال بطيء. اسأل كم طلباً ترسل كل شاشة رئيسية وما حجمها، وتحقّق من أن الاستجابات مضغوطة وأن الصور تصل بالحجم الذي تعرضه الشاشة.

  • الزمن من النقر حتى شاشة قابلة للاستخدام على كل ملف تعريف، مأخوذاً من تسجيل للشاشة أو من توقيت التطبيق نفسه.
  • التغذية الراجعة أثناء الانتظار: تظهر حالة التحميل فوراً وتبقى الشاشة مستجيبة.
  • المهلات وإعادة المحاولة: الطلب المعلّق ينتهي برسالة واضحة، وإعادة المحاولة لا تضاعف حركة البيانات.
  • زمن الواجهة البرمجية مقيساً على حدة، لتعرف هل التأخير من الخادم أم من الشبكة أم من التطبيق.

جرّبها: محلّل حجم الاستجابة جرّبها: محاكي رموز حالة API جرّبها: محلّل زمن الاستجابة

مثال تطبيقي: قائمة مطاعم تتقطّع

يستعد تطبيق لتوصيل الطعام لإصدار ⁦3.2⁩، ويقول زملاء يجرّبون النسخة المرشحة للإصدار (Release candidate) إن قائمة المطاعم «ثقيلة» على الهواتف الأرخص. يثبّت المختبِر النسخة المرشحة، وللمقارنة الإصدار الحالي ⁦3.1.4⁩، على أضعف هاتف Android مدعوم (شاشة ⁦60⁩ هرتز)، ويسجّل الدخول بحساب الاختبار المعتمد، ويمرّر القائمة حتى نهايتها ويعود لمدة ⁦30⁩ ثانية، ويجمع إحصاءات الإطارات والذاكرة. ثلاثة تشغيلات لكل إصدار تعطي القيم الوسيطة أدناه.

تؤكد إحصاءات الإطارات الشكوى: فالإصدار الجديد يعرض إطارات أقل في الثواني الثلاثين نفسها، ويتجاوز عدد أكبر بكثير منها الميزانية؛ فالمئين التسعون (90th percentile) البالغ ⁦38⁩ مللي ثانية يعني أن إطاراً من كل عشرة استغرق ⁦38⁩ مللي ثانية أو أكثر. وتكشف حركة الشبكة سبباً محتملاً: كل بطاقة مطعم تنزّل الآن صورة بحجم ⁦600⁩ كيلوبايت يصغّرها الهاتف إلى صورة مصغّرة صغيرة، وفكّ ترميز الصور الكبيرة وتصغيرها يكلّفان وقتاً من المعالج وذاكرةً، مما يؤخّر الإطارات.

  • الحكم: انحدار في الأداء مقارنةً بالإصدار ⁦3.1.4⁩ في كل مقاييس الإطارات وفي الذاكرة؛ فقد ارتفعت الإطارات المتقطّعة من ⁦4.1%⁩ إلى ⁦27.8%⁩.
  • عنوان تقرير الخطأ: «تمرير قائمة المطاعم: ⁦27.8%⁩ إطارات متقطّعة على Android منخفض المواصفات مقابل ⁦4.1%⁩ في ⁦3.1.4⁩»، مع الجهاز والنسخة والخطوات والجدول وتسجيل للشاشة ورابط صورة مع حجمها.
  • تأكيد السبب المحتمل مسؤولية المطور؛ والإصلاح المتوقع صور مصغّرة تُرسَل بحجم العرض.
  • يكرر اختبار التأكيد السيناريو نفسه على الجهاز نفسه ويقارن كل الصفوف، ثم ينضم السيناريو إلى قائمة فحص الأداء في كل إصدار.
Device:   lowest-end supported Android phone, 60 Hz display, release builds
Scenario: restaurant list, scroll to the end and back for 30 s, median of 3 runs

                              3.1.4 (current)    3.2.0-rc1
Total frames rendered              1,710            1,240
Janky frames                       4.1 %            27.8 %
90th percentile frame time         14 ms            38 ms
99th percentile frame time         31 ms            160 ms
Memory after scroll (meminfo)      160 MB           410 MB
Photo per restaurant card          45 KB            600 KB

جرّبها: محلّل حجم الاستجابة

أخطاء شائعة

  • القياس على هاتف المطور الرائد أو على محاكٍ، ثم تقديم النتيجة على أنها أداء التطبيق.
  • قياس نسخة التصحيح (Debug build) والإبلاغ عن بطء لا وجود له في نسخة الإصدار.
  • اعتبار تشغيل واحد نتيجةً؛ فأرقام البدء والإطارات تتفاوت، لذا استخدم عدة تشغيلات والوسيط.
  • تسمية كل إطلاق بدءاً بارداً. فإن كانت العملية ما زالت تعمل فقد قِست بدءاً دافئاً أو ساخناً؛ أوقفها أولاً.
  • اختبار الذاكرة والبطارية في جلسات من خمس دقائق. فالتسرّب والاستنزاف يحتاجان إلى تكرار ووقت: المسار نفسه عشرين مرة، وجلسة من ⁦30⁩ دقيقة، وساعة في الخلفية.
  • الاختبار على Wi-Fi المكتب فقط، أو الاكتفاء بالتحقق من عمل الوضع دون اتصال، دون قياس مدة انتظار المستخدم على اتصال بطيء.

من منظور ضمان الجودة

في الفريق يبدأ عمل أداء الجوال بالأهداف. اطلب من مالك المنتج والمطورين ميزانية لكل رحلة أساسية، مثل البدء البارد حتى شاشة رئيسية قابلة للاستخدام، والتمرير السلس للقائمة الرئيسية على أضعف جهاز مدعوم. وحيث لا يملك أحد رقماً يكون الإصدار السابق هو خط الأساس، ويُبلَّغ عن الانحدار الواضح بوصفه عيباً.

احتفظ بقائمة فحص أداء قصيرة لكل نسخة مرشحة للإصدار: الأجهزة نفسها ونوع النسخة والسيناريوهات وملفات تعريف الشبكة، والنتائج في جدول بجانب الإصدار السابق، مع إرفاق المخرجات الخام والتسجيلات. وبعد الإصدار اقرأ Android vitals وOrganizer في Xcode مع المطورين: فأجهزة المستخدمين تجد مشكلات فاتت مختبرك، وكل واحدة منها تصبح سيناريو مختبر يمكنك تكراره.

تمرين عملي

احكم على نتائج أداء نسخة مرشحة للإصدار

المطلوب

اختبرت النسخة المرشحة ⁦5.4⁩ لتطبيق تسوّق مقابل الإصدار الحالي ⁦5.3⁩ على أضعف هاتف Android مدعوم، بنسخ إصدار وبطريقة هذا الدرس. قرّر لكل صف: هل هو انحدار يجب الإبلاغ عنه، أم نتيجة ضمن التفاوت الطبيعي، أم سبب لمزيد من القياس؟ ثم اكتب عنوان أهم تقرير خطأ.

المادة
App: shopping, lowest-end supported Android phone, release builds, office Wi-Fi
Startup rows: median of 10 cold starts after force-stop, (min-max) in brackets

Measure                                5.3                5.4
Cold start, first frame (TTID)         1.4 s (1.3-1.6)    1.5 s (1.3-1.7)
Cold start, home ready (TTFD)          2.1 s (1.9-2.4)    3.9 s (3.6-4.3)
Janky frames, search results scroll    6 %                7 %
Memory before -> after 20x product     142 -> 147 MB      142 -> 236 MB
Battery used, 30-minute browse         4 %                4 %
Home screen requests / transferred     7 / 480 KB         19 / 2.6 MB
الخطوات
  1. قارن كل صف في ⁦5.4⁩ بنظيره في ⁦5.3⁩ وسجّل الفرق.
  2. حدّد أي الفروق أكبر من التفاوت بين التشغيلات، مستعيناً بالمدى المعطى.
  3. اربط الصفوف ببعضها: أي نتيجة قد تفسّر نتيجة أخرى؟
  4. اكتب عنوان تقرير الخطأ مع المقياس والأرقام والجهاز والمقارنة.
إظهار الإجابة النموذجية
الإجابة النموذجية

TTID: ⁦1.5⁩ ثانية مقابل ⁦1.4⁩ ثانية، والمديان متداخلان (⁦1.3–1.6⁩ و⁦1.3–1.7⁩). النتيجة ضمن التفاوت الطبيعي؛ لا بلاغ.

TTFD: ⁦3.9⁩ ثانية مقابل ⁦2.1⁩ ثانية، والمديان غير متداخلين. هذا انحدار واضح يجب الإبلاغ عنه: ينتظر المستخدم ⁦1.8⁩ ثانية أكثر حتى تصبح الشاشة الرئيسية قابلة للاستخدام. ولا يعفيه حدّ الثواني الخمس في Android vitals، لأن ذلك الحد يخص أول إطار، والإصدار السابق هو خط الأساس هنا.

طلبات الشاشة الرئيسية: ⁦19⁩ طلباً و⁦2.6⁩ ميغابايت مقابل ⁦7⁩ طلبات و⁦480⁩ كيلوبايت. هذا يفسّر على الأرجح انحدار TTFD وسيكون أسوأ بكثير على اتصال بطيء، فقِس TTFD على ملف 3G الضعيف أيضاً وأرفق النتيجتين.

الذاكرة: بعد فتح منتج ⁦20⁩ مرة يعود الإصدار ⁦5.3⁩ قريباً من خط الأساس (⁦+5⁩ ميغابايت) بينما يحتفظ ⁦5.4⁩ بـ⁦94⁩ ميغابايت إضافية. والذاكرة التي تنمو مع التكرار تشير إلى تسرّب في شاشة المنتج؛ أبلغ عنه مع الخطوات واطلب من المطور تحليل لقطة الذاكرة (Heap dump)، أي صورة للكائنات الموجودة في الذاكرة.

الإطارات المتقطّعة ⁦6%⁩ مقابل ⁦7%⁩، والبطارية ⁦4%⁩ مقابل ⁦4%⁩: لا تغيّر ذا معنى. كما أن قراءة البطارية تتحرك بنسب مئوية كاملة، فلا تُظهر إلا الفروق الكبيرة؛ دوّن ذلك وانتقل.

عنوان تقرير الخطأ: «البدء البارد حتى شاشة رئيسية قابلة للاستخدام ⁦3.9⁩ ثانية في ⁦5.4⁩ مقابل ⁦2.1⁩ ثانية في ⁦5.3⁩ (وسيط ⁦10⁩ تشغيلات، أضعف هاتف Android)». ويغطي تقرير ثانٍ نمو الذاكرة في شاشة المنتج.

أسئلة شائعة

ما الفرق بين البدء البارد والدافئ والساخن؟

البدء البارد يُنشئ عملية التطبيق من لا شيء، فهو الأبطأ والأولى بالقياس أولاً. والبدء الدافئ يعيد استخدام جزء مما هو موجود، مثل عملية ما زالت تعمل، لكنه يعيد إنشاء الشاشة. والبدء الساخن يعيد شاشة موجودة إلى الواجهة فقط. أوقف العملية (مثلاً بالأمر adb shell am force-stop) لتتأكد أنك تقيس بدءاً بارداً.

على أي جهاز أقيس؟

ابدأ بأضعف جهاز تدعمه رسمياً، لأن المشكلات تظهر عليه أولاً وبأكبر حجم. وأضف جهازاً متوسطاً شائعاً، ولقياس الإطارات جهازاً بشاشة عالية معدل التحديث، حيث ميزانية الإطار أقصر. والمحاكيات مفيدة لملفات تعريف الشبكة والفحوص الوظيفية، لا لقياس الأزمنة.

هل يمكن أتمتة فحوص أداء الجوال؟

جزئياً. على Android تقيس مكتبة Jetpack Macrobenchmark زمن البدء وتوقيت الإطارات على جهاز حقيقي، وعلى iOS يمكن لاختبارات الأداء في XCTest قياس زمن الإطلاق والذاكرة ومقاييس أخرى عبر XCTApplicationLaunchMetric وأصناف مقاييس مماثلة. والتشغيلات المؤتمتة جيدة في كشف الانحدار بين النسخ، لكن الجلسات الاستكشافية على أجهزة حقيقية والبيانات الميدانية من المستخدمين تبقى ضرورية.

هل اختبار أداء الجوال هو نفسه اختبار الحمل على الخادم؟

لا. اختبار الحمل (Load testing) يفحص سلوك الخادم مع مستخدمين كثيرين في الوقت نفسه. أما اختبار أداء الجوال فينظر إلى جهاز مستخدم واحد: البدء والسلاسة والذاكرة والبطارية وزمن الانتظار على شبكة حقيقية. والواجهة البرمجية البطيئة تؤثر في الاثنين، لذا قِس زمن استجابتها على حدة لتعرف أي جانب يحتاج إلى الإصلاح.

المراجع

  • Android vitalsAndroid Developers (Google)مقاييس جودة التطبيقات التي يجمعها Google Play من أجهزة المستخدمين — ومنها معدّلا الأعطال وعدم الاستجابة (ANR) كما يلحظهما المستخدم ضمن المؤشرات الأساسية — وحدود السلوك السيئ التي تؤثر في ظهور التطبيق.
  • Certified Tester Mobile Application Testing (CT-MAT)ISTQB · 2019منهج ISTQB التخصصي لاختبار تطبيقات الجوال: أنواع التطبيقات وتحديات الأجهزة والمنصات وأنواع الاختبار والأدوات.
  • ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelISO/IEC · 2023نموذج جودة المنتج: الملاءمة الوظيفية وكفاءة الأداء والتوافق وقابلية التفاعل والموثوقية والأمان وقابلية الصيانة والمرونة.
  • XCTestAppleإطار Apple لاختبارات الوحدة والأداء والواجهة لمشاريع Xcode على iOS وبقية منصات Apple.

تدرّب بأدوات متقن

حلّل حجم الاستجابة: البايتات الخام مقابل المضغوطة، وحجم الترويسات، ووزن بنية JSON، وأكبر الحقول.

الأداء

احصل على نقطة نهاية عامة تعيد أي رمز حالة HTTP، مع تأخير اختياري وجسم JSON مخصّص، لاختبار معالجة الأخطاء في العميل.

اختبار واجهات API

قِس زمن استجابة نقطة نهاية عبر عدة عيّنات: الحد الأدنى والأقصى والمتوسط والوسيط وp95.

الأداء

التحويل بين البايت وKB وMB وGB وTB (النظام العشري SI) وKiB وMiB وGiB (النظام الثنائي IEC)، إضافة إلى البتات.

أدوات مساعدة

للتعمّق أكثر

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة