واحد 7 / 11

اشکال زدایی و تجزیه و تحلیل خرابی با هوش مصنوعی

سود:

  • امکان محدود کردن سریع علل احتمالی احتمالی با دادن رکوردهای خرابی (ردیابی پشته) به هوش مصنوعی با کد و زمینه سناریو مربوطه
  • توانایی حل دائمی علت اصلی به جای تایید تشخیص هوش مصنوعی به عنوان یک فرضیه در کد و آزمایش و خاموش کردن علائم
  • محافظت از حریم خصوصی هنگام اشکال زدایی با پوشاندن داده های شخصی در سوابق خرابی و گزارش ها

هر برنامه ای خطا می دهد. چیزی که یک توسعه دهنده خوب را متمایز می کند سرعت یافتن و رفع اشکال است. اشکال زدایی موبایل - یافتن و رفع منبع یک مشکل - به ویژه دشوار است زیرا خطا در دستگاه کاربر رخ می دهد، در محیطی که شما نمی توانید آن را ببینید. بیشتر اوقات، تنها چیزی که دارید یک گزارش خرابی است (گزارش خرابی / ردیابی پشته - یک تجزیه فنی از جایی که برنامه در هنگام خراب شدن رفته است). هوش مصنوعی در خواندن این سوابق مرموز، فهرست کردن دلایل احتمالی و پیشنهاد راه حل بسیار قدرتمند است. در این بخش ما یاد خواهیم گرفت که چگونه از هوش مصنوعی به عنوان "کارآگاه اشکال" استفاده کنیم، اما مسئولیت تأیید تشخیص نهایی و رفع آن را به عهده شما می گذاریم.

خواندن گزارش خرابی: جایی که هوش مصنوعی بیشترین درخشش را دارد

گزارش خرابی متنی طولانی و ترسناک است. توسعه‌دهنده بی‌تجربه نمی‌داند به کجا نگاه کند. هوش مصنوعی این متن را در چند ثانیه تجزیه می کند: در کدام خط سقوط کرد، کدام استثنا پرتاب شد، دلیل احتمالی چیست. خطاهای رایج تلفن همراه واضح هستند و هوش مصنوعی آنها را به سرعت تشخیص می دهد: NullPointerException (تلاش برای دسترسی به یک مقدار تهی)، IndexOutOfBoundsException (دسترسی به یک عنصر لیست غیرموجود) در Android، EXC_BAD_ACCESS (دسترسی به حافظه آزاد شده) در iOS، (به طور غیرمنتظره ای یافت شده گزینه ای غیر منتظره).

رایج ترین انواع خرابی موبایل و علل معمول آنها به شرح زیر است:

خطا (استثنا)

پلت فرم

علت معمولی

NullPointerException

اندروید

دسترسی به یک مقدار تهی

IndexOutOfBoundsException

اندروید

دسترسی به عنصر لیست موجود نیست

به طور غیرمنتظره صفر پیدا شد

iOS

باز کردن اجباری یک عدد صفر اختیاری است (!)

EXC_BAD_ACCESS

iOS

دسترسی به حافظه آزاد شده

ANR/تجمیع

اندروید

پردازش طولانی/سنگین روی نخ اصلی

جریان اشکال زدایی گام به گام:

  1. رکورد را جمع آوری کنید. گزارش خرابی، پیام خطا و مراحل را برای بازتولید آن در صورت امکان کنار هم قرار دهید.
  2. زمینه هوش مصنوعی را ارائه دهید. نه فقط خطا، بلکه قطعه کد مربوطه و اینکه چه کار خراب شده است را به من بگویید.
  3. دلایل احتمالی را بپرسید. "3 علت محتمل و نحوه تأیید هر کدام را به من بگویید."
  4. تأیید کنید. دلیل پیشنهادی را در کد و آزمایش تایید کنید. با حدس زدن درستش نکنید
  5. درستش کن و دوباره تست کن بررسی کنید که خطا در واقع از بین رفته است و هیچ خطای جدیدی ایجاد نشده است.
نکته: هنگام ارائه گزارش خرابی به هوش مصنوعی، قطعه کد مربوطه را نیز وارد کنید. فقط با stack trace هوش مصنوعی پیش بینی کلی را انجام می دهد. وقتی کد را می بینید، احتمال یافتن خط دقیق و علت واقعی به شدت افزایش می یابد. زمینه کیفیت تشخیص را تعیین می کند.

تله داده های شخصی

گزارش‌ها و گزارش‌های خرابی اغلب حاوی داده‌های کاربر هستند: ایمیل، شناسه کاربر، مکان، حتی محتوای فرم. چسباندن این رکورد در هوش مصنوعی به همان شکلی که هست باعث درز اطلاعات شخصی شخص ثالث و نقض KVKK / GDPR است. قبل از ارسال ضبط، نواحی شخصی را پاک کنید (ماسک کنید). همچنین مراقب باشید که از ابتدا اطلاعات شخصی را در لاگ برنامه خود ننویسید. یک گزارش خوب مشکل را توصیف می کند اما هویت را آشکار نمی کند.

احتیاط: اصلاح پیشنهاد شده توسط هوش مصنوعی ممکن است "اشکال را خاموش کند" اما ممکن است علت اصلی را حل نکند. به عنوان مثال، بسته بندی یک NullPointerException با یک چک تهی، خرابی را متوقف می کند، اما اگر متوجه نشدید که چرا مقدار صفر است، خطای منطقی واقعی ادامه خواهد داشت. بیماری را درمان کنید، نه علامت.

تحلیل علت ریشه ای

هدف از اشکال زدایی حرفه ای خاموش کردن خطا نیست بلکه یافتن علت اصلی است. من از هوش مصنوعی پرسیدم "چرا ممکن است این تهی باشد، کجا ممکن است در جریان داده گم شده باشد؟" پرسیدن، "چگونه این را ساکت کنم؟" بسیار ارزشمندتر از درخواست است. هنگامی که علت اصلی پیدا شد، ده ها تغییر از همان خطا به طور همزمان حل می شود. هوش مصنوعی در این استدلال زنجیره ای خوب عمل می کند: داده ها را از ورودی تا خروجی دنبال کنید و از آن بخواهید که در مورد اینکه کجا خراب می شود فکر کند.

سه کیف کوچک

مورد 1 - 2 ساعت کار در 10 دقیقه. یک توسعه دهنده 2 ساعت وقت صرف یافتن باگی کرد که فقط در یک مدل خاص سامسونگ خراب شد. گزارش سقوط (پاک کردن مناطق شخصی) را به هوش مصنوعی داد. YZ گفت که این خطا به سرریز حافظه اشاره دارد که با وضوح دوربین متفاوت آن دستگاه رخ می دهد. با سرنخ، دلیل در 10 دقیقه پیدا شد. هوش مصنوعی جستجو را تسریع کرد، انسان راه حل را تأیید کرد.

مورد 2 - اشکال خاموش شده برگشته است. یک تیم با استفاده از یک پیشنهاد هوش مصنوعی، یک تصادف مکرر را خاموش کرد تا آن را بگیرد. خرابی متوقف شد، اما کاربران شروع به شکایت کردند که "داده ها ذخیره نمی شوند". از آنجا که مشکل واقعی (اتصال پایگاه داده) هنوز وجود داشت، به تازگی نامرئی شده بود. هنگامی که علت اصلی پیدا شد، هم خرابی و هم از دست دادن داده ها برطرف شد. درس: خاموشی حل نمی شود.

مورد 3 - داده ها در لاگ به بیرون درز کرده اند. یک ممیزی نشان داد که نام کامل و شماره تلفن کاربران در گزارش های خرابی برنامه نوشته شده است. توسعه دهندگان به طور معمول این گزارش ها را در هوش مصنوعی قرار می دهند و اشکالات را برطرف می کنند. بنابراین داده‌های شخصی ماه‌هاست که از بین رفته است. لاگ ها پوشانده شدند و روند اصلاح شد. درس: محرمانگی حتی در هنگام اشکال زدایی نیز اعمال می شود.

اعلان ضعیف / اعلان قوی

پیام ضعیف: "چرا این خطا رخ می دهد؟ [stack trace]"

پیام قوی: "این خرابی در برنامه Android من اتفاق می‌افتد. زمینه: - در حین انجام: کاربر در حال افزودن به سبد خرید از جزئیات محصول - فقط در برخی از دستگاه‌ها، مدل‌های رم پایین - کد مرتبط: [ViewModel and Repository part] - گزارش خرابی (داده‌های شخصی پاک شده): [stack trace] فهرست 3 علت احتمالی برای هر یک از نسخه‌ها: 1 را برطرف کنید. (نه ساکت کردن) فرض خود را در جایی که مطمئن نیستید بیان کنید."

قالب های قابل کپی

الگوی تجزیه و تحلیل خرابی:" خرابی زیر را تجزیه و تحلیل کنید. زمینه: [کاری که انجام می‌دهید، کدام دستگاه/نسخه]. کد مربوطه: [کد]. گزارش خرابی (داده‌های شخصی پاک شده): [ردیابی]. 3 علت اصلی محتمل‌تر و تأیید + رفع دائمی هر کدام را ارائه دهید. همچنین راه‌حل‌هایی را که علائم را خاموش می‌کنند، علامت بزنید.

الگوی علت اصلی: "این مقدار به طور غیرمنتظره [null/false] می آید. جریان داده را از ورودی تا این نقطه دنبال کنید: کجا ممکن است از بین برود یا خراب شود؟ به من بگویید در هر مرحله کجا را باید بررسی کنم. [کد]"

الگوی خواندن گزارش: "این خروجی گزارش را تفسیر کنید: چه اتفاقاتی به ترتیب رخ داده است، کجا غیرعادی است، آخرین مرحله سالم قبل از خطا چه بوده است؟ [ورود — اطلاعات شخصی پاک شد]"

الگوی تولید مثل: "چه مراحل، وضعیت‌های دستگاه و داده‌هایی را باید برای بازتولید قابل اعتماد این خطا امتحان کنم؟ شرایطی را که می‌توانند باعث ایجاد خطا شوند به ترتیب احتمال فهرست کنید. [توضیح]"

اشتباهات رایج

  • ارائه ردیابی پشته بدون زمینه. بدون کد و سناریو مربوطه، هوش مصنوعی پیش بینی کلی انجام می دهد.
  • چسباندن اطلاعات شخصی در هوش مصنوعی همراه با گزارش‌ها. نقض محرمانه بودن؛ اول ماسک
  • علامت را خاموش کنید. مخفی کردن خرابی با try-catch مشکل ریشه ای را ترک می کند و مشکلات جدیدی ایجاد می کند.
  • اعمال اولین پیشنهاد بدون تأیید آن. تشخیص هوش مصنوعی یک فرضیه است. در کد تایید کنید
  • تلاش برای بازتولید آن در شبیه ساز. برخی از خطاها فقط در دستگاه/شرایط واقعی ظاهر می شوند.
  • بعد از اصلاح دوباره تست نمی شود. راه حل ممکن است چیز دیگری را خراب کرده باشد. رگرسیون را بررسی کنید.

به طور خلاصه

یکی از زمینه‌هایی که هوش مصنوعی در آن برتری دارد، خواندن گزارش‌های خرابی و مرتب‌سازی علل احتمالی است. کیفیت تشخیص با ارائه زمینه بسیار بهبود می یابد. اما تشخیص و تصحیح نهایی متعلق به انسان است: پیشنهاد هوش مصنوعی یک فرضیه است که در کد و آزمایش تأیید شده است. هدف ساکت کردن علائم نیست، بلکه حل علت اصلی است. خطای خاموش شده معمولاً به شکل دیگری برمی گردد. گزارش‌های خرابی ممکن است حاوی اطلاعات شخصی باشند. قبل از دادن آن به هوش مصنوعی آن را بپوشانید و از همان ابتدا اطلاعات شخصی را در گزارش های خود ننویسید.

وظیفه کاربردی

گزارش خرابی (یا نمونه‌ای که از هوش مصنوعی تولید می‌کنید) را بردارید، داده‌های شخصی/متمایز موجود در آن را بپوشانید و با «الگوی تحلیل خرابی» به هوش مصنوعی بدهید. تشخیص دهید که کدام یک از دلایل اصلی لیست های AI اصلاحات واقعی هستند و کدام یک فقط خاموش می شوند. راه حل دائمی که انتخاب کرده اید را اعمال کنید و بررسی کنید که خطا برطرف شده است و مشکل جدیدی ایجاد نمی شود.

چک لیست

  • [ ] من گزارش خرابی را با کد مربوطه و زمینه سناریو داده ام
  • [ ] من داده های شخصی/متمایز را در سیاههها پنهان کردم
  • [ ] من از هوش مصنوعی علت اصلی و رفع دائمی را خواستم، نه خاموش کردن
  • [ ] من تشخیص را در کد و آزمایش تأیید کردم، کورکورانه آن را اعمال نکردم
  • [ ] بعد از رفع مشکل، تست کردم که خطا برطرف شده و هیچ رگرسیونی وجود ندارد
  • [ ] من بررسی کردم که برنامه من داده های شخصی را در گزارش های خود نمی نویسد