10
الإثنين, أغسطس

1 مُقدمة إلى تطوير برمجياتٍ ناجحة

برمجيات
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times
أصبحت البرمجيات تتحكم وتنظم مساحات واسعة من أنشطة حياتنا، وتتسع هذه المساحة كل يوم، بالتالي فليس من المنطق أن نترك أمر تطوير مثل هذه الأمور المهمة للصدفة تتلاعب بنا وبأنشطة حياتنا. من ظهرت ضرورة أن توجد طريقة لإدارة مشروعات البرمجيات من ميلاد الفكرة مروراً بمراحل تطويرها وحتى خروجها للنور منتجاً يحقق متطلبات المستخدمين في بيئة العمل الفعلية.
تعتبر دورة حياة تطوير البرمجيات (Software Development Life Cycle (SDLC هي عملية أو خطة عمل تحدد المهام الواجبة مع كل خطوة من عملية تطوير أي مشروع برمجي؛ مهما كان نوعه أو حجمه أو البيئة التي سيعمل فيها. وتهدف أيضاً لإنتاج برمجيات على درجة عالية من الجودة، وتحقق متطلبات المستخدمين الفعليين لها، وأن تخرج للنور في التوقيت المخطط وبالتكلفة المخطط لها.
تمر عملية تطوير البرمجيات بعدة مراحل:


Image: http://www.tutorialspoint.com/sdlc/index.htm

● تحليل متطلبات النظام وبناء خطة المشروع Planning and Requirement Analysis: في هذه المرحلة يتم تحليل المتطلبات التي يجب أن يستوفيها النظام ويقوم بها حتى ينال قبول المستخدمين. ستساعد المعلومات التي سنحصل عليها في وضع خطة كاملة للمشروع ولإرشاد دراسة جدوى المشروع في جوانبها الاقتصادية والعملية والتقنية. ستساعد المعلومات التي سنحصل عليها من عملية التحليل لبناء خطة لضمان الجودة ولتحديد المخاطر التي من الممكن أن ترافق هذا المشروع.
● تحديد وتوثيق متطلبات النظام Defining Requirements : بعد اكتمال مرحلة تحليل متطلبات النظام يتم تحديد وتوثيق هذه المتطلبات في وثيقة تحديد المتطلبات Software Requirement Specification document (SRS) .
● تصميم النظام Designing the product architecture : يتم إعداد تصميمات النظام من وحي وثيقة تحديد المتطلبات التي حصلنا عليها من المرحلة السابقة. ستحدد مرحلة التصميم متطلبات النظام من عتاد Hardware وبرمجياتSoftware فضلاً عن تعريف هيكل النظام وأجزاءه الأساسية. يتم توثيق نتائج هذه المرحلة في وثيقة تحدد عناصر هذا التصميم وتفاصيله Design Document Specification(DSD).
● البناء والتطوير Building or Developing the Product : اعتماداً على التصميمات التي حصلنا عليها من المرحلة السابقة يتم تطوير النظام وشيفراته البرمجية، والتي ستُتَرجم هذه التصميمات لكيانات فعلية، وذلك باستخدام أي من لغات البرمجة التي تحددها في الغالب طبيعة المشروع الجاري تطويره.
● الفحص والاختبار Testing the Product : يتم اختبار المنتج وفحصه لتحديد الأخطاء أو المشاكل وإصلاحها. غالبا ما تكون هذه المرحلة غير منفصلة عن المراحل الأخرى، حيث يجري تنفيذها عند انتهاء كل مرحلة وقبل الانتقال للمرحلة التي تليها.
● النشر وعمليات الصيانة Deployment in the Market and Maintenance: يتم توزيع المنتج النهائي الذي جرى الانتهاء من فحصه واختباره إلى بيئة العمل الفعلية. بعد توزيع المنتج إلى بيئة العمل الفعلية قد يظهر بعد المشاكل ولحلها يتم إصدار بعض التحديثات للتغلب على هذه المشاكل. من الممكن أيضا إصدار نسخ متلاحقة من النظام تشمل إضافات وتعديلات جوهرية تطلبها بيئة العمل الفعلية.
هناك أنواع كثيرة من مشاريع تطوير البرمجيات، وكل مشروع له خصائصه وظروفه التي قد لا تتشابه مع أي مشروع آخر. فرض هذا الأمر ضرورة وجود أكثر من طريقة، لتناسب كل منها فئة أو مجموعة فئات من مشاريع تطوير البرمجيات المتنوعة، وفيما يلي عرض لأهم هذه الطرق ولأهم ملامحها.

نموذج الشلال Waterfall Model :
هي أولى الطرق التي جرى استخدامها لتطوير البرمجيات، وهي طريقة من السهل فهمها وتطبيقها. تمر هذه الطريقة بمراحل تطوير البرمجيات وبشكل تتابعي، بداية من تحليل متطلبات النظام وحتى توزيعه لبيئة العمل الفعلية وتنفيذ ما يلزمه من صيانة. لابد أن تنتهي كل مرحلة تماماً قبل أن تبدأ المرحلة التي تليها. لا يُسمح بتداخل مرحلتين أو أكثر، وهو مايشبه حركة انسياب المياه من مكان مرتفع إلى أسفل. تمثل نتيجة كل مرحلة المُدخَل الذي ستعمل عليه المرحلة التي تليها.


Image: http://www.tutorialspoint.com/sdlc/index.htm

قد يجد مطورو البرمجيات طريقة الشلال هي الأنسب عندما تكون متطلبات النظام واضحة وثابتة من بداية المشروع، والتقنية المستخدمة في المشروع مفهومة ومحددة من البداية، فضلا عن توفر الخبرات اللازمة لإنجاز المشروع من البداية، وعادة ما تستخدم في المشاريع البرمجية الصغيرة.

نموذج الدورات المتكررة Iterative Model :
الفكرة الرئيسية لهذه الطريقة تدور حول تطوير النظام الكامل من خلال دورات ومحاولات متكررة، وتسير بشكل متزامن أو متسلسل. تتم عملية التطوير من خلال تطوير أجزاء صغيرة من النظام بوظائف وخصائص محددة، وبتكرار هذه العملية تتراكم الخصائص والنتائج بانتظام لتُكوّن النظام الكامل في النهاية. قد يسمح هذا النموذج بتبني تقنيات جديدة أثناء التطوير، ويتيح البدء بالخبرات المتاحة، والحصول على أي خبرات أخرى لازمة أثناء التطوير.


Image: http://www.tutorialspoint.com/sdlc/index.htm

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

النموذج الحلزوني Spiral Model :
تضيف هذه الطريقة إمكانية التطوير من خلال دورات متكررة لطريقة الشلال Waterfall التقليدية، والتي لا تتحرك من مرحلة إلا بعد الانتهاء من المرحلة التي تسبقها. كل دورة من هذه الطريقة تسمى Spiral أو حلزون. تبدأ كل دورة بتعربف متطلبات النظام، مروراً بمرحلة التصميم وتنتقل منه إلى مرحلة البناء، والتي تقدم في أول دورة منتجاً يحاول إثبات جدوى الفكرة الأساسية للمشروع Proof Of Concept (POC). في الدورات التالية تتضح متطلبات النظام بشكل أفضل، من خلال ردود أفعال المستخدمين الفعليين، مما سيساعد على أن يعكس المنتج الواقع الفعلي بشكل أفضل مع مرور كل دورة Spiral .

نموذج V-Model V:
في هذه الطريقة تسير مراحل تطوير البرمجيات بشكل تتابعي من مرحلة إلى أخرى في مسار على شكل حرف: V. تعتبر هذه الطريقة امتداداّ لطريقة الشلال Waterfall، حيث لابد أن يتم تنفيذ مرحلة الاختبار والفحص بنجاح في كل مرحلة من مراحل التطوير وبالتوازي معها قبل الانتقال للمرحلة التالية.
تناسب هذه الطريقة مشاريع تطوير البرمجيات التي تكون فيها متطلبات المشروع واضحة ومعروفة من البداية، ومن الأفضل أن تكون التقنية المستخدمة محددة من البداية وواضحة لفريق العمل. تناسب هذه الطريقة المشاريع قصيرة الأمد بشكلٍ أفضل من غيرها.

نموذج الطريقة الحرة Big Bang Model :
تتبع هذه الطريقة مساراً حراً لا يتقيد بأي خطوات محددة، حيث تبدأ عملية التطوير بالموارد والخبرات المتاحة وبالقليل من التخطيط المسبق. غالباً ما يتم اللجوء لهذه الطريقة عندما تكون متطلبات المشروع غير واضحة أو غير معلومة في البداية. يتم التطوير ويستمر موازياً للتشغيل في بيئة العمل الفعلية. تناسب هذه الطريقة المشروعات صغيرة الحجم وفرق التطوير ذات العدد المحدود.
التطوير ببناء النماذج الأولية Software Prototype Model :
في هذه الطريقة يتم تطوير مشاريع البرمجيات من خلال البدء ببناء نماذج أولية تُحقق بعض الوظائف كجزء من قائمة الوظائف التي يفترض أن يحققها المشروع أو المنتج النهائي. ليس شرطاً أن يفرض هذا النموذج الأولي الطريقة التي سيعمل بها المنتج النهائي بشكل كامل، وتعتبر هذه الطريقة فعالة للحصول على الأفكار والآراء من المستخدمين في بيئة العمل الفعلية. تساعد هذه الطريقة المصممين والمطورين في الحصول على صورة واضحة للمطلوب من المشروع في صورته النهائية. قد تساعد هذه الطريقة المستخدمين على تقييم مقترحات المطورين المقدمة لهم بشكل أوضح حيث يستطيعون اختبار هذه النماذج الأولية بأنفسهم بدلاً من الانتظار حتى اكتمال المشروع بصورته النهائية. يستفاد من هذه الطريقة بقوة في مشاريع تطوير البرمجيات التي تحتوي قدراً كبيراً من التفاعل مع المستخدمين مثل تطوير مواقع الإنترنت. المشاريع التي تحتوي قدراً كبيراً من معالجة البيانات ومعظم العمل فيها يتم في الخلف من دون تفاعل يذكر من المستخدمين، فاستخدام طريقة النماذج الأولية سيمثل عبئاً إضافياً على مثل هذه المشاريع.

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


Image: http://www.tutorialspoint.com/sdlc/index.htm

تعتمد طريقة Agile على فرق عمل صغيرة ذات درجة عالية من المهارة وسرعة الاستجابة فضلاً عن استيعاب كافة فرق العمل لهذه الطريقة بشكل ممتاز. تعمل Agile بشكل سهل ومرن، وتبدأ التطوير في المنتج المطلوب مباشرة، دون الحاجة لتخطيط مفصل عن مهام العمل أو قائمة كاملة بوظائف وخصائص المنتج النهائي. وهذا على عكس طريقة الشلال Waterfall التي لا تبدأ من دون تخطيط مفصل للمهام وقائمة كاملة بخصائص ووظائف المنتج النهائي. غالباَ ما يكون مقياس التقدم والنجاح لهذه الطريقة هو القدرة على الوصول لنُسخ تعمل ويستطيع المستخدمون العمل تجربتها مع كل دورة. أُقيم عام 2001 اجتماع لمجموعة من مطوري البرمجيات قاموا بنشر Manifesto لطريقة Agile وهو بمثابة دستور لهذه الطريقة (هنا).
بما أن طريقة ِAgile تعتمد أسلوباَ مرناً يُفَصّل نفسه على حسب طبيعة المشروع ونوعيته، توجد قائمة بطرق متعددة تعمل تحت مظلة Agile وهي:
● Crystal
● Extreme Programming (XP)
● The Rational Unified Process
● Adaptive Software Development
● Dynamic System Development Method (DSDM)
● Evolutionary Project Management (EPM or Evo)
● Feature-Driven Development (FDD)
● Lean Software Development
● Microsoft Solutions Framework (MSF)
● OPEN Process Framework
● SCRUM

نموذج التطوير السريع RAD (Rapid Application Development) Model :
يعتمد التطوير السريع أساساً على التطوير من خلال الاعتماد على النماذج الأولية Prototyping، وإعادة هذا الأمر لدورات متكررة للوصول للمنتج النهائي. قد يتم تطوير أكثر من نموذج أولي بالتوازي، وكل منهم يحمل بعض خصائص ووظائف المنتج النهائي. من خلال تجربة هذه النماذج الأولية بواسطة المستخدمين الفعليين، يحصل المطورون على فرصة للوصول لما يريده المستخدمون، وإمكانية تعديل هذه النماذج لتحقق متطلباتهم. يخفف الاعتماد على النماذج الأولية في التطوير من حاجة هذه الطريقة لتخطيط تفصيلي لمسار العمل ومهامه. تصل هذه الطريقة للمنتج النهائي بسرعة من خلال إعادة استخدام النماذج الأولية التي جرى تطويرها سابقاً وصهرها وربطها معاً للوصول للمنتج النهائي. تنقسم دورة التطوير الأساسية إلى سلسة من دورات أصغر، وكل منها قد يتكرر لعدة مرات، وفي النهاية يدمج ناتج كل الدورات مع بعضها البعض للوصول للمنتج النهائي. تناسب هذه الطريقة مشاريع البرمجيات التي يمكن تقسيمها لوحدات أصغر، أما المشاريع التي يتعذر تقسيمها فقد تمثل هذه الطريقة عبئاً إضافياً عليها وعثرة في طريق اكتمالها بنجاح.
كان هذا عرضاً لعملية تطوير البرمجيات ولمراحلها الأساسية ولأهم الطرائق المتبعة بها. تهدف جميع هذه الطرق على اختلافها وتنوعها للوصول بقارب تطوير البرمجيات لشاطىء النجاح الذي يلبي متطلبات المستخدمين الفعليين بالوقت والتكلفة المخطط لهما.

---------------------------------------------------------------------------------

المصادر:

1- SDLC Tutorial
هنا

2- Rod Stephens (2015) Beginning Software Engineering، John Wiley & Sons، Inc.، Indianapolis، Indiana.