وحدة 7 / 11

تصحيح الأخطاء وتحليل الأعطال باستخدام الذكاء الاصطناعي

المكاسب:

  • القدرة على تضييق نطاق الأسباب الجذرية المحتملة بسرعة عن طريق إعطاء سجلات الأعطال (تتبعات المكدس) للذكاء الاصطناعي باستخدام الكود ذي الصلة وسياق السيناريو
  • القدرة على حل السبب الجذري بشكل دائم بدلاً من التحقق من صحة تشخيص الذكاء الاصطناعي كفرضية في التعليمات البرمجية واختبار وإسكات الأعراض
  • حماية الخصوصية أثناء تصحيح الأخطاء عن طريق إخفاء البيانات الشخصية في سجلات وسجلات الأعطال

كل تطبيق يعطي أخطاء. ما يميز المطور الجيد هو مدى سرعة العثور على الأخطاء وإصلاحها. يعد تصحيح أخطاء الأجهزة المحمولة - العثور على مصدر المشكلة وإصلاحه - أمرًا صعبًا بشكل خاص لأن الخطأ يحدث على جهاز المستخدم، في بيئة لا يمكنك رؤيتها. في أغلب الأحيان، كل ما لديك هو سجل الأعطال (سجل الأعطال / تتبع المكدس - تحليل فني للمكان الذي ذهب إليه التطبيق عندما تعطل). الذكاء الاصطناعي قوي للغاية في قراءة هذه السجلات المشفرة، وسرد الأسباب المحتملة، واقتراح الحلول. سنتعلم في هذه الوحدة كيفية استخدام الذكاء الاصطناعي باعتباره "مكتشفًا للأخطاء" ولكننا نترك لك مسؤولية التحقق من التشخيص النهائي والإصلاح.

قراءة سجل الأعطال: حيث يتألق الذكاء الاصطناعي بشكل أكثر سطوعًا

سجل الأعطال هو نص طويل ومخيف؛ المطور عديم الخبرة لن يعرف أين يبحث. يقوم الذكاء الاصطناعي بتحليل هذا النص في ثوانٍ: عند أي سطر تعطل، وما هو الاستثناء الذي تم طرحه، وما هو السبب المحتمل. أخطاء الهاتف المحمول الشائعة واضحة ويتعرف عليها الذكاء الاصطناعي بسرعة: NullPointerException (محاولة الوصول إلى قيمة فارغة)، IndexOutOfBoundsException (الوصول إلى عنصر قائمة غير موجود) على Android، EXC_BAD_ACCESS (الوصول إلى الذاكرة المحررة) على iOS، تم العثور عليه بشكل غير متوقع لا شيء (فرض عدم وجود اختياري).

الأنواع الأكثر شيوعًا لتعطل الأجهزة المحمولة وأسبابها النموذجية هي كما يلي:

خطأ (استثناء)

منصة

سبب نموذجي

NullPointerException

أندرويد

الوصول إلى قيمة فارغة

IndexOutOfBoundsException

أندرويد

الوصول إلى عنصر القائمة غير الموجود

وجدت بشكل غير متوقع الصفر

دائرة الرقابة الداخلية

فرض إلغاء تغليف صفر اختياري (!)

EXC_BAD_ACCESS

دائرة الرقابة الداخلية

الوصول إلى الذاكرة المحررة

ANR/تجميد

أندرويد

معالجة طويلة/ثقيلة على الخيط الرئيسي

خطوة بخطوة تدفق التصحيح:

  1. جمع السجل. قم بتجميع سجل الأعطال ورسالة الخطأ والخطوات اللازمة لإعادة إنتاجه إن أمكن.
  2. أعط سياق الذكاء الاصطناعي. أخبرني ليس فقط بالخطأ، بل أخبرني بالجزء ذي الصلة من التعليمات البرمجية وما الذي حدث أثناء التعطل.
  3. اسأل عن الأسباب المحتملة. "أخبرني بالأسباب الثلاثة الأكثر احتمالاً وكيفية التحقق من كل منها."
  4. يؤكد. تأكيد السبب المقترح في التعليمات البرمجية والاختبار؛ لا تقم بإصلاحه عن طريق التخمين.
  5. إصلاحه واختبار مرة أخرى. تأكد من اختفاء الخطأ بالفعل وعدم ظهور أي أخطاء جديدة.
نصيحة: عند تسليم سجل الأعطال إلى الذكاء الاصطناعي، قم بتضمين مقتطف التعليمات البرمجية ذي الصلة أيضًا. فقط من خلال تتبع المكدس، يقوم الذكاء الاصطناعي بإجراء تنبؤ عام؛ عندما ترى الكود، فإن احتمال العثور على السطر الدقيق والسبب الحقيقي يزيد بشكل كبير. السياق يحدد جودة التشخيص.

فخ البيانات الشخصية

غالبًا ما تحتوي سجلات وسجلات الأعطال على بيانات المستخدم: البريد الإلكتروني، ومعرف المستخدم، والموقع، وحتى محتوى النموذج. يعد لصق هذا السجل في الذكاء الاصطناعي كما هو بمثابة تسريب للبيانات الشخصية إلى الطرف الثالث ويعد انتهاكًا لـ KVKK / الناتج المحلي الإجمالي. قم بمسح (قناع) المناطق الشخصية قبل إرسال التسجيل. احرص أيضًا على عدم كتابة بيانات شخصية في سجلات التطبيق الخاص بك من البداية؛ يصف السجل الجيد المشكلة ولكنه لا يكشف عن هويتها.

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

تحليل السبب الجذري

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

ثلاث حالات صغيرة

الحالة 1 - ساعتين من العمل في 10 دقائق. قضى أحد المطورين ساعتين في البحث عن خطأ تعطل فقط في طراز معين من سامسونج. تسليم سجل الأعطال (مسح المناطق الشخصية) إلى الذكاء الاصطناعي؛ قال YZ أن الخطأ يشير إلى تجاوز سعة الذاكرة الذي يحدث مع دقة كاميرا مختلفة لهذا الجهاز. ومع الدليل، تم العثور على السبب في 10 دقائق. قام الذكاء الاصطناعي بتسريع عملية البحث، وتحقق الإنسان من الحل.

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

الحالة 3 - تسرب البيانات في السجل. وجدت عملية التدقيق أن الأسماء الكاملة للمستخدمين وأرقام هواتفهم تمت كتابتها في سجلات أعطال التطبيق. قام المطورون بلصق هذه السجلات بشكل روتيني في الذكاء الاصطناعي وقاموا بإصلاح الأخطاء؛ لذلك ظلت البيانات الشخصية تخرج منذ أشهر. تم إخفاء السجلات وتم تصحيح العملية. الدرس المستفاد: تنطبق السرية حتى عند تصحيح الأخطاء.

موجه ضعيف / موجه قوي

مطالبة سيئة: "لماذا يحدث هذا الخطأ؟ [تتبع المكدس]"

موجه قوي: "يحدث هذا العطل في تطبيق Android الخاص بي. السياق: - أثناء القيام بذلك: يضيف المستخدم إلى عربة التسوق من تفاصيل المنتج - فقط على بعض الأجهزة، نماذج ذاكرة الوصول العشوائي المنخفضة - التعليمات البرمجية ذات الصلة: [جزء ViewModel والمستودع] - سجل الأعطال (تم مسح البيانات الشخصية): [تتبع المكدس] أدرج الأسباب الجذرية الثلاثة الأكثر احتمالية. لكل: 1) كيف يمكنني التحقق، 2) الإصلاح الدائم (وليس إسكات). اذكر افتراضك حيث لم تكن متأكدًا."

قوالب قابلة للنسخ

قالب تحليل الأعطال: "تحليل الأعطال التالية. السياق: [ما تفعله، أي جهاز/إصدار]. الكود ذو الصلة: [كود]. سجل الأعطال (تم مسح البيانات الشخصية): [تتبع]. أعط 3 أسباب جذرية محتملة والتحقق منها + إصلاح دائم لكل منها. ضع علامة أيضًا على الحلول البديلة التي تعمل على إسكات الأعراض."

قالب السبب الجذري: "تأتي هذه القيمة [فارغة/خطأ] بشكل غير متوقع. اتبع تدفق البيانات من الإدخال إلى هذه النقطة: أين يمكن أن تفقد أو تتلف؟ أخبرني أين يجب أن أتحقق في كل مرحلة. [رمز]"

قالب قراءة السجل: "تفسير مخرجات السجل هذه: ما الأحداث التي حدثت بالترتيب، وأين يوجد الخلل، وما هي آخر خطوة صحية قبل الخطأ؟ [السجل - تم مسح البيانات الشخصية]"

قالب إعادة الإنتاج: "ما هي الخطوات وحالات الجهاز والبيانات التي يجب أن أحاول إعادة إنتاج هذا الخطأ بشكل موثوق؟ قم بإدراج الشروط التي قد تؤدي إلى حدوث الخطأ حسب الترتيب الاحتمالي. [الوصف]"

الأخطاء الشائعة

  • إعطاء تتبع مكدس خالي من السياق. بدون التعليمات البرمجية والسيناريوهات ذات الصلة، يقوم الذكاء الاصطناعي بالتنبؤ العام.
  • لصق البيانات الشخصية في الذكاء الاصطناعي مع السجلات. خرق السرية؛ قناع أولا.
  • إسكات الأعراض. يؤدي إخفاء العطل باستخدام أداة محاولة الالتقاط إلى ترك المشكلة الجذرية وخلق مشاكل جديدة.
  • تطبيق الاقتراح الأول دون التحقق منه. إن تشخيص الذكاء الاصطناعي هو مجرد فرضية؛ تأكيد في الرمز.
  • محاولة إعادة إنتاجه في المحاكي. تظهر بعض الأخطاء فقط على الجهاز/الحالة الفعلية.
  • عدم إعادة الاختبار بعد التصحيح. ربما يكون الإصلاح قد عطل شيئًا آخر؛ التحقق من الانحدار.

في ملخص

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

مهمة التطبيق

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

قائمة مرجعية

  • [ ] لقد قدمت سجل الأعطال مع الكود ذي الصلة وسياق السيناريو
  • [ ] قمت بإخفاء البيانات الشخصية/المميزة في السجلات
  • [ ] سألت الذكاء الاصطناعي عن السبب الجذري والإصلاح الدائم، وليس الإسكات
  • [ ] لقد تحققت من التشخيص من خلال الكود والاختبار، ولم أطبقه بشكل أعمى
  • [ ] بعد الإصلاح، اختبرت أن الخطأ قد انتهى ولم يكن هناك أي تراجع
  • [ ] لقد تأكدت من أن طلبي لا يكتب بيانات شخصية في سجلاته