سؤال

ما الممارسات والاستراتيجيات الجيدة الموجودة في إجراء اختبارات الانحدار في البيئات المدمجة أو في حالات أخرى حيث تكون إمكانية أتمتة الاختبارات محدودة للغاية.

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

دون اختبارات الانحدار المناسبة، يصبح الوضع أسوأ خلال عمليات إعادة الأمواد الكبيرة ومثله.

هل يعترف أي شخص بالمشكلة؟ هل وجدت حلا جيدا أو عملية للتعامل مع هذا النوع من المشاكل؟

هل كانت مفيدة؟

المحلول

شخصيا، أنا معجبا كبيرا بوجود كود مضمن تجميعه على كل من الأجهزة المستهدفة وجهاز الكمبيوتر الخاص بي. على سبيل المثال، عند استهداف 8086، قم بتضمين كلا من نقطة الدخول التي توصيها إعادة تعيين الأجهزة 8086 ونقطة دخول DOS. تم تصميم الأجهزة، بحيث كانت جميع io تم تعيين الذاكرة. ثم قمت بتجميعها بشكل مشروط في محاكاة الأجهزة وتغيير مواقع ذاكرة الأجهزة إلى ذاكرة الأجهزة المحاكاة.

إذا كنت أعمل في منصة غير X86، فربما أكتب محاكي بدلا من ذلك.

نهج آخر هو إنشاء جهاز اختبار حيث يتم التحكم في جميع المدخلات والمخرجات للأجهزة من خلال البرنامج. نستخدم هذا كثيرا في اختبار المصنع.

مرة واحدة بنينا محاكاة في أجهزة io. وبهذه الطريقة، يمكن اختبار بقية النظام عن طريق إرسال عدد قليل من الأوامر التي يمكن أكثر من ذلك بوضع الأجهزة في وضع محاكي. وبالمثل، يمكن أن يكون للبرامج المعمولية جيدا "وضع محاكي" حيث يتم محاكاة IO استجابة لأوامر البرامج.

نصائح أخرى

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

سيضمن هذا التكيف بالنسبة لمعظم تكنولوجيا المعلومات، لكنك ستظل بحاجة إلى إجراء اختبار النظام والقبول يدويا في وقت لاحق.

هل يعترف أي شخص بالمشكلة؟

بالتأكيد.

هل وجدت حلا جيدا أو عملية للتعامل مع هذا النوع من المشاكل؟

مزيج من التقنيات:

  • الاختبارات الآلية؛
  • اختبارات القوة الغاشمة، أي تلك التي ليست ذكية مثل الاختبارات الآلية، ولكنها لاختبار ميزة مرارا وتكرارا على مدى فترة طويلة (ساعات أو أيام)، ويمكن تركها لتشغيلها دون تدخل بشري؛
  • الاختبارات اليدوية (غالبا ما تكون من الصعب تجنبها)؛
  • اختبار على محاكي البرمجيات على جهاز كمبيوتر (أو كملاذ أخير، محاكي الأجهزة).

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

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

على عكس معظم المستجيبين حتى الآن، أعمل مع بيئات مضمنة لا تشبه أنظمة سطح المكتب على الإطلاق، وبالتالي لا يمكن أن تحاكي النظام المضمن على سطح المكتب.

من أجل كتابة أنظمة اختبار جيدة، فأنت بحاجة إلى نظام الاختبار الخاص بك للحصول على FeedForward وملاحظاتك. JTAG هي الطريقة الأكثر شيوعا إلى الأمام للتحكم في الجهاز. يمكنك ضبط الحالة الكاملة للجهاز (ربما حتى اللوحة بأكملها إذا كنت محظوظا) ثم قم بتعيين رمز الاختبار لتشغيله. في أي نقطة تحصل على ملاحظاتك. يمكن ل JTAG أيضا بمثابة جهاز ملاحظات. ومع ذلك، فإن محلل المنطق مع برامج API هو الأفضل في هذا الموقف. يمكنك البحث عن مستويات معينة على دبابيس، عد البقول وحتى تحليل تدفقات البيانات من الأجهزة الطرفية البثية.

توفير اختبار تسخير / صناديق الرمل / الطائرات الحيوي للنظم الفرعية الفردية، والمشروع بأكمله، بتحذير البيئة المستهدفة.

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

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

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

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

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

وأنا أتفق مع كل من يقول الأجهزة الآلية أمر لا بد منه - نحن نستخدم هذا النهج لاختبار البرامج المضمنة مع بعض وحداتنا. لقد قمنا ببناء محطات اختبار كبيرة من رف ثنائي رف مليئة بمحاكاة الأجهزة ونؤدينا إلى مزيج من مزيج من LabView Code Code Code، DLLS Vendor DLLs، إلخ لإدارة كل ذلك. يتعين علينا اختبار الكثير من الأجهزة - لهذا السبب لدينا كل هذا حماقة. إذا كنت مجرد اختبار البرنامج، فيمكنك تعيده إلى الأساسيات العارية. اختبار واجهة تسلسلي؟ ما عليك سوى إنشاء جهاز لمحاكاة حركة المرور التسلسلية وممارسة جميع الرسائل (وبضع رسائل غير صالحة) لضمان استجابة البرنامج بشكل صحيح. اختبار ديو؟ هذا سهل - هناك الكثير من الأجهزة الطرفية USB أو الأجهزة المضمنة لمحاكاة Dio. إذا كان التوقيت مهما، فسيتعين عليك استخدام جهاز آخر مضمن للحصول على التحمل الضيق الذي تبحث عنه، وإلا فإن جهاز الكمبيوتر سيفعل على ما يرام.

الجزء المهم هو معرفة ما تختبره دائما وعدم اختبار أي شيء آخر غير ذلك. إذا كان البرنامج، تأكد من أن الاختبار مستقل عن الأجهزة إلى أكبر درجة ممكنة. إذا كنت تقوم باختبار توليد الموجي أو أي شيء آخر مع D / A، فقم بفصل المهام - اختبار D / A HARDWARE مع إنشاء برنامج خاص على الجهاز المضمن الذي لا يفعل أي شيء يتوهم باستثناء البصق مستويات الجهد. ثم يمكنك معرفة ما إذا كان بإيقاف تشغيل المراجع الخاصة بك، إذا تم تعيين المرشحات الخاصة بك على تردد خاطئ، إلخ. ثم يجب أن تكون قادرا على اختبار البرنامج المستقل عن الأجهزة - استخدم لوحة تطوير لاختبار البرنامج والتحقق من السلوك في المعالج دبابيس صحيحة.

حل قيد الاستخدام حيث أعمل هو إجراء بناء واختبار ليلي مؤتمتة.

  1. تحقق من رمز رأس جذع من التحكم في المصدر.
  2. بناء المشروع وتحميل الهدف.
  3. تشغيل البرامج النصية اختبار تلقائي للكمبيوتر.

من السهل تشغيل البرامج النصية الاختبار إذا كنت تستخدم نوعا من بروتوكول الاتصالات. هذا جيد لاختبارات الوحدات الداخلية. ما يجعل الوضع أكثر إثارة للاهتمام (وشاملة) هو جعل تسخير الأسلاك يقوم بتوصيل المجلس لمحاكاة IO الخارجية.

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top