من البديهي أن مراحل تطوير أي مشروع بما في ذلك تطوير البرامج لابد إن تتبع إستراتيجية معينة يدار بها المشروع حتى نهايته وهذه الإستراتيجية أو دورة حياة المشروع هي مانسميه في هندسة البرمجيات ب project lifecycle.
ويوجد عدة نماذج شائعة الاستخدام كدورة حياة لأي مشروع وهي كالأتي:
- Waterfall model
- Spiral model
- Extreme programming model
- Iterative Approach
طبعاً بما ان الاختيار بين هذه النماذج يعني اختيار خطة عمل ونمو لمشروعك فهو اختيار مهم جداً لضمان نجاح المشروع وتسليمه في الوقت.المحدد وبجودة عالية.في هذه المقالة سوف أتناول أول نموذجين من هذه النماذج على أن أتناول البقية في المقال القادم .
محتوي المقال
نماذج دورة حياة المشروع فى هندسة البرمجيات
أولاً: Waterfall model
ظهر هذا النموذج في السبعينات والفكرة الرئيسية في هذا النموذج أن كل مرحلة من مراحل تصميم البرنامج هي مرحلة مستقلة بذاتها وان كل مرحلة تعتمد على ناتج الخطوة السابقة بشكل كامل كماهو موضح في الشكل
كما هو موضح في الشكل أعلاه أن فريق تطوير البرنامج في أي وقت لايعمل الأ في مرحلة معبنة كجمع المتطلبات حتى ينهي هذه المرحلة تماماً فينتقل للمرحله التالية.من السهل أبراز الأسباب التي أدت إلى فشل هذا لنموذج وهي كالاتي:
-أن هذا النموذج يفترض ثباتية المراحل خاصة مرحلة جمع المتطلبات والتي هي من أكثر المراحل تغيراً.فلذلك في هذا النموذج عندما ينتقل فريق تطوير البرنامج الى مراحل متقدمة كمرحلة كتابة الشفرة مثلاَ فأن الرجوع لتعديل أو تغيير أي مرحلة من المراحل السابقة سوف يكون صعب ومكلف جداً.
-انه غير صالح للمشاريع الضخمة والتي تتطلب وقت طويل لإيجاد جميع المتطلبات مما يعني أن هذا النموذج أما أن ينتج برنامج لايحتوي جميع المتطلبات أو أنه لايستطيع إنتاجه في الوقت المحدد.
لكن هذا النموذج يتميز بأنه سهل الإدارة وانه صالح للتطوير البرامج الصغيرة ذات المتطلبات الثابته والواضحه.
ثانياً: Spiral model
أن الفكرة الرئيسية خلف هذا النموذج هي فكرة الدورات.حيث يتكون هذا النموذج من مجموعة من الدورات فكل دورة من هذه الدورات تغطي مجموعة من مراحل تطوير البرنامج.ويتم اختيار عنلصر كل دورة على حسب الاهمية فمثلاً البدء بأهم المتطلبات ثم إعداد المجسمات لهذه المتطلبات لتأكد من صحتها ثم ينتقل فريق تطوير البرنامج الى مرحلة التصميم ثم المراحل التي تليها حتى الانتهاء من هذا الجزء.في الدورة التالية يقوم فريق تطوير البرنامج بتحديد العناصر لهذه الدورة وإنهاءها على أن يتم ربطها بجميع المنتجات السابقة.وتستمر هذه الدورات الى أن ينهي فريق تطوير البرنامج إنتاجه للبرنامج.
وهنالك عدة مزايا لهذا النموذج ومنها:
-أن المتطلبات الأساسية التي عرفت في الدورات الأولى سوف تختبر جيداً في كل دورة.
-أن هذا النموذج يوافق طبيعة العمل وخاصة في مرحلة جمع المتطلبات لأنه يبدأ مع الأهم والأكثر عمومية ثم ينتقل الى الكثر تفصيلاً.
-أنه يقبل التغيير والتعديل وذلك لأنه كما ذكرنا سابقاً انه يعطي فرصة اكبر لفهم التفاصيل وان أي تغيير يمكن أن يضاف في الدورات القادمة.
من الواضح أن هذا النموذج صعب الإدارة وخاصةً اذا اخطاء فريق تطوير البرنامج في اختيار عناصر كل دورة.
مرحلة تصميم البرنامج Software Design
قد يظن البعض أن ما يقصد بالتصميم هو شكل البرنامج فقط. لكن هذا جزء بسيط منه.
فماذا يقصد بتصميم البرنامج (Software Design)؟
مرحلة التصميم لبرنامج هي عملية تحليلية لمتطلبات البرنامج لاختيار و بناء هيكل البرنامج و أجزاءه و كيفية ترابطها مع بعضها البعض، ينتج عن ذلك مجموعة من الملفات و النماذج و الرسومات البيانية التي يمكن منها برمجة وكتابة شيفرة البرنامج “بالكامل”.
و تنقسم مرحلة التصميم إلى مراحل عديدة من أهمها:
1 – تصميم البنية أو الهيكل Architectural Design
2 – تصميم نماذج البرنامج باستخدام اللغة الرسومية UML – Unified Modeling Lanuage
3 – تصميم واجهة الاستخدام GUI – Graphical User Interface
هندسة برمجيات أم علوم حاسب أم هندسة حاسب؟
لعله من المحير للبعض معرفة الفروق بين التخصصات الأساسية الثلاث في مجال الحاسب: هندسة الحاسب و علوم الحاسب و هندسة البرمجيات.
هذا المقال البسيط يسرد تعريفاً لكل تخصص مع إيضاح الفرق بينه و بين الأخريين.
أولا: هندسة الحاسب (Computer Engineering)
تتعامل مع تصميم و تطوير و تشغيل أنظمة التشغيل للأجهزة الرقمية عامة. و الأجهزة الرقمية هي أي جهاز مكون معالج (processor) و ذاكرة (memory) و دائرة كهربائية (electric circuit) ، مثل الكمبيوتر المنزلي أو الجوال ، أو حتى أجهزة ثانوية مثل كرت الشاشة و الشبكة المرتبط بجهاز الكمبيوتر المنزلي.
الفرق الأساسي بين هندسة الحاسب وبين هندسة البرمجيات و علوم الحاسب أنها تركز على حل المشكلات ببرمجة الهاردوير (digital hardware).
ثانيا: علوم الحاسب (Computer Science)
تركز على فهم و تصميم و تطوير البرامج. كما تهتم بالبيانات (data) و بنيتها (data structures)وطرق تخزينها و نقلها و على طرق الحساب (algorithms) و طرق البرمجة و مفاهيم الشبكات و الاتصال و نقل المعلومات.
مجال علوم الحاسب غير متخصص و مركّز كهندسة البرمجيات أو هندسة الحساب فهي مجموعة من العلوم المتخصصة بالحاسب في مجالاتٍ عدة. لذلك هي تتيح مجال أوسعللطالب لبناء تطبيقات في مجالات مختلفة.
ثالثا: هندسة البرمجيات (Software Engineering)
تتعامل مع بناء و صيانة البرامج و أنظمتها. والبرامج هنا هي البرامج الكبيرة أو الضخمة كبرامج إدارة الشركات و المصانع أو أنظمة التشغيل. هندسة البرمجيات أكثر طبيقية و تخصصاً من علوم الحاسب فهي “هندسة” أي تتضمن جمع المعلومات و تحليلها و إيجاد الحلول و تصميمها بطرق علمية ثم البرمجة و إنتاج البرنامج ثم صيانته و تطويره أكثر و أكثر. مع الأخذ في الاعتبار في جميع المراحل السابقة بالتكلفة الإجمالية للبرنامج و ما يلحقه من تطويرات و تغييرات. كما تركز في أمن البرنامج (security) و قوة الاعتماد عليه (reliability). فهي تركز على عميلة بناء برامج ذات جودة عالية جدا (high quality programs) ، من بداية الفكرة إلى المنتج نهائي.
بالإضافة إلى الفرق السابق بين علوم الحاسب و هندسة البرمجيات:
قيل أن”العالِم يبني لكي يتعلم، أما المهندس فإنه يتعلم لكي يبني”.
أرجو أنني وفقت في إيضاح الفرق بين التخصصات الثلاث. و الخيار في الأخير هو لك.
مراحل تطوير البرامج
مراحل تطوير البرامج في هندسة البرمجيات:
يمر أي برنامج في عملية التطوير بعدة مراحل تختلف من حيث التقنيات المستخدمه في كل مرحلة .وهذه المراحل هي:
- مرحلة جمع المتطلبات للبرنامج.
- مرحلة التصميم.
- مرحلة كتابة البرنامج.
- مرحلة الاختبار.
- المرحلة النهائية وهي مرحلة تسليم البرنامج وتنصيبه.
وسوف تتناول هذه المقالة مرحلة جمع المتطلبات للبرنامج على أن نكمل الشرح والحديث عن كل مرحلة في مقال مخصص.
– مرحلة جمع المتطلبات :
وتعد هذه المرحله هي أهم المراحل في عملية التطوير وتبدأ هذه المرحلة بالتعرف على المستخدمين و المعنيين بإنتاج البرنامج والتعرف على متطلباتهم بشكل دقيق وواضح. وهنالك عدة تقنيات وطرق تساعد في عملية جمع المتطلبات مثل:
1- المقابلة: وتستخدم هذه الطريقه مع أهم الاشخاص المعنيين بأنتاج البرنامج خاصةً اذا كان عدد الاشخاص المعنيين بأنتاج البرنامج كبير.وعندما يكون فريق جمع المتطلبات يريد إجابات محددة.
2- تقنية ورش العمل: وفي هذة الطريقة يقوم فريق جمع المتطلبات بجمع جميع المعنيين بإنتاج البرنامج و جميع الاشخاص الذين قد يؤثر البرنامج على عملهم في مكان واحد وذلك للاستماع الى جميع الاراء.ومن المهم في هذه التقنية أن تتم أدارة ورشة العمل بشكل يضمن الاستماع للجميع ويضمن أيضاً عدم فقد السيطرة على ورشة العمل.
3- تقنية العصف الذهني : وتستخدم هذه التقنية على فريق العمل وأيضاً على المستخدمين.ويتم في هذه التقنية اقتراح أفكار حول البرنامج مع مراعاة انه يحق للجميع اقتراح أفكارهم حتى لو كانت غريبة.
4- أستخدام المجسمات والتصاميم الاختبارية : وتستخدم هذه التقنية من قبل فريق العمل لاطلاع الزبون على ماوصل اليه العمل وأخذ آراءه وتستخدم كذلك لاخذ الموافقه من الزبون على أن هذه المتطلبات صحيحة. كما تساعد هذه التقنيه تساعد المستخدمين على التعبير عن متطلباتهم بشكل واضح وملموس. ويستمر عادةً أستخدام هذه التقنية في العديد من مراحل تطوير البرامج.
5- تقنية الاستبيانات : وتستخدم هذه الطريقه عندما يكون بعض الاشخاص المعنيين بأنتاج البرنامج في مكان آخر بإرسال الاستبيانات لهم أو التحدث معهم هاتفياً. وتستخدم هذه الطريقه للاستبيان عن أشياء محددة.
ويجب الاخذ بعين الاعتبار أنه يجب أستخدام عدد من هذه التقنيات أو جميعها لضمان تغطية جميع المتطلبات. وكذلك يجب ان يكون فريق العمل قادراً على تحديد المشكلة و جميع المعنيين بإنتاج البرنامج بشكل واضح وان يتم تحديد أهميتهم.
– الناتج عن مرحلة جمع المتطلبات:
ينتج عن هذه المرحلة مجموعة من الملفات المكتوبة التي تحتوي بعض الجداول والرسومات التي تحدد المتطلبات بشكل واضح ومباشر.ومن الشروط التي يجب توفرها في هذه الملفات :
1- أن تحتوي جميع المتطلبات وان تكون هذه المتطلبات مكتوبه بشكل واضح ومباشر ودقيق لايحتمل أي تأويل آخر.
2- أن تكون هذه الملفات محدثه و تحتوي التاريخ لكل تحديث والكاتب لهذه المتطلبات ومصدر هذه المتطلبات.
3- يجب الاخذ بعين الاعتبار أن فريق جمع المتطلبات ليس هو فريق التصميم فلذلك يجب أن تكون المتطلبات مكتوبة بشكل واضح ومفهوم لكي تمكن فريق التصميم من الابتداء في عملية التصميم بالاعتماد على هذه الملفات بدون مساعدة فريق جمع المتطلبات ولذاك فأن أي خطأ أو غموض في هذه الملفات قد يؤدي الى مشاكل ومصاعب في مراحل متقدمة مما يؤدي الى خسارة ماديه غالباً وتأخير في تسليم البرنامج.
لماذا هندسة البرمجيات؟
لماذا هندسة البرمجيات؟
من الأخطاء الشائعة لدى الكثيرين ظنهم أن تطوير أي برنامج هي فقط عملية كتابة الشفرة.وهذا قد يكون صحيح إلى حد ما في حالة اذا كان المبرمج يطور البرنامج للاستخدام الشخصي واذا كان البرنامج برنامج بدائي. ومن هذه النقطه بالذات تبرز أهمية هندسة البرمجيات ففي بيئة العمل الحقيقيه تبرز الكثير من الالتزامات التي يجب أن تراعى في عملية التطوير وفي المنتج النهائي.
وفيما يلي بعض الأمثلة على الالتزامات التي يجب أن تراعى في عملية التطوير:
– أن تكون عملية الانتاج متوافقه مع جدول زمني يضمن تسليم المنتج للزبون في الوقت المحدد مع الأخذ في الحسبان جميع المخاطر والمشاكل التي قد تحدث خلال العمل.
– أن تكون تكلفة أنتاج هذا البرنامج تحت الميزانية المحددة.
– أن يكون المعنيين والمختصين في عملية الانتاج قادرين على التواصل فيما بينهم لضمان جودة المنتج.
وفيما يلي أيضاً بعض الأمثلة على الالتزامات التي يجب أن تراعى في المنتج النهائي:
– يجب ان يكون البرنامج قادراً على أداء المهام الاساسيه التي هي الهدف من أنتاجه.
– يجب ان يكون البرنامج قد صمم بطريقه تسهل تطويره واصلاحه عند الحاجة
– ان يكون البرنامج قادراً على المنافسة في الأسواق من حيث الجودة والسعر وتبرز أهميه هذه النقطه في البرامج ذات الاغراض التجارية(منتجة للبيع في الاسواق).
ولمراعاة تلك الالتزامات وغيرها فان هندسة البرمجيات كأي فرع من فروع الهندسة تتبع طرق وأساليب علميه لضمان إنتاجيه عالية الجوده.
ما هي هندسة البرمجيات ؟
كل ما يرد في هذه المقالة يأتي من فهمي لهذا التخصص وذلك للتبسيط فقط وهو على شكل حوار وأسئله سأجيب عليها .. !
مدخل ..
تخيل انك تريد عمل منزل ؟ ستذهب بالطبع لمهندس معماري وتذكر له احتياجاتك بدقة وسيقوم بعمل مخطط واضح لا يمكن للمقاول الخروج عليه، وبعدها ستذهب للمقاول لبدء البناء وفق المخطط.
هنا مهندس البرمجيات هو المهندس المعماري ، والمبرمج هو المقاول ، وأنت العميل ، والمبنى هو البرنامج. هذا التشبيه لإعطاء فكره عامة فقط
هندسة البرمجيات ؟
سميت هندسة لأنها تتّبع خطوات محددة لإنشاء برامج على مستوى عالي من الجودة وفق الوقت المحدد والميزانية المحددة.
ذكرت بأن هناك خطوات، ما هي ؟
الخطوات كالتالي:
– مرحلة جمع المتطلبات: وتعني معرفة ماذا يريد العميل بشكل واضح جداً ولا يقبل الالتباس.
– مرحلة التصميم: وهي مرحلة البدء بعمل الرسومات الخاصة بالبرنامج المقترح وهي مجموعة من الرسومات المتعارف عليها بمصطلح UML أو “لغة النماذج الموحدة” Unified Modeling Language بحيث يستطيع أي مبرمج فهمها والبدء بالبرمجة بناءً عليها مباشرة.
– مرحلة كتابة البرنامج: وهي مرحلة تحويل الرسومات الخاصة بالتصميم إلى شيفرة برمجية قابلة للتشغيل.
– مرحلة الاختبار: وهي الخطوة الأخيرة قبل تسليم البرنامج وتحتوي على عدة اختبارات منها ( مدى مطابقته لرغبة العميل – رضى العميل – سهولة الاستخدام – .. وغيرها )
– مرحلة الصيانة ( وهذه المرحلة ليست دائمة وتعتمد على العقد مع العميل ) : وتكون بتطبيق التعديلات الضرورية وفق رغبة العميل وتحسين أداء البرنامج وعمل صيانة دورية له
وأين هو مهندس البرمجيات ؟ ما عمله ؟
وظيفة مهندس البرمجيات تأتي في الربط ما بين المبرمج والعميل بحيث يقوم مهندس البرمجيات بعمل اللقاءات مع العميل ومحاولة معرفة احتياجاته ومشاكله الحالية وحلها بطريقة مناسبة عن طريق تصميم برامج توافق تطلعات العميل ووفق امكانياته.
إذن، هل مهندس البرمجيات ليس بمبرمج ؟
على العكس, يجب أن يكون متعمق في البرمجة بشكل كبير جداً لكي يعطي أفضل تصميم للبرنامج الذي يحل مشكلة العميل , وهو ما نقوم به في جامعة البترول حيث ندرس مادتي برمجة إضافية ليست مطلوبة من قسم علوم الحاسب.
هل تقصد بأن مهندس البرمجيات أفضل من طالب علوم الحاسب ؟
لا يوجد مقارنة, لأن لكل منهم مجاله الذي يبدع فيه ويتفوق فيه على الآخر , فمثلاً يتفوق طالب علوم الحاسب على مهندس البرمجيات ربما في عمل مترجمات اللغات, الشبكات بينما يتفوق مهندس البرمجيات بفهم طلبات العميل والتعبير عنها بوضوح ودقة, البرمجة.
وجميع هذه الأمور نسبية ولكن ذكرتها وفق ملاحظاتي للزملاء واحتكاكي بهم.
مثال: يوم أمس كان هناك طالب علوم حاسب لديه مشروع مشترك مع زميلي طالب نظم المعلومات الإدارية ويريد تسليم المتطلبات وهو يفهم البرنامج ولكن لا يعرف كيف يعبر أو يوضحه ولكن خلال 10 دقائق وكمهندس برمجيات ساعدته في فهم كيفية نسخ ما في العقل على الورق بعد اجتماع ساعة بينهم قبل حضوري دون نتائج ..
انا أريد التخصص فبماذا تنصحني ؟
ذكر لي أحد الدكاتره بأن العالم العربي لم يعد بحاجة طلبة علوم حاسب ولكن بحاجة مهندسي برمجيات، لأن البرامج العربية الحالية غالباً تكون دون دراسة دقيقة وتحوي العديد من المشاكل ولا يوجد برنامج عربي لا يحوي مشاكل. [ الدكتور عمل سنوات طويلة في شركات برمجة عربية قبل أن يعود ليدرّس في الجامعة ]
انا لا أنصحك بشيء ولكن بالنسبة لي أرى أن هندسة البرمجيات من أكثر التخصصات متعة وتعطيك صورة من الأعلى للبرمجة والمعلومات وكيفية تسخيرها لما يفيد.
المصدر
swe4arab.net