عندما تسيطر المنظومة المنطقية على الإشارات الأساسية
TL;DR: انخفاض تقارير الوضع في الصناعات المعيارية يؤدي إلى تأخير هادئ ونتائج السباق.
TL;DR: انخفاض تقارير الوضع في الصناعات المعيارية يؤدي إلى تأخير هادئ ونتائج السباق.
مشكلات
- المستخدمون يتأخرون
- تجربة سيئة
- أوقات غير متوقعة
- البدء غير الكامل
- التهديدات المفقودة
- السياسات السيئة
- الفشل الصمتي
- إزالة التوافق الخلفي
حلول
- تقييم جميع مسارات الكود
- استخدام آليات التقارير الافتراضية
- اختبار الحالات الجانبية بشكل صارم
- التحقق من السياسات في وقت مبكر
- إجراء اختبارات الأداء
- إرسال التقارير خارج الشروط
السياق
عند إضافة منطق معين (على سبيل المثال، سياسات المجموعة) إلى رمز البدء، فإن التخفيف من الخطوات الأساسية مثل تقارير الاستعداد يؤدي إلى تأخير في جميع أنحاء النظام.
الحالات الحدود هي ظروف استثنائية تحدث خارج المعايير التشغيلية المعتادة.
عندما لا تتعامل مع هذه الحالات الجانبية بشكل صحيح، قد تتصرف الكود غير المتوقعة.
هذامقال مدونة Microsoftيوضح مثالًا كلاسيكيًا حيث يفتقر إلى التعامل مع الحالة الجانبيةيسبب نظام التشغيل Windows 7 لديه أوقات التسجيل أبطأ عندما اختار المستخدمون خلفية ملونة بدلاً من صورة خلفية.
القائمة المسؤولة عن تثبيت ورق الخلفية لا تزال "مستعدة" فقط عندما تم تحميل صورة ورقة الخلفية بنجاح.
ولكن عندما اختار المستخدمون خلفية لون ثابت (خلفية الجانب) ، لم يفعله هذا الطريق الكود أيضًا إشعار "مستعد".
ونتيجة لذلك ، انتظرت النظام لمدة 30 ثانية كاملة قبل البدء في سلسلة تسجيل الدخول.
تظهر هذه المشكلة كيف يمكن أن يؤثر فقدان حالة الحدود الصغيرة على تجربة المستخدم بشكل كبير.
ما كان يجب أن يكون عملية تسجيل الدخول 5 ثانية أصبح تأخير 30 ثانية مفرطة بالنسبة للمستخدمين الذين اختاروا خيار تكوين بسيط.
تكرار هذا التوقيت 30 ثانية سلبية من قبل كل مستخدم الذي كان لديه النسخة.
تصميم البرمجيات الجيدة يتطلب منك النظر في جميع الطرق المحتملة من خلال رمزك، وليس فقط تلك المعتادة.
عندما تترك التعامل مع الحالات الجانبية، يمكنك خلق الديون التقنية التي تشير إلى مشاكل أداء غامضة، والخسائر الزمنية، والخبرات المستخدمة السيئة.
رمز نموذج
خطأ 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
// Assume this was defined previously
// and PLEASE DON'T use NULLs in case you hadn't
{
LoadWallpaperBitmap();
Report(WallpaperReady); // Missed if wallpaper is undefined
}
// No default report, causing delays
}
private static void LoadWallpaperBitmap()
{
}
private static void Report(string status)
{
// The Asynchronous loading keeps on
}
}
حقًا 🙂
public static class WallpaperInitializer
{
private static bool wallpaperWasDefined = false;
public static void InitializeWallpaper()
{
if (wallpaperWasDefined)
{
LoadWallpaperBitmap();
}
Report(WallpaperReady);
// Always report, regardless of condition
}
private static void LoadWallpaperBitmap()
{
}
}
اكتشاف
- [x] الذكور الذكور
استخدم أدوات تحليلية استثنائية لتعليق الشروط التي تحمي الردود الإخبارية المهمة.
يجب على مراجعة الكود التحقق من أن جميع مسارات البدء تشير إلى الانتهاء.
اليوم ️
- الأداء
مستوى
- [x] المتوسط
لماذا هو مهم ️
يعتمد سلوك النظام في العالم الحقيقي (على سبيل المثال، سرعة التسجيل) على نموذج دقيق لظروف الاستعداد.
يجب أن تتبنى البرمجيات ترتيب واحد إلى واحد بين الحالات في العالم الحقيقي و الحالات في البرنامج.
عندما يختار المستخدمون خلفية باللون الصلب في Windows ، فإن هذا الخيار يمثل حالة عالمية حقيقية صحيحة.
(الإختيار الشخصي أيضًا بعد ذلك)
يجب أن يكون برنامج هذا الخيار مع نموذجًا صحيحًا مع حالة البرنامج المناسب التي تتصرف بشكل صحيح.
عندما تقطع هذا التغيير عن طريق عدم التعامل مع الحالات الجانبية، يمكنك إدخال إزعاج بين توقعات المستخدم وممارسة النظام.في هذه الحالة، كان المستخدمون يتوقعون من اختيار خلفية لون ثابت للعمل بشكل طبيعي، ولكن بدلاً من ذلك، كانوا يعانون من تأخير غامض.
يخلق الارتباك المفقود تناقضًا إيجابيًا: "لقد اتخذت قرارًا بسيطًا، لماذا يتصرف الكمبيوتر الخاص بي بشكل غريب؟" هذا الانفصال يؤدي إلى ضرر على الثقة والمحبة للمستخدم.
يُدخل كل حفرة في نموذج الائتمان في النظام، مما يجعلها أكثر وأكثر غير متوقعة مع مرور الوقت.
إزالة هذه الرابطة يؤدي إلى تناقضات بين توقعات المستخدم ونتائج البرمجيات، مما يؤدي إلى تأخير غير متوقع.خريطةانتهاكات العالم الحقيقي.
أجيال
يمكن للمنشآت الذكية أن تخلق هذه الرائحة عن طريق إزالة الكود القديم في المعايير دون تحديد جميع الطرق.
تقييم
إرسال الذكاء الاصطناعي إلى "تأكد من تنفيذ التقارير المستقبلية في جميع التخصصات" ، وسوف يضيف أو يحدد هذا الرائحة من خلال نقل Report() خارج الشروط.
احرص على ذلك!
تذكر: المساعدات الذكية تجعل الكثير من الأخطاء
الملاحظة التالية: العثور على التقارير الأخرى المفقودة
الملاحظة التالية: العثور على التقارير الأخرى المفقودة
Without Proper Instructions |
With Specific Instructions |
---|---|
النتيجة
إشارة الانتهاء دائمًا بدون شروط في رمز البدء.
يجب أن تغير المنطق المعيّن السلوك، وليس التقطه خطوات التقارير المهمّة.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxx
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii
المزيد من المعلومات
Disclaimer
الرائحة الكريهة هي مننظرية.
التفكير يؤدي إلى الفشل، و الفشل يؤدي إلى الفهم.
التفكير يؤدي إلى الفشل، و الفشل يؤدي إلى الفهم.
بيرت روتان
هذه المقالة جزء من سلسلة CodeSmell.