ماذا تعرف عن " البرمجيات "Software" ( تقرير علمي )

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

فالبرمجيات مكلفة فى المال والجهد , وفى المشاريع الكبيرة نحتاج إلى ذلك الشخص الذى ينظم العمل ويضع استراتجيات محسوبة للاستفادة من الجهود وانجاز المشروع فى اقل وقت وضمان اكبر جودة ذلك الشخص مهندس البرمجيات او Software Engineer.
من هو مهندس البرمجيات او Software Engineering
هو الشخص المسئول عن تنظيم العمل لمجموعة المبرمجين الذين يشاركون فى بناء التطبيق او المشروع البرمجى.
لابد لمهندس البرمجيات ان تكون له معرفة بالتالى :
معرفة تقنية : مثل المعرفة بالبرمجة , الرياضيات , صيانة البرنامج , تحليل واختبار البرنامج.
معرفة غير تقنية : مثال القدرة على التواصل مع اعضاء الفريق , القيادة , والشخصية والمرونة
البرامج او المشاريع البرمجية متنوعة من عدة نواحى منها على سبيل المثال :
الاختلاف فى متطلبات العميل.
لا يوجد طريقة واحدة او استراتيجية واحدة للتعامل مع المشاريع لانها مختلفة عن بعضها.
لا يوجد لغة برمجة واحدة هى الافضل او بيئة برمجة دائمًا الافضل فكل شئ معتمد على المشروع. 
كل هذا التنوع فى طبيعة المشاريع البرمجية تفرض على مهندس البرمجيات التمتع بالمرونة فى التعامل مع المشروع.
انواع البرمجيات من حيث الاستخدام
يوجد نوعان من البرمجيات من حيث الاستخدام :
برامج عامة Programs Generic وهى البرامج المنتجة للاغراض العامة للاستخدام من قبل الافراد او الشركات امثلة لهذه البرامج برامج شركة ميكروسوفت مثل الورد وغيرها و برامج شركة ادوبى مثل الفوتوشوب.
برامج مخصصة Programs Bespoke وهى البرامج المعدة خصيصًا للعميل على حسب طلباته.
الاشياء التى يجب اخذها فى الاعتبار للبرمجيات :
الزمن : من الاشياء المهمة التى وضعها بالاعتبار مثل تحديد المدة الزمنية المطلوب لانهاء البرنامج وكذلك موعد تسليم البرنامج
الجودة : الجودة يمكن ان ننظر لها من عدة جهات كالتالى
الجودة من منظور العميل او Customer وتشمل تسليم النظام فى الموعد المحدد وكذلك ان يكون البرنامج خالى من الاخطاء ويؤدى المطلوب بكفاءة و ان يكون قابل للصيانة بسهولة.

الجودة من منظور المستخدم او User وتشمل تصميم جيد للبرنامج وسهولة الاستخدام والمرونة والكفاءة.
الجودة من منظور المطور Engineer Software Or Developer ان يكون البرنامج آمن من الاختراق وكذلك قابلية الصيانة بسهولة وقابلية توسيع البرنامج او اضافة المزيد من الوظائف التى يقوم بها البرنامج بسهولة.
مما سبق يمكن استنتاج المعايير التى يمكن من خلالها الحكم على البرنامج بانه جيد او غير جيد وهى :
قابلیة الصیانة.
الكفاءة.
الاعتمادیة وتعنى ان يكون البرنامج خالى من الاخطاء.
قابلیة الاستخدام Usability وتعنى مدى امكانیة تعلم النظام بسھولة.
تطور البرمجيات software evolution
يشار إلى المشاريع البرمجية التى تتبع مبادئ هندسة البرمجيات بمصطلح software evolution وهذا يمشل التطوير الاولى للمشروع والصيانة والتحديثات حتى الوصول إلى المنتج النهائى الذى يلبى احتياجات العميل.
التطور يبدأ من عملية جمع متطلبات العميل . وبعد ذلك يقوم المطورون بإنشاء نموذج أولي للمشروع المطلوب وإظهاره للمستخدمين للحصول على ملاحظاتهم المبدائية على المشروع. يقترح المستخدمين التغييرات، والتي يتم تنفيذها على عدة تحديثات متتالية وصيانة مستمرة. حتى يتم إنجاز البرنامج المطلوب.
وحتى بعد الوصول إلى البرنامج المطلوب من قبل العميل فان التطور المستمر للتكنولوجيا يتطلب تغير البرنامج واضافة مميزات جديدة له لموكابة العالم , انشاء تطبيق مواكب للعصر من الصفر مرة اخرى هى عملية مكلفة جدًا اقتصاديًا وهنا يأتى دور التحديثات وهو امداد المشروع البرمجى باخر التحديثات ليظل مواكب للمتطلبات.
نماذج هندسة البرمجيات
و تشير إلى الطرق والخطوات التي يتم اتخاذها أثناء تصميم البرنامج. هناك العديد من الطرق المقترحة ولا يوجد طريقة واحدة هى الافضل ولكن لكل مشروع خصوصيته ولكن مع ذلك يمكننا التعرف على هذه النماذج والتى يمكن استخدمها او ويمكن دمجها مع بعضها.
هندسة البرمجيات
هندسة البرمجيات : النموذج الخطى التسلسلى او Waterfall Model
ويوجد الكثير من هذه الطرق المستخدمة فى سوق العمل نذكر منها على سبيل المثال.
النموذج تسلسلي خطي  linear sequential model
وقد تم تطوير هذا النموذج في عام 1970 لجعل عملية تطوير البرمجيات أكثر تنظيما. فهو يعتبر من الأقدم الاكثر استخدامًا فى هندسة البرمجيات.

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