علوم البرمجة

ما هو مفهوم هــندســة البـرمـجيــات Software Engineering ؟

استُخدمت هندسة البرمجيات كمفهومٍ نظريّ من حين لآخر في أواخر الخمسينات وبداية الستينات من القرن الماضي. أما الاستخدام الرّسمي الأول لهذا المُصطلح فكان في مؤتمرٍ عُقد من قبل اللجنة العلمية في منظمة حلف شمال الأطلسي 1968 حول البرمجيات، وقد أخذ هذا المصطلح بالانتشار منذ ذلك الحين ولاقى اهتماماً متزايداً في نواحي مُختلفة.

عقد المؤتمر لمعالجة ما يُعرف بـ “أزمة البرمجيات” والتي ظهرت بسبب عدم استخدام منهجية في التفكير (Software Development Process) عند بناء البرمجيات، مما أدى إلى ظهور أخطاءٍ كثيرة خلال عملية بناء وصيانة البرمجيات، وبالتالي أصبحت البرمجيات تحتاج إلى وقتٍ كبير لتطويرها ولصيانتها، وكُلفة مالية عالية أكثر مما هو مُتوّقع، وبعد تحمّل التأخير في الوقت وتجاوز الميزانية كانت البرمجيات ذات كفاءة ضعيفة في إنجاز الوظائف المطلوبة، كما كانت ذات فعالية منخفضة، فضلاً عن عدم تلبية كافة المُتطلبات بالشكل الكامل.

مفهوم هندسة البرمجيات

يتكون أي نظام حاسوبي من شقين أساسيين: العتاد الصلب Hardware والعتاد الليّن Software، أو البرمجية. بالنسبة للعتاد الصلب، فهو كل ما نشاهده ونلمسه بشكل مباشر، مثل الشاشة، لوحة المفاتيح، الفأرة، اللوحة الأم، وغيرها.

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

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

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

يمكننا أيضاً الاستعانة ببعض المراجع العالمية من أجل تعريف هندسة البرمجيات، فوفقاً لمعهد الهندسة الكهربائية والإلكترونية IEEE، فإن هندسة البرمجيات هي:

” هي الفرع الهندسي المختص باستخدام الطرق المنهجية والقابلة للقياس، من أجل تطوير وتشغيل وصيانة البرامج. أي أنها علم تطبيق الهندسة في مجال البرامج “.

أما بالنسبة لتعريف هندسة البرمجيات الصادر عام 1967 عن اجتماع لجنة حلف شمال الأطلسي (الناتو NATO)، فقد وضعه عالم الحاسوب الألماني فريديرخ باور Friederich Bauer، وهو ينص على أن :

” هندسة البرمجيات هي عملية بناء واستخدام المبادئ الهندسية المعروفة من أجل الحصول على برنامجٍ اقتصاديّ، والذي يتميز بكونه موثوق ويعمل بكفاءة على الآلات الحقيقية”.

newsimage
فريدريخ باور (1924-2015) عالم حواسيب ألماني، ساهم بوضع التعريف الأساسي لهندسة البرمجيات خلال مؤتمر حلف شمال الأطلسي في عام 1967.

مراحل بناء النظام البرمجي

في هندسة البرمجيات، بناء النظام البرمجي ليس مجرد كتابة شفرة (كود Code)، وإنما هي عملية إنتاجية لها عدة مراحل أساسية وضرورية للحصول على المُنتج. الهدف النهائي من أي برنامج هو الحصول على أفضل كفاءة ممكنة بأقل كلفة ممكنة. (هذا المعيار ينطبق على أي عملية تصميم هندسي وفي كافة المجالات). يُطلق على هذه المراحل اسم دورة حياة النّظام البرمجي (Software Life cycle) أو التي تعرف أحياناً بـ “دورة حياة تطوير النظام البرمجي SDLC: Software Development Life Cycle”.

تتألف دورة حياة النظام البرمجي Software Life Cycle من المراحل التالية:

  1. تحليل المتطلبات Requirement Analysis: خلال هذه المرحلة، يقوم الفريق المسؤول عن تطوير البرنامج بتحديد المتطلبات والأهداف التي يريدون الوصول إليها عبر البرنامج. عادةً ما تكون هذه المتطلبات محددة من الزبون، وهنا يجب أن تؤخذ مواضيع الكلفة والجودة بعين الاعتبار.
  2. التصميم Design: في مرحلة التصميم، يضع الفريق الأفكار المتعلقة بكيفية تصميم البرنامج. هنا يتم النقاش حول ما هي أفضل لغة برمجة أو بيئة برمجة قابلة للاستخدام من أجل تنفيذ البرنامج المطلوب بالمتطلبات المحددة.
  3. التنفيذ Implementation: بعد تحديد المتطلبات والأهداف والاتفاق على لغة البرمجة ووضع الخطوط الأساسية للبرنامج وبنيته، يقوم الفريق بتنفيذ “نموذجٍ أوليّ Prototype” للبرنامج.
  4. الاختبار Testing: في مرحلة الاختبار، يقوم الفريق باختبار برنامجهم والتأكد من أنه يقوم بكافة الوظائف المطلوبة منه، وضمن المعايير والمتطلبات الموضوعة.
  5. التطوير Evolution: بعد انتهاء مرحلة الاختبار، والتأكد من أن البرنامج فعال، ويقوم بالوظيفة المطلوبة منه بأفضل كفاءة وأقل كلفة، يعمل الفريق على البحث عن سبل تطوير البرنامج، وإضافة ميزات جديدةٍ له، وجعله أكثر فاعلية وأكثر كفاءة.
دورة-حياة-النظام-البرمجي
مراحل تطوير وبناء نظام برمجي، أو البرامج، وذلك وفقاً لنموذج “الشلال” الكلاسيكي.

المراحل السابقة هي لأحد أشهر نماذج بناء النظام البرمجي، وهو نموذج “الشلال Waterfall Model”، والذي يعتبر من النماذج الكلاسيكية في بناء النظام البرمجي. تم تطوير هذا النموذج وغيره من النماذج الكلاسيكية، حيث ظهر مفهوم المنظومات أو العمليات المرنة Fragile Process، والتي تتخلى عن النموذج الثابت للمنظومة الكلاسيكية في سبيل الحصول على المزيد من المرونة والأريحية في كيفية وآلية تنفيذ المشروع والنظام البرمجي.

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

للمزيد من المصادر: هنا و هنا و هنا و هنا و هنا

للمزيد من المقالات المتعلقة بالبرمجة:

أسس التصميم الهندسي

4 لغات برمجية يجب على المبتدئين تعلم أحدها

البرمجة الاحتمالية قادرة على كتابة برنامج من خمسين سطر بدلاً من عشرات الألوف!

ما هي المصادر المفتوحة؟

إذا كنا قادرين على كتابة برامج خالية من الأخطاء…لماذا لا نقوم بذلك؟

مقالات ذات صلة

‫6 تعليقات

  1. جزاكم الله خير ولكن ملاحضة أرجو الأخذ بها … أرجو ان يكون خط المقالة كبير الحجم حتى لا يصعب قراءة المقالات

  2. جزاكم الله خيرا اعجبني اسلوب الكتابه حيث يتضمن المصطلحات الاساسيه والشرح المفهوم

  3. مقالة مختصرة ومفيدا اريد المزيد من المعلومات المتعلقة بلبرمجة وكيفية تعلمها باسهل الطرق…جزاكم الله الف خير

زر الذهاب إلى الأعلى