Thursday, May 11, 2017

تخصص هندسة البرمجيات, الفرق بينه و بين تخصصات الكمبيوتر الأخرى


مقدمة

كثير من الناس في هذه الايام تسمع بتخصص هندسة البرمجيات (Software Engineering) ولكن لا تعرف الفرق بينه و بين اي تخصص آخر يتعلق بالحاسوب مثل تخصص علوم الكمبيوتر (Computer Science) او هندسة الكمبيوتر (Computer Engineering). إذا, ما هو تخصص هندسة البرمجيات؟ و ما هي المناهج اللتي يقومون بدراستها؟ كل هذا و اكثر سوف نتعرف عليه هنا.
المواضيع اللتي سوفَ اتحدث عنها:


تعريف التخصص

هو تخصص يهتم بدراسة بناء البرامج الحاسوبية من الصفر و حتى النشر بطريقة منظمة و غير عشوائية. هندسة البرمجيات ليس فقط مجرد كتابة تعليمات برمجية. بل هي عملية تهتم بتوصيل منتج الى عميل معين بأقل كلفة و في اسرع وقت ممكن. من اجل عمل هذه الاهداف، يدرس من يختار تخصص هندسة البرمجيات عدة مواد تهتم بدراسة دورة حياة المُنتج البرمجي (Software Product Life Cycle).

مراحل دورة حياة المُنتج البرمجي

بشكل عام، هذه الدورة تتألف من خمس مراحل:
  • مرحلة تجميع المتطلبات.
  • مرحلة التصميم.
  • مرحلة التنفيذ.
  • مرحلة الإختبار.
  • مرحلة الصيانة.
لِكل مرحلة مِن مراحل الدورة توجد مُخرجات و مُدخلات و جميع المراحل مُتصلة بِبعضها البعض. ترتيب هذه المراحل يعتمد بِشكل مُباشر على نوع نموذج دورة حياة النظام البرمجي (Software Process Model). بِشكل عام, توجد  ثلاثة نماذج, نموذج الشلال (Waterfall Model), النموذج الحلزوني (Spiral Model)  ومنهجيات آجَايل (Agile​ Methodologies).



وصف مراحل دورة حياة المُنتج البرمجي في نموذج الشلال

في هذا القسم, سوف نتعرف على تفاصيل كُل مرحلة مِن مراحل بِناء المُنتج البرمجي و ما هي مُدخلات و مُخرجات كُل مرحلة في نموذج الشلال. هذا النموذج يُعتبر واحد مِن الأنظِمة الكلاسيكية و اللتي كانت تُستخدم بِشكل كبير.

مرحلة تجميع المُتطلبات (Requirements)

هذه المرحلة تُعتبر حجر الأساس لجميع المراحل. حيثُ انه اي خطأ بهذه المرحلة سوف يكون له تأثير مُكلف جداً و قد يكون إصلاحه صعب. في هذه المرحلة يقوم مُهندس البرمجيات بِتجميع مُتطلبات العميل عبر عِدة طرق. من هذه الطرق هي عمل مُقابلات مع العميل و عصف الذهن و عمل إستطلاعات. ايضاً في هذه المرحلة يقوم مُهندس البرمجيات بِكتابة ما يُسمى بِ "وثيقة مُتطلبات البرنامج (Software Requirements Document)". هذه الوثيقة تحتوي على جميع مُتطلبات العميل و مصدرها و هل تم التَأكُد مِن صحتها ام لا. يتِمُ ايضاً بِهذه المرحلة عمل ما يُسمى ب "مُخطط حالة الإستخدام (Use Case Diagram)" و مُخطط التَسَلسُل (Sequence Diagram)". يُستخدم المخطط الأول لتوفير صورة عامة حول حالات الإستخدام اللتي مِن المُمكِن ان يقوم المُستخدم بإستخدام المُنتج البرمجي فيها. المُخطط الثاني يُستخدم لِتوضيح جميع الأحداث اللتي مِن المُمكِن ان تحصل في حالة حُصول إحدى حالات الإستخدام. لِكُل حالة إستخدام يوجد مُخطط تسلسُل.

Use Case Diagram
مثال على مُخطط حالة الإستخدام


مرحلة التصميم (Design)

بعد مرحلة تجميع المُتطلبات, تبدأ المرحلة التالية مِن دورة حياة المُنتج البرمجي الا وهي مرحلة التصميم. في هذه المرحلة, يتِمُ إستخدام وثيقة مُتطلبات المُنتج البرمجي لِتَصميم البرنامج. ايضاً في هذه المرحلة يُقسمْ البرنامج الى عِدة كُتل مُصغرة تُسمى ب "انظِمة مُصغرة (Sub-Systems)". كُل كُتلة يتم تَصغِيرها إلى وَحَدات اصغر تُسمى بالصُفوف او الفُصول (Classes). عِند تجميع الصفوف مع بعضها البعض, سوف نحصل على ما يُسمى بِ "مُخطط الصف (Class Diagram)". و عِند تجميع البرامج المُصغرة سوف نحصل على ما يُسمى بِ "مُخطط الرُزمة (Package Diagram)". ايضاً في هذه المرحلة يتِم تحديد الخوارزميات (Algorithms) و لغة البرمجة اللتي سوف يتم إستخدامها في مرحلة كِتابة التعليمات البرمجية. مٌخرجات هذه المرحلة سوف تكون وثيقة تصميم البرنامج (Software Design Document).

مِثال على مُخطط الرزمة و نرى اسماء الصفوف داخل كُل رُزمة


مرحلة التنفيذ (Implementation)

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

في مرحلة التنفيذ, يتِم كتابة التعليمات البرمجية


مرحلة الإختبار (Testing)

في هذه المرحلة, يتم إختبار البرنامج مِن اجل التأكُد مِن صِحة مُخرجاته. مِن اجل هذه العملية, يقُوم مُهندس البرمجيات بِكِتابة خُطة إختبار المُنتج البرمجي (Test Plan). هذه الخُطة تحتوي على طريقة إختبار البرنامج و كيفية تشغيل حالات الإختبار (Test Cases). ايضاً هذه الخطة تحتوي على نتيجة تشغيل كُل حالة إختبار على البرنامج و نِسبة نجاح الإختبارات.


مرحلة الصيانة (Maintenance)

بعد الإنتهاء مِن إختبار البرنامج و تنصيبه في بيئة التشغيل, تبدأ اطول مرحلة مِن مراحل دورة حياة المُنتج البرمجي, الا وهي مرحلة الصيانة. في هذه المرحلة يتمُ عمل إصلاحات دورية للبرنامج في حال وجود أخطاء برمجية (Bugs) بعد التثبيت. ايضاً في هذه المرحلة يتِم توفير الدعم و المُساعدة للأشخاص اللذين سوفَ يقومون بِإستِخدام المُنتج البرمجي.

تحديثات نظام التشغيل تعتبر واحدة من مراحل حياة النظام البرمجي



مناهج تخصص هندسة البرمجيات بِجامعة الملك فهد للبترول و المعادن

بما انني درست تخصص هندسة البرمجيات بِجامعة الملك فهد للبترول و المعادن, سوف اقوم بِوضع شرح مُبسط لِكُل منهج اساسي مِن مناهج تخصص هندسة البرمجيات بجامعة الملك فهد للبترول و المعادن. عِلماً بأنه تُوجد بعض المناهج اللتي لم اذكرها هنا.

SWE 205: Introduction to Software Engineering

هذا المنهج هو مقدمة لِجميع مراحل دورة حياة المُنتج البرمجي. سوف يتم التحدث فيه عن كُل مرحلة بِشكل مُبسط و ما يحصل بها. ايضا سوف يتعلم الطالب عن ما يُسمى بِ نماذج دورات حياة النظام البرمجي (Software Process Model). هذه النماذج تُعتبر حجر الأساس في العمليات اللتي يقوم بِها مٌهندس البرمجيات. بِشكل عام, سوف يتم التحدث عن ثلاثة انواع, نموذج الشلال (Waterfall Model), النموذج الحلزوني (Spiral Model)  ومنهجيات آجَايل (Agile Methodologies).


SWE 215: Software Requirements Engineering

بعد تعَلُم اساسيات دورة حياة المُنتج البرمجي, سوف يتعلم الطالب في هذا المنهج على تفاصيل المرحلة الأُولى مِن الدورة. في هذا المنهج سوف تتعلم عن طُرق تجميع و إستخراج و تَتَبُع مُتطلبات العميل و كيفية كتابة وثيقة مُتطلبات المُنتج البرمجي (Software Requirements Document). ايضا سوف تتعلم التعامل مع التغيرات الغير مُوتوقعة في مُتطلبات العميل.


SWE 312: User Interface Design

هذا المنهج يعتبر منهج غير اساسي لكنه يعتبر مُهم. في هذا المنهج سوف يتعلم الطالِب عن انواع واجهات المستخدم المُختلفة (User Interface) و كيف يتعامل المُستخدم معها. كما نعلم كُل تطبيق برمجي له واجهة مُستخدم مُختلفة. فمثلاً, نجد ان للهواتف النقالة طريقة مُختلفة في إبراز واجهة المُستخدم عن تطبيقات سطح المكتب. ايضاً سوف تتعلم عن طُرق إنشاء واجهة مُستخدم سهلة الإستخدام. و بالنهاية, سوف تتعلم عن طُرق إنشاء دليل لكيفية تعامل المُستخدم مع المُنتج البرمجي.


SWE 216: Software Design and Architecture

هدف هذا المنهج هو تَعَلُم الطُرق المُختلِفة المُستخدمة في تصميم البرنامج. ايضاً سوف يتعلم الطالب في هذا المنهج الأهداف المُختلفة للتصميم. فعلى سبيل المِثال, قد يكون هدف التصميم هو زيادة امان النظام. او قد يكون هدف التصميم هو جعل عملية الصيانة اسهل. في نهاية هذا المنهج, سوف تتعلم كيفية كِتابة وثيقة تصميم البرنامج (Software Design Document).


SWE 326: Software Testing and Quality Assurance

في هذا المنهج يقوم الطالب بِتعلُم الطُرق المُختلفة المُستخدمة في إختبار البرنامج. ايضاً في هذا المنهج يتِم تدريس الطالب عن مفهوم جودة البرنامج و مقاييس الجودة اللتي يتِم إستخدامها لِتقييم المُنتج البرمجي. بالنهاية, سوفَ يقوم الطالب بِكِتابة خُطة إختبار البرنامج و يقوم بِتَنفيذها على مشروع برمجي صغير.


SWE 363: Web Engineering and Development

إن هذا المنهج يُعتبر مُقدمة لِتِقنيات الشبكة و كيفية عمل الإنترنت بشكل عام. سوفَ يتِم التحدث عن تطبيقات الشبكة و لُغات البرمجة المُستخدمة في عمل صفحات الشبكة مثل إتش تي إم إل (HTML) و جافاسكربت (JavaScript) و سي إس إس (CSS). ايضاً سوفَ يتِم التحدث عن الفرق بين العميل (Client) و الخادم (Server) بشكل مُختصر.


SWE 387: Software Project Management

هذا المنهج هو مُقَدِمة لِمفاهيم إدارة المشاريع و الطرق المُستخدمة في إدارة المشاريع البرمجية. بشكل عام, سوفَ يتِم التحدث عن المواضيع التالية, ادارة الموارد البشرية (Human Resources Management), تخطيط المشروع (Project Planning), مُراقبة المِيزانية (Budget Control) و كيفية تحليل المخاطر (Risk Analysis). سوفَ يتِم دراسة هذه المواضيع مِن منظور مُهندس البرمجيات.



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

مِن المُمكن ان يعمل خريج هندسة البرمجيات في عِدة مجالات. بِشكل عام, الخريج الحديث إما يعمل كمٌبرمج (Programmer) او يعمل كمُهندس إختبار (Test Engineer). مُهندس الإختبار هو الشخص اللذي يقوم بإنشاء و تشغيل الإختبارات على البرنامج. ايضا تُوجد اعمال أُخرى لِخرجي هذا التخصص. فعلا سبيل المِثال, من المُمكن ان يعمل خريج هذا التخصص كمُهندس مُتطلبات (Requirements Engineer) او مُهندس مِعمارية البرنامج(Software Architecture Engineer). غير هذه الوظائف, تُوجد مُسميات أُخرى لِعدة مناصِب من المُمكن ان يتوظف خريج هندسة البرمجيات فيها و منها:
  • مُطور تطبيقات أندرويد (Android Developer).
  • مُطور تطبيقات آيفون (IPhone Developer).
  • مُطور تطبيقات ويندوز (Windows Developer).
  • مُطور تطبيقات الشبكة (Web Developer).
  • رئيس فريق التطوير (Team Lead).
  • مُصمم مواقع إلكترونية (Web Designer).
  • مطور العاب (Game Developer).
  • مُصمم العاب (Game Designer).
  • مسؤول موقع إلكتروني (Webmaster).
  •  مدير قاعدة بيانات (Database Administrator).


الخاتمة

كما نرى, تخصص هندسة البرمجيات يختلف بشكل عام عن تخصص عُلوم الكمبيوتر و هندسة الكمبيوتر. كثير مِن الناس تُفكر بأن مُهندس البرمجيات يعمل فقط على كتابة البرامج و نشرها لكن بالواقع تُوجد عملية طويلة خلف البرنامج. شيء آخر مِن المُمكن قوله عن مُهندس البرمجيات هو انه  لابُد مِن ان يدرس مُعظم مواد عُلوم الكمبيوتر. فلِهذا السبب نستطيع القول بأن كُل مُهندس برمجيات هو عالم كُمبيوتر و ليس كُل عالم كُمبيوتر مُهندس برمجيات.

No comments:

Post a Comment

Feel free to write any thing in your mind here 😉