هندسة البرمجيات Software engineering هي فرع من فروع المعلوماتية يهدف إلى تطوير مجموعة أسس و قواعد تهدف إلى تحسين طرق تصميم و تطوير البرامج على جميع المستويات وذلك بطريقة تلبي احتياجات المستخدمين.
هندسة البرمجيات لا تهتم بكتابة البرنامج نفسه أي بكتابة شفرته بل تحاول تحسين عملية تطوير و صنع البرنامج إبتدائا من المواصفات التي يضع الحريف و انتهائا عند مشكلة صيانة البرنامج أو توسيعه. وهي تقوم على دراسة احتياجات المستخدم وتصميم البرنامج المناسب لها قبل كتابة شيفرته ، والأخذ بعين الاعتبار العديد من الجوانب كالقدرة على تطوير البرنامج بسهولة لاحقا ، أو السرعة ، أو إمكانية إضافة ملحقات له بشكل ديناميكي.
تاريخ هندسة البرمجيات
استخدمت هندسة البرمجيات كمفهوم نظري من حين لآخر في أواخر الخمسينات و بداية الستينات من القرن الماضي . أما الاستخدام الرسمي الأول لهذا المصطلح فكان في مؤتمر عقد من قبل اللجنة العلمية في منظمة حلف شمال الأطلسي 1968 حول البرمجيات, وقد أخذ هذا المصطلح بالانتشار منذ ذلك الحين و لاقى اهتماماً متزايداً في نواحٍ مختلفة. عقد المؤتمر لمعالجة مايعرف "أزمة البرمجيات" والتي ظهرت بسبب استخدام الوسائل التقليدية في بناء البرمجيات مما أدى إلى ظهور برمجيات تحتاج إلى وقت كبير لتطويرها, وكلفة مالية عالية أكثر مما هو مخمن لها وكفاءة ضعيفة في إنجاز الوظائف المطلوبة.
مفهوم هندسة البرمجيات
البرمجية(Software) شيء غير ملموس إلى حد ما بالمقارنة مع المنتجات الأخرى وهي سلسلة من آلاف أو ملايين الأوامر التي تطلب من الحاسوب إجراء عمليات معينة مثل عرض المعلومات أو إجراء الحسابات أو تخزين البيانات . هذه البرمجيات هي بمثابة الروح من الجسد في النظام الحاسوبي و هي في توسع دائم و ازدياد في التعقيد و المتطلبات والمهام التي تقوم بتنفيذها. أما هندسة البرمجيات فهي فرع من فروع الهندسة يقوم على مجموعة أسس و قواعد تهدف إلى تصميم و تطوير البرامج بوفرة و نوعية عالية تلبي احتياجات المستخدمين, هذا الفرع من الهندسة يتميز بأنه لايحتاج إلى رأس مال كبير و بالتالي الخسارة فيه قليلة على عكس بقية الهندسات, كما لا يكفي لإيجاد البرمجية المتكاملة و الجيدة عمل شخص واحد وإنما يتطلب ذلك فريقاً من المهندسين الجيدين. و قد أصبحت مهنة البرمجة مهنة دارجة جداً حتى أصبح كل من هب ودب يسمي نفسه مبرمجاً لذلك كان من الضروري إيجاد هندسة البرمجيات لوضع الأسس والمعايير التي تصون هذه المهنة من المتطفلين بحيث يصبح بالإمكان تمييز البرنامج الجيد من غير الجيد.
مراحل بناء النظام البرمجي
في هندسة البرمجيات إن بناء النظام البرمجي ليس مجرد كتابة شفرة وإنما هي عملية إنتاجية لها عدة مراحل أساسية وضرورية للحصول على المنتج وهو البرنامج بأقل كلفة ممكنة وأفضل أداء, يطلق على هذه المراحل اسم دورة حياة النظام البرمجي Software Lifecycle قد يبدو بعضها ليس له علاقة بالبرمجة. وهناك عديد التصورات و النماذج في هندسة البرمجيات تصف عملية إنتاج برنامج و الخطوات اللازمة لذلك. كما أن هذه الدورة خاضعة للتطوير دائما، حيث بالإضافة للدورات الكلاسيكية، ظهر مفهوم المنظومة المرنة Agile Process و التي تتخلي عن النموذج الثابت للمنظومة الكلاسيكية في سبيل المزيد من حرية الحركة للمشروع. و فيما يلي عرض لأحد أشهر دورات حياة النظام البرمجي الكلاسيكية و هي دورة الشلال Waterfall Model:
كتابة كراس الشروط الخارجي و الداخلي
كراس الشروط الخارجي يتم أخذه من الحريف ويحتوي على طلبات الحريف في ما يخص مواصفات البرنامج الذي يجب إنشاؤه. ثم يتم في عملية تحليل أولية كتابة كراس شروط داخلي يحتوي على تفسير المواصفات التي يريدها الحريف بدقة أكبر وبطريقة تتماشى مع مصطلحات المبرمجين. قد تكون طلبات الحريف متعارضة وفي هذه الحالة يتم الرجوع إليه لتنقيح كراس الشروط
التحليل
و في هذه العملية يتم تحديد المتطلبات و المهام التي سيقوم بها البرنامج, و وصف هذه المهام بدقة تامّة, كما يتم دراسة الجدوى من البرنامج, فالمستخدم مثلاً يضع تصوراً للبرنامج ليقوم بعمليات معينة ومهمة مهندس البرمجيات في هذه المرحلة هي استخلاص هذه الأفكار وتحديدها لذلك فهي تتطلب مهارة عالية في التعامل مع الزبائن وقدرة على التحليل الصحيح. ينتج في نهاية هذه المرحلة وثيقة تدعى جدول الشروط والمواصفات.
التصميم
يتم تقسيم البرمجية إلى كتل وتعريف العلاقات بين هذه الكتل ثم التفصيل في هذه الكتل و وضع الخوارزميات الملائمة لكل كتلة, في نهاية هذه العملية تكون البرمجية جاهزة لعملية الترميز, كما يتم اختيار لغة أو لغات البرمجة الملائمة لهذا البرنامج.
الترميز
تحول الخوارزميات السابقة إلى إحدى اللغات البرمجية و التأكد من صحتها لكل كتلة من الكتل. تم تحويلها الى لغة الآلة التي يتعامل بة جهاز الحاسب فقط
الاختبار و التكاملية
يتم جمع الكتل مع بعضها و اختبار النظام للتأكد من موافقته لجدول الشروط و المواصفات و خاصة اذا كانت الكتل قد كتبت من قبل عدة أعضاء في الفريق.
التوثيق
وهي مرحلة هامة من مراحل بناء النظام البرمجي حيث يتم توثيق البناء الداخلي للبرنامج وذلك بغرض الصيانة والتطوير. يفضل عادة أن يترافق التوثيق مع كل مرحلة من المراحل السابقة واللاحقة، وأن يكون هناك فريق خاص يهتم بعملية التوثيق لجميع المشاكل والحلول التي يمكن أن تظهر أثناء بناء البرمجية. وبدون التوثيق قد يصل مصنع البرمجية إلى مرحلة لا يعود بعدها قادراً على متابعة صيانتها وتطويرها مما يزيد الكلفة المادية والزمنية الخاصة بهذه البرمجية إلى حدود غير متوقعة، أو بمعنى آخر الفشل في بناء برمجية ذات جودة عالية ودورة حياة طويلة.
الصيانة و التطوير
إن هذه المرحلة هي المرحلة الأطول في حياة النظام البرمجي لبقاء النظام قادراً على مواكبة التطورات و المعدات الحديثة, جزء من هذه المرحلة يكون في تصحيح الأخطاء والجزء الآخر يكون في التطوير و إضافة تقنيات جديدة. إن هذه الخطوات كما نلاحظ مشابهة لخطوات الإنتاج في الهندسيات الأخرى.
الفرق بين البرمجة و هندسة البرمجيات
تعتبر البرمجة أن كتابة الكود هي أهم عملية في بناء البرامج بغض النظر عن الجدوى من البرنامج أو إمكانية قبول المستخدم له أو حتى قابلية التطوير, في حين أن هندسة البرمجيات تعمل على بناء النظام البرمجي كمشروع متكامل و دراسته من كافة الجوانب: البناء البرمجي, الدعم الفني و الصيانة, التسويق و المبيعات, التطوير و التدريب على استخدامه, وبذلك يمكنها بناء الأنظمة الكبيرة لاستخدامها نظام فريق العمل في حين أن البرمجة الفردية تعجز عن ذلك.
..
اّمـــل ان اكون قد وفقت في اختيار الموضوع
خالص تحيــــة وارق تقدير
هندسة البرمجيات لا تهتم بكتابة البرنامج نفسه أي بكتابة شفرته بل تحاول تحسين عملية تطوير و صنع البرنامج إبتدائا من المواصفات التي يضع الحريف و انتهائا عند مشكلة صيانة البرنامج أو توسيعه. وهي تقوم على دراسة احتياجات المستخدم وتصميم البرنامج المناسب لها قبل كتابة شيفرته ، والأخذ بعين الاعتبار العديد من الجوانب كالقدرة على تطوير البرنامج بسهولة لاحقا ، أو السرعة ، أو إمكانية إضافة ملحقات له بشكل ديناميكي.
تاريخ هندسة البرمجيات
استخدمت هندسة البرمجيات كمفهوم نظري من حين لآخر في أواخر الخمسينات و بداية الستينات من القرن الماضي . أما الاستخدام الرسمي الأول لهذا المصطلح فكان في مؤتمر عقد من قبل اللجنة العلمية في منظمة حلف شمال الأطلسي 1968 حول البرمجيات, وقد أخذ هذا المصطلح بالانتشار منذ ذلك الحين و لاقى اهتماماً متزايداً في نواحٍ مختلفة. عقد المؤتمر لمعالجة مايعرف "أزمة البرمجيات" والتي ظهرت بسبب استخدام الوسائل التقليدية في بناء البرمجيات مما أدى إلى ظهور برمجيات تحتاج إلى وقت كبير لتطويرها, وكلفة مالية عالية أكثر مما هو مخمن لها وكفاءة ضعيفة في إنجاز الوظائف المطلوبة.
مفهوم هندسة البرمجيات
البرمجية(Software) شيء غير ملموس إلى حد ما بالمقارنة مع المنتجات الأخرى وهي سلسلة من آلاف أو ملايين الأوامر التي تطلب من الحاسوب إجراء عمليات معينة مثل عرض المعلومات أو إجراء الحسابات أو تخزين البيانات . هذه البرمجيات هي بمثابة الروح من الجسد في النظام الحاسوبي و هي في توسع دائم و ازدياد في التعقيد و المتطلبات والمهام التي تقوم بتنفيذها. أما هندسة البرمجيات فهي فرع من فروع الهندسة يقوم على مجموعة أسس و قواعد تهدف إلى تصميم و تطوير البرامج بوفرة و نوعية عالية تلبي احتياجات المستخدمين, هذا الفرع من الهندسة يتميز بأنه لايحتاج إلى رأس مال كبير و بالتالي الخسارة فيه قليلة على عكس بقية الهندسات, كما لا يكفي لإيجاد البرمجية المتكاملة و الجيدة عمل شخص واحد وإنما يتطلب ذلك فريقاً من المهندسين الجيدين. و قد أصبحت مهنة البرمجة مهنة دارجة جداً حتى أصبح كل من هب ودب يسمي نفسه مبرمجاً لذلك كان من الضروري إيجاد هندسة البرمجيات لوضع الأسس والمعايير التي تصون هذه المهنة من المتطفلين بحيث يصبح بالإمكان تمييز البرنامج الجيد من غير الجيد.
مراحل بناء النظام البرمجي
في هندسة البرمجيات إن بناء النظام البرمجي ليس مجرد كتابة شفرة وإنما هي عملية إنتاجية لها عدة مراحل أساسية وضرورية للحصول على المنتج وهو البرنامج بأقل كلفة ممكنة وأفضل أداء, يطلق على هذه المراحل اسم دورة حياة النظام البرمجي Software Lifecycle قد يبدو بعضها ليس له علاقة بالبرمجة. وهناك عديد التصورات و النماذج في هندسة البرمجيات تصف عملية إنتاج برنامج و الخطوات اللازمة لذلك. كما أن هذه الدورة خاضعة للتطوير دائما، حيث بالإضافة للدورات الكلاسيكية، ظهر مفهوم المنظومة المرنة Agile Process و التي تتخلي عن النموذج الثابت للمنظومة الكلاسيكية في سبيل المزيد من حرية الحركة للمشروع. و فيما يلي عرض لأحد أشهر دورات حياة النظام البرمجي الكلاسيكية و هي دورة الشلال Waterfall Model:
كتابة كراس الشروط الخارجي و الداخلي
كراس الشروط الخارجي يتم أخذه من الحريف ويحتوي على طلبات الحريف في ما يخص مواصفات البرنامج الذي يجب إنشاؤه. ثم يتم في عملية تحليل أولية كتابة كراس شروط داخلي يحتوي على تفسير المواصفات التي يريدها الحريف بدقة أكبر وبطريقة تتماشى مع مصطلحات المبرمجين. قد تكون طلبات الحريف متعارضة وفي هذه الحالة يتم الرجوع إليه لتنقيح كراس الشروط
التحليل
و في هذه العملية يتم تحديد المتطلبات و المهام التي سيقوم بها البرنامج, و وصف هذه المهام بدقة تامّة, كما يتم دراسة الجدوى من البرنامج, فالمستخدم مثلاً يضع تصوراً للبرنامج ليقوم بعمليات معينة ومهمة مهندس البرمجيات في هذه المرحلة هي استخلاص هذه الأفكار وتحديدها لذلك فهي تتطلب مهارة عالية في التعامل مع الزبائن وقدرة على التحليل الصحيح. ينتج في نهاية هذه المرحلة وثيقة تدعى جدول الشروط والمواصفات.
التصميم
يتم تقسيم البرمجية إلى كتل وتعريف العلاقات بين هذه الكتل ثم التفصيل في هذه الكتل و وضع الخوارزميات الملائمة لكل كتلة, في نهاية هذه العملية تكون البرمجية جاهزة لعملية الترميز, كما يتم اختيار لغة أو لغات البرمجة الملائمة لهذا البرنامج.
الترميز
تحول الخوارزميات السابقة إلى إحدى اللغات البرمجية و التأكد من صحتها لكل كتلة من الكتل. تم تحويلها الى لغة الآلة التي يتعامل بة جهاز الحاسب فقط
الاختبار و التكاملية
يتم جمع الكتل مع بعضها و اختبار النظام للتأكد من موافقته لجدول الشروط و المواصفات و خاصة اذا كانت الكتل قد كتبت من قبل عدة أعضاء في الفريق.
التوثيق
وهي مرحلة هامة من مراحل بناء النظام البرمجي حيث يتم توثيق البناء الداخلي للبرنامج وذلك بغرض الصيانة والتطوير. يفضل عادة أن يترافق التوثيق مع كل مرحلة من المراحل السابقة واللاحقة، وأن يكون هناك فريق خاص يهتم بعملية التوثيق لجميع المشاكل والحلول التي يمكن أن تظهر أثناء بناء البرمجية. وبدون التوثيق قد يصل مصنع البرمجية إلى مرحلة لا يعود بعدها قادراً على متابعة صيانتها وتطويرها مما يزيد الكلفة المادية والزمنية الخاصة بهذه البرمجية إلى حدود غير متوقعة، أو بمعنى آخر الفشل في بناء برمجية ذات جودة عالية ودورة حياة طويلة.
الصيانة و التطوير
إن هذه المرحلة هي المرحلة الأطول في حياة النظام البرمجي لبقاء النظام قادراً على مواكبة التطورات و المعدات الحديثة, جزء من هذه المرحلة يكون في تصحيح الأخطاء والجزء الآخر يكون في التطوير و إضافة تقنيات جديدة. إن هذه الخطوات كما نلاحظ مشابهة لخطوات الإنتاج في الهندسيات الأخرى.
الفرق بين البرمجة و هندسة البرمجيات
تعتبر البرمجة أن كتابة الكود هي أهم عملية في بناء البرامج بغض النظر عن الجدوى من البرنامج أو إمكانية قبول المستخدم له أو حتى قابلية التطوير, في حين أن هندسة البرمجيات تعمل على بناء النظام البرمجي كمشروع متكامل و دراسته من كافة الجوانب: البناء البرمجي, الدعم الفني و الصيانة, التسويق و المبيعات, التطوير و التدريب على استخدامه, وبذلك يمكنها بناء الأنظمة الكبيرة لاستخدامها نظام فريق العمل في حين أن البرمجة الفردية تعجز عن ذلك.
..
اّمـــل ان اكون قد وفقت في اختيار الموضوع
خالص تحيــــة وارق تقدير