ما الفرق بين هندسة البرمجيات و علوم الحاسب ؟
تهتم علوم الحاسب (Computer science) أساسًا بدراسة واستنباط النظريات والمنهجيات التي تشكل أساس الأنظمة البرمجية والحاسوبية. بينما تركز هندسة البرمجيات على المشكلات العملية التي يواجهها العاملون في قطاع صناعة البرمجيات. إن علوم الحاسب من مهندسي البرمجيات بمترلة الفيزياء من مهندسي الكهرباء. فكما يتوجب على مهندس الكهرباء أن يكون على دراية ببعض جوانب الفيزياء، كذلك يتوجب على مهندس البرمجيات أن يمتلك بعض المعرفة حول علوم الحاسب. إذا نظرنا إلى المقارنة من وجهة نظرٍ مثالية، فإننا نقول أن على هندسة البرمجيات الالتزام بتطبيق نظريات علوم الحاسب، إلا أن الواقع العملي يخالف ذلك. فكم من مرةٍ اتبع فيها مهندسو البرمجيات أساليب غير منتظمة في تطوير برمجياتهم. وهكذا فإن العديد من نظريات علوم الحاسب تقف أحيانًا عاجزًة عن حل المشكلات البرمجية الواقعية المعقدة.
ما الفرق بين هندسة البرمجيات و هندسة الأنظمة ؟
يهتم مهندس الأنظمة بدراسة تطوير وتطور الأنظمة المعقدة التي تحتوي - ضمن ما تحتويه - على البرمجيات التي تقوم بدور هام في هذا النظام الكلي، وبالتالي يدرس مهندس النظام جميع مكونات هذا النظام من عتاد حاسوبي وتصميم لإجرائيات وسياسات معينة وتوزيع النظام بالإضافة إلى هندسة البرمجيات.
يبدأ مهندس النظام بفهم النظام حيث يقوم بما نسميه "توصيف النظام"، أي تحديد ما يجب أن يقوم به النظام، بعد ذلك يقوم بتعريف الهيكلة العامة لهذا النظام، ثم يقوم بمكاملة مكوناته المختلفة وصولا إلى النظام النهائي.
تعتبر هندسة الأنظمة فرعًا هندسيًا أقدم من هندسة البرمجيات. فقد قام الإنسان بدراسة أنظمة معقدة منذ ما يربو على المائة عام، ولعل أهمها هي الأنظمة الصناعية مثل معامل الطائرات أو المعامل الكيميائية. ولكن مع تزايد الدور الذي تلعبه البرمجيات في أنظمة اليوم ستغدو العديد من تقنيات هندسة البرمجيات قابلة للتطبيق على هندسة الأنظمة.
ما هي إجرائية تطوير البرمجيات ؟
إن إجرائية تطوير البرمجيات (Software development process) أو ما نطلق عليها اختصاراً إجرائية البرمجيات Software process هي مجموعة النشاطات التي تعنى بإنتاج المنتج البرمجي, إضافة إلى مخرجات هذه النشاطات.
تضم أي إجرائية برمجيات النشاطات التالي:
1- توصيف البرمجية (Software Specification): في هذه المرحلة يقوم كل من المهندس والزبون بتحديد المتطلبات وتوصيفها ثم يحددون القيود المفروضة على هذه البرمجية.
2- تطوير البرمجية (Software development): في هذه المرحلة يتم تصميم وبرمجة البرمجية.
3- إثبات صحة البرمجية (Software validation): التأكد من أن البرمجية تنجز الوظائف التي يريدها الزبون.
4- تطور البرمجية (Software evolution): إجراء تعديلات على البرمجية لتنفيذ وظائف أو متطلبات جديدة.
ذكرنا أنه يوجد أنواع مختلفة للأنظمة البرمجية، وذلك يقتضي - بطبيعة الحال - وجود أنواع مختلفة من إجرائيات البرمجيات.
هب أننا نريد تطوير نظام برمجي في الزمن الحقيقي (Real-time system) عندئذ يجب علينا أن نوصف المتطلبات (النشاط الأول) بشكل كامل ودقيق قبل الانتقال إلى تطوير البرمجية (النشاط الثاني) أما إذا كان المطلوب بناء نظام برمجي للتجارة الإلكترونية (E-commerce) فعندئذٍ نقوم بتوصيف المتطلبات وتطوير البرمجية على التوازي. إذاً لا بد أن ننظم هذه النشاطات بطريقة معينة وبدرجات تفصيل محددة وذلك تبعاً لنوع التطبيق ولطبيعة شركتنا. ومهما يكن من الأمر فإن إتباع إجرائية برمجيات غير مناسبة من شأنه أن يضر بجودة المنتج البرمجي أو يرفع كلفته.
ما هو نموذج إجرائية البرمجيات؟
إن نموذج إجرائية البرمجيات (Software process model) هو أسلوب لتنظيم نشاطات إجرائية البرمجيات (الفقرة السابقة) وفق طريقة معينة. إضافًة إلى ذلك يحتوي نموذج إجرائية البرمجيات على نشاطات أخرى تتعلق بالأشخاص ذوي الصلة بالمشروع البرمجي.
يمكن أن ننظر إلى نماذج إجرائية البرمجيات من عدة زوايا (نماذج):
1- نموذج تدفق العمل (Workflow model): يوضح هذا النموذج تسلسل نشاطات إجرائية البرمجية مع توضيح عمليات الدخل والخرج والعلاقات بين هذه الأنشطة. تمثل النشاطات في هذا النموذج الأفعال التي يقوم بها الإنسان.
نموذج تدفق المعطيات (Dataflow model): في هذا النموذج سننظر إلى إجرائية البرمجيات على أنها مجموعة نشاطات، كل نشاط يقوم بتحويل المعطيات. بمعنى أنه سيأخذ معطيات الدخل وسيحولها إلى معطيات خرج جديدة، مثلا سيأخذ معطيات توصيف المتطلبات وسيحولها إلى تصميم البرمجية. تتحول المعطيات من شكل إلى آخر بواسطة الإنسان أو الحاسوب.
2- نموذج الدور/الفعل Role/ action model : يمثل الأدوار التي يقوم بها الأشخاص المشاركين في إجرائية البرمجيات والنشاطات الملقاة على عاتقهم.
أما نماذج إجرائية البرمجية العامة (Generic) فهي:
1- التطوير الشلالي (The waterfall development): هذا النموذج يتناول النشاطات السابقة ويمثلها كمراحل تطوير منفصلة مثل توصيف المتطلبات وتصميم البرمجية والبرمجة والاختبار... الخ. بعد أن تتم الموافقة على كل مرحلة، سننتقل إلى المرحلة التالية. إذًا يسير هذا النموذج بشكل تسلسلي.
2- التطوير التكراري (Iterative development): لا يسير هذا النموذج بشكل تسلسلي, يحتوي على عدة تكرارات (Iteration) سيتم في كل تكرار (دورة) إنجاز نشاطات التوصيف والتصميم والبرمجة والاختبار.
في البداية سننطلق من مجموعة صغيرة من المتطلبات ثم نطور (نصمم ونبرمج) النظام انطلاقًا منها. ثم يقوم الزبون بالتحقق من هذه البرمجية ويزودنا بمعلوماته. واعتمادًا على هذه المعلومات سنقرر إما أن هذا النظام لم يكتمل بعد (أي أنه لا يحقق كل متطلبات الزبون) وعندئذ سنتابع عملية التطوير، وإما أنه أصبح جاهزًا للتسليم.
هندسة البرمجيات المرتكزة على المكونات (Component-Based Software Engineering CBSE)
نتبع هذا النموذج عندما لا نكون مضطرين إلى بناء التطبيق من الصفر. أي هناك العديد من العناصر التي يمكن أن تفيدنا في بناء البرمجية. إذًا يركز هذا النموذج على مكاملة (Integration) العناصر مع بعضها البعض وليس تطويرها من
الصفر.
م. زاهر الحاج حسين (بتصرف عن Ian Sommerville)