تطوير برمجيات

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
عملية تطوير البرمجيات
نشاطات وخطوات
المتطلبات · Specification
البنيان · Design
التنفيذ · الفحص
Deployment · Maintenance
منهجيات
Agile · Cleanroom · Iterative
RAD · RUP · Spiral
Waterfall · XP · Lean
Scrum · V-Model · TDD
اختصاصات داعمة
Configuration management
Documentation
Quality assurance (SQA)
Project management
User experience design
أدوات
المصرف · المصحح · Profiler
GUI designer · ب ت م
ع · ن · ت

تعد عملية تطوير البرامج (المعروفة كذلك باسم تطوير التطبيقات أو تصميم البرامج أو برامج التصميم أو تطوير تطبيقات البرامج أو تطوير تطبيقات المؤسسات أو تطوير النظام الأساسي[1]) عبارة عن تطوير منتج برمجية حاسوب. ويمكن استخدام المصطلح "تطوير البرامج" للإشارة إلى نشاط البرمجة، والذي هو عبارة عن عملية كتابة الكود المصدري والاحتفاظ به، ولكن بالتمعن في المصطلح على نطاق أعم فسنجد أنه يشمل على كل ما يفصل بين وضع تصور للبرنامج المطلوب وصولاً إلى الإعلان النهائي عن البرنامج، وذلك في عملية مرتبة ومخطط لها على نحو مثالي.[2] ولذلك، قد تشتمل عملية تطوير البرامج على البحث أو التطوير الجديد أو تصميم القوالب أو التعديل أو إعادة الاستخدام أو إعادة الهندسة أو الصيانة أو أية أنشطة أخرى قد تؤدي لإنتاج منتج برمجي.[3]

يمكن تطوير البرامج لعدة أغراض، والثلاثة الأكثر شيوعًا منها هي تلبية احتياجات خاصة لعميل/شركة معينة (كما هو الحال مع البرامج المخصصة)، أو لتلبية حاجة متوقعة لمجموعة من المستخدمين المحتملين (كما هو الحال مع برمجيات مفتوحة المصدر وتجارية)، أو للاستخدام الشخصي (على سبيل المثال، قد يكتب أحد العلماء برنامجًا لتشغيل برنامج اعتيادي بشكل تلقائي). وتتطلب عملية تطوير البرامج المضمنة، والتي تعني، تطوير برنامج مضمن كذلك الذي يتم استخدامه في التحكم في المنتجات الاستهلاكية، دمج عملية التطوير مع عملية تطوير المنتج المادي الخاضعة للسيطرة.

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

نظرة عامة[عدل]

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

غالبًا ما يُشار إلى تلك المراحل معًا باسم دورة حياة تطوير البرمجيات، أو SDLC. وقد تنفذ التوجهات المختلفة لتطوير البرامج تلك المراحل وفق ترتيبات مختلفة، أو تخصيص وقت أقل أو أكثر لمراحل مختلفة. وقد يختلف كذلك مستوى التفصيل للوثائق التي يتم إنتاجها عند كل مرحلة من عملية تطوير البرامج. وقد يتم تنفيذ تلك المراحل بالدور (نهج يستند إلى "الشلال")، أو قد يتم تكرارها وفق دورات أو تكرارات متنوعة (نهج أكثر "شدة"). وعادةً ما يتضمن النهج الأكثر شدة بإنفاق وقت أقل على عمليتي التخطيط والتوثيق، وإنفاق المزيد من الوقت على كتابة الأكواد وتطوير اختبارات يتم تشغيلها بشكل تلقائي. وتعمل النُهُج الأكثر "شدة" كذلك على تعزيز الاختبارات المستمرة على مدار دورة حياة التطوير، فضلاً عن امتلاك منتج يعمل (بدون أخطاء) طوال الوقت. وتحاول النُهُج التي تستند إلى "الشلال" تقييم غالبية المخاطر ووضع خطة مفصلة للبرنامج قبل بدء تنفيذه (كتابة الأكواد)، وتجنب تغيرات التصميم الهامة وإعادة كتابة الأكواد في مراحل لاحقة من دورة حياة تطوير البرنامج. تمتلك الطرق المنهجية المتنوعة العديد من الميزات والعيوب، وسيعتمد أفضل نهج لحل مشكلة باستخدام برنامج في الغالب على نوع المشكلة. وإذا تم استيعاب المشكلة بشكل جيد والتخطيط لحل بشكل فعال مبكرًا، فقد يعمل التوجه الذي يستند إلى "الشلال" بشكل أكبر على النحو الأمثل. وعلى النحو الآخر، إذا كانت المشكلة فريدة (بالنسبة لفريق التطوير على الأقل) وتعذر وضع تصور لبنية حل البرنامج بسهولة، فيكون عندئذٍ التوجه التدريجي "الشديد" أفضل. وعملية تطوير البرامج عبارة عن بنية يتم دمجها في تطوير منتج برمجي. وتشمل المرادفات كذلك دورة حياة البرنامج أو عملية البرنامج. وهناك العديد من النماذج لتلك العمليات، تصف كل منها التوجهات المؤدية إلى مجموعة متنوعة من المهام أو الأنشطة التي قد تحدث خلال العملية.

التناسق في البرامج[عدل]

لضمان قدرة البرنامج على التطور بطريقة تحافظ على تعدد الأبعاد المتأصل فيه، يجب على الفرد أن يضمن تطور الأبعاد المختلفة معًا بطريقة متناسقة. وتتوفر لدى البرنامج العديد من الأبعاد التي يتعين الجمع بينها داخل إطار عمل واحد، فلا تقوم بالتدوينات المختلفة فحسب بل كذلك لا تتفاعل بشكل هرمي. ويجب عدم توجيه آلية لتناول مشكلة بعينها مثل ضمان تناسق مخطط فئة UML مع الكود المصدري. بل يجب أن تتمتع بدلاً من ذلك بالمرونة الكافية للتعامل مع مجموعة كبيرة من الأبعاد المضمنة بالفعل داخل عملية تطوير البرامج.[1][4]

موضوع تطوير البرامج[عدل]

التسويق[عدل]

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

في كتاب "مناظرات برمجية رائعة"، أفصح ألان م ديفيس في الفصل الفرعي الذي حمل عنوان "الحلقة المفقودة في تطوير البرامج" من فصل "المتطلبات" عما يلي

   
تطوير برمجيات
يدرس طلاب الهندسة في العادة الهندسة فقط ونادرًا ما يتعرضون للتسويق أو التمويل. بينما يدرس طلاب التسويق في العادة التسويق فقط ونادرًا ما يتعرضون للهندسة أو التمويل. فأغلبنا يتخصص في مجال واحد فقط. ولتعقيد الأمور، يلتقي بعض منها بأفراد ذوي كفاءات متنوعة ضمن قوى العمل، لذا لا تكون هناك فرصة لمحاكاتهم. إلا أن عملية التخطيط للمنتج البرمجي تعد حاسمة بالنسبة لنجاح عملية التطوير وتتطلب بالطبع دراية بفروع علم متعددة.[6]
   
تطوير برمجيات

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

الطريقة المنهجية لتطوير البرامج[عدل]

تعد الطريقة المنهجية لتطوير البرامج عبارة عن إطار عمل يتم استخدامه لهيكلة وتخطيط والتحكم في عملية تطوير نظم المعلومات. وقد تطورت مجموعة متنوعة من أطر العمل تلك بمرور السنوات، وتتمتع كل منها بنقاط قوة وضعف. ولا يكون وجود طريقة منهجية واحدة مناسبًا بالضرورة للاستخدام في جميع المشاريع. حيث تكون كل طريقة منهجية متوفرة مناسبة لأنواع معينة من المشاريع، وذلك استنادًا إلى اعتبارات متنوعة ذات صلة بالفريق و المشروع و المؤسسة و التقنية.[7]

أنظر أيضا[عدل]

المراجع[عدل]

  • Steven P,Reiss. Consistent software Evolution,. 
  1. ^ http://www.bitpipe.com/tlist/Application-Development.html
  2. ^ http://www.bestpricecomputers.co.uk/glossary/application-development.htm
  3. ^ DRM Associates (2002). "New Product Development Glossary". اطلع عليه بتاريخ 2006-10-29. 
  4. ^ Steven P,Reiss. Consistent software Evolution,.
  5. ^ أ ب Joseph M. Morris (2001). Software Industry Accounting. p.1.10
  6. ^ Alan M. Davis. Great Software Debates (October 8, 2004), pp:125-128 Wiley-IEEE Computer Society Press
  7. ^ Selecting a development approach. Revalidated: March 27, 2008. Retrieved 27 Oct 2008.

لمزيد من القراءة[عدل]

  • Jim McCarthy (1995). Dynamics of Software Development.
  • Dan Conde (2002). Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales.
  • A.M. Davis (2005). Just enough requirements management: where software development meets marketing.
  • Edward Hasted. (2005). Software That Sells : A Practical Guide to Developing and Marketing Your Software Project.
  • Luke Hohmann (2003). Beyond Software Architecture: Creating and Sustaining Winning Solutions.
  • John W. Horch (2005). "Two Orientations On How To Work With Objects." In: IEEE Software. vol. 12, no. 2, pp. 117–118, Mar., 1995.
  • John Rittinghouse (2003). Managing Software Deliverables: A Software Development Management Methodology.
  • Karl E. Wiegers (2005). More About Software Requirements: Thorny Issues and Practical Advice.
  • Robert K. Wysocki (2006). Effective Software Project Management.

قالب:Computer Science قالب:Software Engineering