المنهجية الرشيقة Agile و السكرام Scrum في بناء البرمجيات وإدارة المشاريع
يتجه الكثيرين عند تعلم لغة برمجة ما إما من خلال الدراسة الذاتية أو من خلال الكلية في جامعة إلى تعلم تقنيات كتابة الأكواد البرمجية وتحسينها, أي “كيف تقوم بكتابة كود برمجي” , فيما يتم اهمال الجانب الأهم في صناعة البرمجيات وهو “كيف تقوم ببناء نظام برمجي متكامل” و كيف أقوم ب “إدارة فريق برمجي”.
في هذه المقالة سنقوم بإلقاء الضوء على أسلوب حديث وفعّال يتم اتباعه في بناء وإدارة المشاريع البرمجية والمعروف اليوم ب Scrum ولكن قبل الحديث عن ال Scrum لابدّ من التعريف بالمنهجية الرشيقة المشهورة Agile.
الإكمال التلقائي للنصوص هي الميزة التي تسمح للتطبيق بالتنبأ بالنص الكامل، وذلك بمجرد كتابة بادئة من النص، من المأكد أنك قمت باستخدامه كثيراً في حياتك اليومية مثل:
محركات البحث: محرك البحث جوجل يقترح لك اكمالاً تلقائياً للنص بمجرد كتابة جزء منه في مستطيل البحث، عادة تكون هذه الاقتراحات مرتبة حسب أكثر اﻷمور التي يتم البحث عنها حالياً.
في البريد الالكتروني، بمجرد أن تكتب جزأ من العنوان سوف تظهر لك قائمة من الاقتراحات.
وسائل التواصل الاجتماعي، مثل فيسبوك، لينكيد إين، انستغرام…
في محررات كتابة الأكواد، أنا أستخدم حاليا تطبيق Atom ولقد قمت باستخدام ميزة الإكمال التلقائي على اﻷقل 10 مرات في هذا الجزأ البسيط من المقالة.
في هذه المقالة سأتحدث عن افضل 8 مواقع ستجد فيها أكواد جاهزة ومفتوحة المصدر. سواء كنت مبرمج محترف أو مبتدئ أو بدأت في تعلم البرمجة ستحتاج عاجلاً ام أجلاً الى مجموعة من الأكواد الجاهزة التي ستختصر لك الوقت أو التي ستتعلم من خلالها مجموعة من المهمات التي ستحتاجها في طريقك الى الاحتراف أو في مشاريعك .
الخوارزميات وبنى المعطيات في بايثون: الدرس الأول تحليل الخوارزميات
في هذه السلسلة من الدروس, سأقوم شرح مفاهيم عامة في الخوارزميات وبنى المعطيات في لغة البرمجة بايثون، رغم أن الأمثلة في هذه الدروس مكتوبة في لغة بايثون، إلا أن المفهوم العام المراد إيصاله يمكن تعميمه على جميع لغات البرمجة.
كما هو الحال في جميع المشاريع في أي مجال من مجالات الحياة العملية – حيث لا بد من وجود منهجية في العمل وفلسفيات متَبعة لإنجاز الأعمال بدقة وسرعة وكفاءة على حد سواء – كان الحال في مجال تطوير البرمجيات حيث تم وضع منهجيات ودراسات واسعة لتحقيق المتطلبات بكفاءة عالية ف وضعت الأسس لتنظيم فرق العمل وتخطي العقبات التي تواجه المطورين في الوصول إلى الهدف المطلوب أو الوصول دون الكفاءة المطلوبة ..
فظهرت عدة منهجيات وكانت الأهم هي المنهجية الرشيقة (Agile) والتي خلقت ثورة في إدارة المشاريع البرمجية .
تعريفاً : آجايل هي منهجية متبعة في تطوير البرمجيات تعتمد على التطوير المستمر للبرمجيات والاختبارات المتزامنة مع التطوير , أي بعكس المنهجيات القديمة كنموذج الشلال (waterfall) .
من أهم ما تميزت به هذه المنهجية هو (رشاقتها) حيث برزت عدة ميزات منها :
المقدرة على الاستجابة لأي تغييرات في الخطة المقترحة لبناء البرمجيات خلال أي مرحلة من مراحل تطوير المشروع : حيث يتم تقسيم المشروع كاملاً إلى جزئيات صغيرة وكل جزئية تعتبر مشروع صغير يمكن تقديمه للزبون وهذا ما يكسب الزبون الرضا كما يمكنه إبداء آرائه واقتراحاته حول كل مرحلة من مراحل المشروع .
تعزيز التفاعلات الفردية والجماعية للفريق سواء على مستوى العمليات أو الأدوات : وهنا يظهر الاهتمام بالفريق ومعنوياته وخبراته أكثر من الاهتمام بالأدوات المستخدمة كما تتم المشاركة بالمعارف والأدوات المتوفرة لإنجاز المشروع
تسهيل التفاوض مع الزبون وقدرته على مراقبة التطورات القائمة على المشروع : غالباً الزبون يملك نظرة ضبابية تجاه المشروع في بداية الأمر .. وهذا أمر طبيعي ولكنه غالبا ما كان يسبب العديد من المشاكل في المنهجيات القديمة حيث يكون المنتج في نهاية الأمر مخالف لتوقعات الزبون وهذا ما قامت بحلَه هذه المنهجية بحيث كما ذكرنا سابقا يتم تسليم المشروع على مراحل مما يضع الزبون في صورة العمل خطوة بخطوة .
ورغم اتجاه نسبة كبيرة من مهندسي البرمجيات نحو منهجية ال Agile في تطوير المشاريع إلا أنه لا بد من وجود بعض التفاصيل التي لا يزال يتفوق بها نموذج الشلال مثلا :
الفرق بين المنهجية الرشيقة (Agile) ونموذج الشلال (Waterfall Method) :
عموما هناك طرق عديدة لتطبيق المنهجية الرشيقة وهي :
– SCRUM
يعتبر Scrum من طرق Agile التي تهتم خصوصا بكيفية إدارة المهام وبيئة العمل التي سيعمل ضمنها فريق التطوير وبشكل أساسي تم استخلاص فكرة Scrum من رياضة الركبي الأميركية (Rugby) حيث تقوم Scrum على فكرة تطوير روح الفريق والتعاون بين أعضاءه بحيث لا يتجاوز عدد أفراد الفريق المسؤول عن تطوير خدمة معينة اكثر من (7-9) أشخاص .
وبشكل أساسي هناك ثلاث وظائف رئيسية في كل فريق هي : Scrum master Product owner Scrum Team
حيث تكون مهمة كل منهم كالآتي :
– Scrum Master
يكون مسؤول عن تجهيز الفريق والإشراف على الاجتماعات الدورية للفريق وإزالة العقبات المواجهة للتقدم بالعمل وتعتبر المهمة الأكثر أهمية هي فصل الفريق عم الزبون بحيث لا تؤثر متطلبات الزبون أو ضغوطات الزبون على الفريق حيث يكون صلة الوصل بين الزبون والفريق بدون تشتيت انتباه الفريق أو إضعاف روح الفريق وتعتبر مهمة إدارة الاجتماعات الدورية أمر غاية في الأهمية بحيث تتكرر هذه الاجتماعات بشكل يومي لمدة لا تتجاوز ال 15 دقيقة لمناقشة التطورات الأخيرة في المشروع والعقبات التي واجهت المطورين وطرح أساليب لحل هذه المشكلات مما يساهم في رفع سوية وخبرة أعضاء الفريق
– Product Owner
من الغريب أن تدرك أن مالك المشروع (الزبون فعليا) يعتبر عنصر أساسي من فريق العمل ولكن كيف !؟
بكل بساطة مالك المشروع هو من يقوم بتحديد متطلبات المشروع (Product Backlog), و أولوية هذه المتطلبات ويتحمل مسؤولية اختبار الفعالية لكل مرحلة من مراحل التطوير
– scrum team
الفريق هو من يدير عمله ليكمل كل (sprint ) من كل دورة تطوير وهو فريق المطورين جميعا بحيث يكون الجميع سواسية في الفريق
– Product Backlog
ويمكننا تشبيه ال Product Backlog لمستودع خاص بالمشروع حيث تخزن ضمنه المتطلبات التي يجب تحقيقها والمطروحة من قبل ال Product owner بشكل قصص وهي ما يسمى (user stories) كما يتم تخزين مجريات تطوير المشروع وأولوية المتطلبات بعضها على بعض ويتم توزيعها على أعضاء الفريق , كما يمكن لأعضاء الفريق وضع متطلباتهم واحتياجاتهم ليتم تلبيتها من مالك المشروع .
أما عن طريقة تنفيذ منهجية Scrum او ما يعرف بـ Scrum practices فهي تضمن لنا تقديم منتج أصغري أو جزيئة (قابلة للعمل ) من المشروع الكلي
– SCRUM Practices
كل جزئية من الـ Scrum تدعى Sprint
Product Backlog هو قائمة من التفاصيل المحددة للوصول إلى المنتج النهائي
خلال كل sprint يتم اختيار أحد متطلبات العميل (الزبون) لإضافتها إلى الـBacklog الخاص بالـ Sprint الحالي
يقوم الفريق بالكامل بالعمل على المهمة المحددة
هناك اجتماع يومي بين أعضاء الفريق لمناقشة كافة التطورات والمشاكل التي تواجه الفريق
في نهاية كل sprint يقوم الفريق بتسليم منتج مصغَر للزبون