باستخدام الرياضيات المنفصلة في الاختبار

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


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


في عملهم اليومي ، يعمل مهندسو ضمان جودة البرمجيات (QA) مع عمليات الصيغة وسلوك الوظيفة وهياكل البيانات. إنهم يراقبون دائمًا حالة الأنظمة المتغيرة باستمرار ويتحققون منها ، لذلك يحتاجون إلى التفكير الحسابي والرياضي لفهم منطق البرنامج.


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


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


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

لتوضيح هذا المفهوم بمزيد من التفصيل ، أنشأنا مخطط Venn التالي بمثال أوجزناه سابقًا:





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

نظرية المجموعات


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

M1={month:month has 30 days} M2={month:month has 31 days except December} M3={month:month is February} M4={month:month is December} D1={day:1<=day<=28} D2={day:1<=day<=29} D3={day:1<=day<=30} D4={day:1<=day<=31} Y1={year:year is a leap year} Y2={year:year is not a leap year} 

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

نظرية الرسم البياني


معظم الرياضيات المنفصلة هي ما يسمى "نظرية الرسم البياني" ، والتي تدرس الرسوم البيانية. تُستخدم الرسوم البيانية لتمثيل العلاقة بين بعض الكائنات أو البيانات ، وشبكة الكمبيوتر هي مثال مناسب للرسم البياني.

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


يمكن أن تكون الرسوم البيانية اتجاهية وغير اتجاهية ، مما يعني أنه يمكننا الانتقال من عقدة إلى عقدة في اتجاه واحد أو في كلا الاتجاهين (في حالة الرسم البياني الموجه) ، أو لا يمكننا الانتقال من عقدة إلى أخرى (إذا تم توجيه الرسم البياني بدقة في واحدة الاتجاه)


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



دعنا نستمر وننظر إلى المصفوفة المجاورة ، والتي يمكن بناؤها على أساس رسم بياني غير موجه. في المثال أدناه ، تشير عناصر المصفوفة المجاورة إلى ما إذا كانت أزواج القمم متجاورة أم لا:



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


المصفوفة الأخرى التي يمكننا استخدامها لجمع حالات الاختبار هي مصفوفة الوقوع ، والتي توضح العلاقة بين فئتين من الكائنات. في الشكل التالي ، نرى رسمًا بيانيًا غير موجه ومصفوفة الوقوع: "1" و "2" و "3" و "4" هي عقد (كيانات) و "e1" و "e2" و "e3" و "e4" هي حواف الرسم البياني ، وتوضح المصفوفة الكيانات والإجراءات التي يمكننا القيام بها معهم. باستخدام العقدة "1" ، يمكننا تنفيذ الإجراءات "e1" و "e2" و "e3" ، لكن الإجراء "e4" غير متاح للعقدة "1.". هذه الطريقة مفيدة للغاية في إنشاء مجموعة من حالات الاختبار.



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


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


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


شبكات بيتري


دعنا نلقي نظرة على مثال عن كيفية عمل التطبيق على تقنية microservice باستخدام Petri Nets (الرسم البياني الديناميكي):



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


الشبكات العصبية


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



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


اختبار الألفية


مثالنا الأخير لاستخدام الرياضيات المنفصلة في الاختبار ينطوي على بناء عملية اختبار البرمجيات. يوجد حاليًا العديد من المنهجيات والمناهج التي تسمى "اختبار الألفية" ، والتي تم تطويرها قبل وقت طويل من استخدامها الفعلي ، بدءًا من الألفينيات ، عندما بدأ تطوير البرمجيات يتطور بسرعة.


يعتبر BDD (التطوير المدفوع بالسلوك) جزءًا من ما يسمى باختبار الألفية ، وهذه المنهجية هي امتداد لـ TDD (التطوير المدعوم بالاختبار). يتيح BDD للمختبرين إقامة علاقة أوثق بين معايير القبول لوظيفة معينة والاختبارات المستخدمة لاختبار هذه الوظيفة. يمكن أن يقوم BDD بتحويل البيانات المهيكلة بلغة طبيعية إلى اختبارات قابلة للتنفيذ ، وبالتالي تقديم المزيد من الوضوح والفهم لجانب الأعمال وجانب التطوير ، حيث يبدأون في التحدث بلغة واحدة مشتركة. يعتمد الهيكل الأساسي لسير عمل BDD أيضًا على رسم بياني ديناميكي (Petri Net).



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



في الختام ، أود أن أذكر مرة أخرى مزايا استخدام الرياضيات المنفصلة في عملية تطوير البرمجيات:

  • المساعدة في فهم منطق العمل للوظيفة المطلوبة
  • تبسيط القدرة على تقسيم المهام المعقدة إلى مهام أبسط
  • تمكين المهنيين لإجراء اختبارات فعالة بأقل جهد
  • مساعدة في فهم وتصور هيكل كل ما نريد

توضح الأمثلة أعلاه كيف يمكن استخدام الرياضيات المنفصلة لزيادة فعالية أداء الاختبار. يمكن لكل جانب من جوانب الرياضيات المنفصلة مساعدة المطورين على فهم سير عمل البرنامج العام ومبادئه طوال دورة حياة تطوير البرامج.

Source: https://habr.com/ru/post/ar451886/


All Articles