أرجو أن تطور لي برنامجاً يفعل كذا وكذا وكذا. ترد عليه بأن هذا البرنامج يتطلب س من الوقت و ص من المال. فيرد عليك: لماذا؟ المطلوب من هذا البرنامج بسيط جداً وبالإمكان تنفيذه خلال يوم واحد.
كل من عمل في مجال تطوير البرمجيات لمصلحة عملاء لا بد وأن يكون قد مر بشيء مشابه لهذه التجربة. سواءً كان عمله كمستقل أو كان يعملُ موظفاً في قسم تقني لشركة غير تقنية.
يتوقع الأشخاص غير التقنيون أن تطوير البرمجيات أمرٌ بسيط. ففي وجهة نظرهم أن تطوير البرمجيات عبارة عن شفرة مصدرية أو كود يتم كتابته خلال ثوان أو دقائق فيعمل البرنامج.
دعنا نكُن عادلين،. لا نستطيع أن نلومهم على اعتقادهم هذا لسببٍ واحد، وهو أنهم لا يعلمون فعلاً كيف يتم تطوير البرمجيات! فهذه النوع من الردود الذي يشعر فيه المختص بالتقليل من عمله يكونُ معتمداً على اعتقادٍ خاطئ وهي حالةٌ غيرُ مقتصرةٍ على المجال البرمجي فقط.
هذه الردود تقال للمصممين وللأطباء والبنّاء والنجّار والسبّاك وغيرها من المهن.
من وجهة نظري تقعُ على عاتق مختصي الحاسب مهمة شرح وإيضاح وتعليم كل من يمتلك اعتقاداً خاطئاً عن مجالات علوم الحاسب أو تنقصُه بعضُ المعرفة دونَ أن تذمُّرٍ من جهلِ شخصٍ يريد أن يتعلم.
في هذه التدوينة نمر على مراحل تطوير النظم أو البرمجيات. والتي لو علمها طالبُ البرنامج لما استخف أو قلل من الجهد والوقت المطلوب لتطويرها.
بدءاً يجبُ أن تعلم أن هذه الخطوات عبارة عن خطوط عريضة لتطوير البرمجيات. وتوجد العديد من نماذج ومنهجيات تطوير النظم المُشتقة من هذه الخطوات الرئيسية مثل: النموذج الرشيق Agile Model ونموذج الشلال Waterfall Model والنموذج الحلزوني Spiral Model وغيرها.

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

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

بعد اختيار التقنيات يجب على مهندس البرمجيات أن يرسم مخطط النظام أو هيكل النظام. وهو يماثل الكروكي أو الرسم الهندسي للمنزل قبل بناءه. وبناءً على هذا الرسم تصبح المهام التالية واضحة لجميع الأقسام من مبرمجين ومصممين ومختبرين وغير ذلك.
كما يستطيع العميل الآن تصور النظام الذي سيتحصل عليه في النهاية.
(3) بناء النظام
بناء النظام هي المرحلة التي لا يختلف عليها اثنان. التقني وغير التقني يعلم عنها.
في هذه المرحلة يتم بناء النظام وفقاً للمخطط الذي تم الاتفاق عليه أثناء تصميم النظام. لاحظ أنني لم أقل برمجة إنما بناء.
هل تعلم لماذا؟
برغم أن البرمجة عملية أساسية ومحورية وجوهرية في بناء النظام إلا أنها ليست العملية الوحيدة في بناءه! فتصميم أشكال الشاشات جزءٌ من البناء ورسم الصور واختيار الألوان، وتصميم وبناء قواعد البينات، وإدارة الاجتماعات التقنيّة مثل اجتماعات مراجعة الشفرات المصدرية Code Review وإعادة بناء الشفرات المصدرية Code Refactoring وغيرها من العمليات تعتبر جزءاً أصيلاً من مرحلة بناء النظام.

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

عند الوصول إلى مرحلة اختبار النظام يقوم قسم اختبار النظم بتنفيذ خطته المعدة مسبقاً وإرسال الأخطاء Bugs إلى قسم تطوير النظم. بمعنى أنه يعيد العمل إلى مرحلة بناء النظام وينتظر أن يتم حل هذه المشاكل ليقوم بإعادة اختبار النظام.
ومن الطبيعي أن يتطلب الأمر عدة دورات بين قسم تطوير النظم واختبار النظم حتى يقوم قسم اختبار النظم بإصدار التصريح النهائي بنجاج النظام في موافقة المتطلبات المتفق عليها.
(5) إطلاق النظام
يعتقدُ بعض التقنيين وغير التقنيين أنه بالانتهاء من المراحل السابقة فإن العمل قد انتهى وما تبقى من عمل ليس بالأهمية التي تُذكر لأنه سهل أو غير مهم جداً.
دعني أغير لك الفكرة بأن مرحلة إطلاق النظام من أهم مراحل دورة حياة تطوير البرمجيات وأحياناً تكون أعقد المراحل.
كي تعلم ما هو إطلاق النظام يجب أن تعلم كيف يتم تطوير النظم.
افترض أن هناك صاحب عمل لديه موقع يعمل، وكانت متطلباته عبارة عن تحسين في هذا الموقع بإضافة بعض الصفحات.
يسمى الموقع الخاص بصاحب العمل ببيئة الإنتاج Production Environment. ومن أجل التطوير في هذا النظام تنشأ نسخة من بيئة الإنتاج تسمى ببيئةُ التطوير Development Environment ومفصولة عنها تماماً بحيث يستطيع فريق تطوير النظام العمل والتعديل عليها دون التأثير على الأعمال الجارية حالياً في بيئة الإنتاج.
هناك بيئات أخرى من الأفضل إنشاؤها لإكمال دورة حياة تطوير البرمجيات بصورة جيدة. مثل بيئة الاختبار Testing Environment وبيئة اختبار قبول النظام UAT Environment وغيرها من البيئات، ولكنها ليست محور حديثنا هنا.
فلنفترض أن الشفرة المصدرية النهائية المحتوية على الصفحات التي طلبها العميل توجد في ببيئة تطوير النظام Development Environment، فإن الهدف من مرحلة إطلاق النظام هو نقل الملفات Files والإعدادات Settings التي تجعل بيئة الإنتاج تظهر الصحفات الجديدة كما تظهرها بيئة تطوير النظام.

وأرجو أن تنتبه إلى أن إطلاقُ النظام لا يعني نسخ الملفات فقط، فقد يحتوي علىع عمليات أخرى مثل إنشاء قواعد بيانات أو التعديل عليها أو تغيير إعداد الخوادم أو نقل النظام تماماً من موقع إلى آخر وغيرها من العمليات.
لذلك فإن إطلاق النظام يتطلب دعماً من جميع الأطراف المعنية بالمشروع من مبرمجين ومحللين ومختبرين ومدراء المشاريع وأصحاب العمل.
(6) الدعم والصيانة
حسناً، لا يوجد نظام آمن أو صحيح بنسبة 100%.
خسرت ناسا في عام 1999 ما يقارب 125 مليون دولار أمريكي عندما خسرت مسبار بسبب خطأ برمجي لم يُكتشف أثناء دورة حياة تطوير البرمجيات.
الأخطاء تحدث، فلا نستطيع أن نجزم بدقة عمل أي نظام حتى وإن تم اختباره مئات المرات. لذلك لا بد من مراقبة عمل النظام بعد إطلاقه والتأكد من أن مؤشرات عمله طبيعية مع الجاهزية لإصلاح الأخطاء التي تحدث.
المسؤول من أداء هذه العمليات في هذه المرحلة عادةً ما يسمى بمدير النظام System Administrator .ومهمته تتمحور حول ضمان عمل النظم بسلاسة ووفق ما هو مطلوب.

يقوم مدير النظام بدعم النظام وأداء مهام متعددة حتى وإن لم تتعلق بالنظام. مثل التأكد من الشبكات وعملها والأجهزة الطرفية مثل الطابعات وقارئات البطاقات وكل ما له علاقة بالنظام.
في حال لم يستطيع مدير النظام حل مشكلة متعلقة بالنظام وتطلب الامر تدخلاً برمجياً حينها. يقوم برفع الأمر إلى الوحدة المختصة بالدعم والصيانة من أجل تحليل المشكلة وحلها أو شرح طريقة التغلب عليها في حال لم تكن المشكلة تتطلب تدخلاً برمجياً.
خاتمة:
عندما يُخبرك أحدهم أن تطوير البرمجيات أمرٌ سهل. فكل ما عليك فعله هو أن تنيره ببعضٍ مما ذكرناه عن دورة حياة تطوير البرمجيات. وبذلك تكون قد رفعت عنهُ عذر الجهل بالمعرفة. وإذا أصرّ على التقليل من واستصغار عملك أعتقدُ أنك على علم بما يجبُ عليك فعله 🙂
مقالات مفيدة لك:
100+ شهادة تقنية لإحتراف 8 تخصصات: أمن المعلومات، الشبكات، الإدارة، البرمجة
تعرف على وظيفتك بعد التخرج وعلاقتها بـ SDLC (دورة حياة تطوير البرمجيات)
نتمنى ان نرى مقالات عن جافا المتقدمة oop وتقنياتها وشكرا لك
أنا أتمنى ذلك أيضاً 🙂 وأشكرك على طلبك فهو بالعين.
هل بالإمكان أستاذ مصطفى تطوير تطبيق لموقعك على أنظمة الموبايل
ربما أفضل مع علمي أنه بالنسبة لك مكلف على الأقل مجهوداً
الله يجزيك الخير
من الممكن طبعاً أخي غازي، فكرةٌ ممتازة.. جزيت عليها خيراً.
شكرا جزيلا على هذا العمل الجمل اتمنى ان اكون مبرمجا محترف و اريد منك المساعدة بكل ما تملك من قدرات ومهارات و ايضا اريد ان اعرف إن كان لديكم كورسات خارجية
وشكرا
نرجو اعطاء لغة جافا اهتمام زائد في مدونتكم
أشكرك على توصيتك فراس وستُؤخذ بعين الاعتبار. ما الذي تهتم به في جافا تحديدا؟