اختبر مشروعك باستخدام Python

 

Python





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

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


اكتشف الاختبارات



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

- الاختبارات الآلية: يتم ترميزها بواسطة علماء الكمبيوتر ويتم تنفيذها بواسطة الكمبيوتر. والغرض منها هو التأكد من أن الأجزاء المختلفة من البرنامج تتوافق مع المواصفات الفنية.

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

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

هرم الاختبارات

يمثل هرم الاختبار بصريًا مجموع الاختبارات التي تم إجراؤها على المشروع بالإضافة إلى نوعها.

تتكون القاعدة من اختبارات الوحدة ، والتي سنتحدث عنها بعد ذلك مباشرة ، لأن هناك عددًا أكبر منها مقارنة بالاختبارات الأخرى.

تتضمن الطوابق العليا اختبارات متغيرة اعتمادًا على المنهجية المختارة.

تتكون الخطوة الأخيرة دائمًا من الاختبارات التي يقوم بها الإنسان والتي ستكون أقل عددًا بكثير من الاختبارات السابقة.




اختبارات الوحدة

يتحقق اختبار الوحدة من أن الوظيفة تؤدي الإجراء المطلوب. لا يتعلق الأمر هنا باختبار التفاعل بين الوظائف المختلفة بل هو جزء من الوظيفة.

في مشروع Crocoplus ، يمكن لاختبار الوحدة التحقق من أن دالة create_crocodile () لها تأثير في زيادة عدد التماسيح في قاعدة البيانات بمقدار نقطة واحدة.

الاختبارات النهائية

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

المنهجيات المتسلسلة: اختبارات دورة V.



لا يمكنك تذكر المراحل المختلفة للمشروع باتباع منهجية المشروع المتسلسلة؟ راجع الفصل استخدام المنهجيات المتسلسلة لدورتي التدريبية قم بإدارة مشروع تكنولوجيا المعلومات بسهولة! .

اختبارات التكامل

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

يتم إجراء اختبارات التكامل تلقائيًا بواسطة الكمبيوتر. هذا يجعلها أسرع في التشغيل وأكثر موثوقية.

تتوافق مع المواصفات الفنية وبالتالي تختبر بنية البرنامج.

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

اختبارات التحقق من الصحة

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

بشكل ملموس ، تجيب هذه المرحلة على الأسئلة التالية:

هل يستجيب البرنامج المقدم لقضايا عمل عملائنا؟

هل البرنامج خالي من الأخطاء المتعلقة باستخدامه اليومي من قبل المتخصصين في المجال؟

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

مرحلة القبول

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




منهجيات اختبار مشروع Scrum

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



الاختبارات الوظيفية

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

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

اختبارات القبول

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

يعطي العميل ملاحظاته أو يتحقق من صحة الوظيفة.



عدة أشكال من الاختبار

هناك العديد من أشكال الاختبار الأخرى!

يمكن اختبار العديد من الجوانب الأخرى للمشروع:

- الأداء: سرعة التحميل ، وقت الاستجابة لطلب ، ...

- إمكانية الوصول: الامتثال لمعايير W3C ، وإمكانية الوصول للأشخاص ذوي الإعاقة ، إلخ.

- الأمان: شهادة SSL ، نماذج آمنة ، قاعدة بيانات مشفرة ، ...

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



حدد ما يجب اختباره



لقد تم ؟ في احسن الاحوال ! دعونا نلقي نظرة على شكلها.

يحتوي على نصين مكتوبين بلغة Python وموجودين في مجلد البرنامج. الأول ، download_agents.py ، يستخدم لاسترداد الوكلاء من PPLAPI API. الثاني ، world.py ، هو النص الرئيسي للبرنامج.

الى جانب ذلك ، ماذا يفعل؟ نقوم بتشغيله باستخدام الأمر python program / world.py program / clients-100k.json وسيعرض رسالتين:

الأول يُظهر اللذة المتوسطة كدالة للكثافة السكانية.

الثاني يعرض الدخل حسب العمر.

لماذا تكتب الاختبارات؟

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

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

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

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

لذلك دعونا نبدأ على الفور بفعل ما كان يجب أن أفعله من قبل: إضافة الاختبارات.


ماذا تختبر؟

السؤال الأول الذي يجب طرحه عندما نحتاج إلى إضافة اختبارات إلى مشروع هو: ما الذي نريد اختباره؟

هل هذه نتيجة برنامجنا؟ في حالتنا ، إنتاج رسالتين. أم أنها كلها من الكود ، وظيفة بوظيفة؟

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

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

لكن القيام بذلك أبعد ما يكون عن المثالية. لنفكر لمدة دقيقتين. لماذا نريد كتابة الاختبارات؟ لإضافة ميزة بعد ذلك والتأكد من أن الأخير لن يكون له تأثير ضار على القديم.

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

تذكير الكائن

لفهم ما هو الأفضل اختباره ، دعنا نعود خطوة إلى الوراء في مفاهيم البرمجة الشيئية.

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

يتم الاتصال بالمكوكات الأخرى عبر الرسائل الواردة والصادرة. يمكنه أيضًا إرسال رسائل داخلية إلى أفراد المكوك.

اختبر الواجهة

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

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

عمليا

ينفذ مشروعنا الوظيفة main () عندما يقوم المستخدم بتشغيل البرنامج. لذلك سوف ننتقل من خلال التعليمات المختلفة التي يحتوي عليها هذا الأخير.



دعنا نتجاهل الوسيطات التي تم تمريرها في سطر الأوامر في الوقت الحالي ونركز على حلقة for.

الكائنات التي نتفاعل معها هي Position و Zone و Agent و AccepteablenessGraph و IncomeGraph.

فيما يلي القائمة الأولى لما يبدو أنه مناسب للاختبار:

وكيل

- تعديل سمة الموقف

- الحصول على سمة الموقف

- تعيين القاموس كسمات

 

موضع

- تعديل سمة longitude_degrees

- تعديل سمة Latitude_degrees

- يؤدي تعديل سمة longitude_degrees بقيمة أكبر من 180 إلى إرجاع خطأ.

- يؤدي تعديل سمة Latitide_degrees بقيمة أكبر من 90 إلى إرجاع خطأ.

- استعادة خط العرض

- استرداد خط الطول

 

مخصصة

- ابحث عن منطقة تحتوي على موقع

- إضافة ساكن في منطقة

- استرداد كافة حالات المنطقة (Zone.ZONES)

- استعادة الكثافة السكانية للمنطقة

- استعادة متوسط ​​متعة المنطقة

 

الموافقة

- استعادة العنوان

- احصل على x_label

- احصل على y_label

- احصل على xy_values ​​على هيئة مجموعات

- القيمة الأولى لـ xy_values ​​هي متوسط ​​الكثافة السكانية

- القيمة الثانية لـ xy_values ​​هي اللذة المتوسطة

 

الدخل

- استعادة العنوان

- احصل على x_label

- احصل على y_label

- احصل على xy_values ​​على هيئة مجموعات

- القيمة الأولى لـ xy_values ​​هي العمر

- القيمة الثانية لـ xy_values ​​هي الدخل







إرسال تعليق

comments (0)

أحدث أقدم