معاذ الخلف M.Alkhalaf
معاذ الخلف M.Alkhalaf

@muath2

3 تغريدة 100 قراءة Jan 04, 2020
الفصل القادم سأقوم بتدريس مادة #جودة_البرمجيات #software #quality في مرحلة الماجستير في جامعة الملك سعود وهي المرة الثانية التي أقوم فيها بتدريس المادة. المرة الأولى كانت ناجحة بأكثر مما تصورت بكثير ولله الحمد وشجعتني أعيد طرح المادة. خلوني أدردش هنا حول هذا الموضوع.
هل التخصص مطلوب؟ من تجربتي في السوق نعم هناك حاجة ماسة وبالمقابل هناك ندرة في الكوادر المتخصصة.
هل التخصص مهم؟ جدا، وقد لاحظت إهمال للجودة وعدم الانتباه الا في وقت متأخر بعدما يقع الفاس في الرأس ويخرج منتج (نظام، تطبيق، موقع ...) مخالف لما يريده العميل او منتج رديء او الاثنين
ماذا تعني جودة البرمجيات؟ باختصار هي عملية التأكد من:
١- بناء المنتج الذي يريده العميل
Validation - build the right product
٢- بناء المنتج بالشكل الصحيح verification - build the product right
كيف تتم عملية التأكد من جودة البرمجيات؟ ١- العملية تتم عبر عدة أنواع من الاختبارات software testing (سأذكرها لاحقا) والتي يتم تصنيفها تبعًا للغرض من الاختبار.
٢- هدف هذه الاختبارات هو ايجاد أكبر قدر ممكن من الأخطاء. هذا هام جدا ويجب ان لا يغيب عن الذهن ابدا
٣- هناك عدة طرق لادارة عملية اجراء الاختبارات وحاليًا اشهر الطرق هو الجمع بين #TDD او Test Driven Development و #BDD او Behaviour Driven Development
٤- العملية تتم بالتعاون بين المطورين (المبرمجين) وبين مهندسي الجودة (كلا الاثنين راح يكتب اختبارات ولكن لأغراض مختلفة).
٥- العملية تتضمن كتابة قدر كبير من الكود البرمجي وقد ولى عصر مهندس جودة البرمجيات الذي لا يكتب كود برمجي. أصبحت مهمة مهندس جودة البرمجيات تتوزع بين فهم المتطلبات ومن ثم كتابة حالات الاختبار test cases وبعد ذلك أتمتة هذه العملية. لماذا؟
لانه يجب اعادة اختبار المنتج بشكل كامل مع كل نسخة جديدة وهو ما يسمى بال regression testing. في هذه الحالة فأمامك خيارين: اما توظيف المزيد من مهندسي الجودة بشكل مستمر لتواكب التزايد في عدد حالات الاختبار مع نمو المنتج وازدياد الخصائص features التي يؤديها او “أتمتة الاختبار”
هذا الموضوع بالتحديد (test automation) هام جدا وبدأ يتداخل بشكل قوي مع #CI و #CD او ال Continuous Integration و ال Continuous Delivery وسأعود لاحقا للتحدث عنه وعن أدواته ضمن هذه التغريدات ان شاء الله
ما هي مواصفات مهندس جودة البرمجيات الناجح (وش احتاج منك عشان تعدي المادة ?)؟
(حاب اؤكد ان طلابي كانوا جدا مبسوطين وكانت الدرجات ممتازة الحمد لله ?). بناء على نقطة رقم ٢ فان ابداع مهندس جودة البرمجيات يتمثل في التفنن في ايجاد أكبر قدر من الأخطاء البرمجية او البقز bugs ? (يتبع)
وبالتالي فإن مقياس الاداء الرئيسي KPI له هو عدد البقز اللي يلقاها. جزء هام من الكورس اقضيه في تعليم الطالب فن "تخريب البرامج" ?(اذا صح التعبير) بطريقة منهجية ومرتبة. في الحقيقة الطالب يكون عنده المبادئ الأساسية لإيجاد الثغرات vulnerabilities وليس فقط البقز (اي ثغرة هي أساسًا بق)
حتى يتمكن مهندس الجودة من كتابة حالات اختبار test cases قوية وشاملة يحتاج إلى تعلم هذه الطرق والمنهجيات. من هذه الطرق والمنهجيات على سبيل المثال Boundary Value Analysis & Equivalence Partitioning ولمن يحب الاستزادة فهذا كتاب جميل جدا حول الموضوع وهو احد الكتب المعتمدة في الكورس
اضافة الى ذلك، يحتاج مهندس الجودة إلى تعلم البرمجة واستخدام أدوات الاوتوميشن ومن أشهرها:
١- Selenium selenium.dev لأتمتة اختبارات مواقع الويب.
٢- Appium appium.io لأتمتة اختبارات تطبيقات الجوالات
٣- Cucumber cucumber.ioلعمل ال BDD عموما

جاري تحميل الاقتراحات...