مقدمة في هندسة البرمجيات 2-1

لماذا ولدت هندسة البرمجيات ؟
لا حاجة لنا للقول بأن من ينظر اليوم إلى حياتنا اليوميةسيدرك-دون كثيرٍ من التفكير- ذلك الدور الجوهري الذي تضطلع به البرمجيات في شتى مجالات حياتنا. فالبنية التحتية للدول ومرافقها العامة ترتكز على الأنظمة الحاسوبية، والمصانع وعمليات التوزيع أصبحت مؤتمتة بشكل كامل أو شبه كامل، وليست الأنظمة التجارية والمالية بمنأى عن ذلك. ولهذا فإن الواقع السابق يقودنا إلى نتيجة منطقية جدًا مؤداها “أن إنتاج وصيانة البرمجيات لهما عنصران جوهريان في تقدم الاقتصاد الوطني والاقتصاد العالمي ككل”. أما هندسة البرمجيات فهي الفرع الهندسي الذي يركز على إنتاج برمجيات عالية الجودة وبتكلفةٍ معقولة. ولعل أهم ما تتسم بها هندسة البرمجيات هي تلك الطبيعة المجردة. فالمنتج البرمجي – خلافًا للمنتجات الأخرى – يتميز بطبيعته غير الملموسة، وبالتالي لا يخضع المنتج البرمجي لقيود مادية ولا تحكمه قوانين فيزيائية ثابتة ولا إجرائيات تصنيع دقيقة، ولهذا فإنه منتج “مراوغ”.
قد تعتقد، للوهلة الأولى بأن عدم وجود قيود فيزيائية هو أمر جيد، لأن ذلك سيزيد من إمكانيات المنتج البرمجي، إلا أن الأمر ليس كذلك تمامًا. فعدم وجود مثل هذه القوانين والقيود الطبيعية من شأنه أن يزيد من تعقيد البرمجيات إلى حد يصعب عنده فهم هذا النظام.
ولد مصطلح “هندسة البرمجيات” في العام 1968 الذي شهد مؤتمرًا لحلف شمال الأطلسي لتداول الأزمة المعروفة “بأزمة البرمجيات” . نشأت هذه الأزمة أساسًا بسبب الثورة الهائلة التي شهدتها صناعة الحواسيب وقتئذٍ متمثلًة باختراع الدارات المتكاملة , إن هذا التطور الدرامي في صناعة الحواسيب جعل منها أجهزة قادرة على القيام بأعمال غير اعتيادية، فقد تطورت إمكانيات الحاسوب، مما أهله لتشغيل أنظمة برمجية بالغة التعقيد. وهذا التعقيد في البرمجيات هو الذي أدى إلى أزمة البرمجيات.
وأخذت تداعيات هذه الأزمة تتجلى يومًا بعد يوم: مشاريع برمجية تجاوزت مواعيدها النهائية بأكثر من سنة، وميزانياتها لم تكفي لإنجاز نصفها، وبرمجيات ذات جودة متدنية وأداء ضعيف وغير قابلة للصيانة. نعم، لقد كانت صناعة البرمجيات – وقتئذٍ – تعيش في كابوسٍ حقيقي. أضف إلى ذلك وذاك تهاوي أسعار الحواسيب والمكونات الصلبة مقابل الارتفاع المطرد لأسعار البرمجيات. لقد كان الواقع السابق هو المناخ الذي ولدت فيه هندسة البرمجيات لتقدم لنا العديد من الطرائق والمنهجيات والتقنيات لتخفيف التعقيد المتأصل في صميم الأنظمة البرمجية الكبيرة. ومع تزايد قدرتنا على إنتاج البرمجيات تزايد هذا التعقيد الدائم. فبرزت إلى الوجود تقنيات جديدة وليدة التزاوج بين الأنظمة الحاسوبية وأنظمة الاتصالات، ونتيجة الحاجة لتصميم واجهات استخدام رسومية معقدة
فرضت هذه التقنيات نفسها من جديد على مهندسي البرمجيات، ومع ذلك بقيت العديد من الشركات مهملة لتطبيق تقنيات ومنهجيات هندسة البرمجيات في صناعتها البرمجية ولهذا فقد حكمت على نفسها بأن تظل أسيرة الأزمة السابقة

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

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

قد تثير الظاهرة السابقة في نفسك توجسًا وخيفًة من تطوير البرمجيات، ولكننا نهمس في أذنك قائلين أنه: “رغم هذا التنوع الواسع إلا أنه ثمة العديد من المبادئ والأفكار والنظريات التي تشكل جوهر هذه الأساليب المتنوعة، وهذا الجوهر هو قلب هندسة البرمجيات”.

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

لقد تركت هندسة البرمجيات بصمتها على التاريخ، وأنا مقتنع تمامًا بأن هناك الكثير ليقومون به في هذا القرن

سنجيب في هذه المقالة عن كم من الأسئلة التي تجول في أذهان العديد من المبتدئين في هذا الحقل المعرفي.

الأسئلة المذكورة أدناه هي تلك الأكثر تكرارًا، وبالتالي تشكل هذه الأسئلة مع أجوبتها ملخصًا موجزًا وبليغًا عن هندسة البرمجيات.

الأسئلة الأكثر تكراراً حول هندسة البرمجيات

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

ما هي البرمجيات ؟

يخلط العديد من الأشخاص، حتى من الاختصاصين، بين المصطلح “برمجية” (Software) والمصطلح برنامج (Program) رغم اختلافهما. إن مصطلح “برمجية” أعم من مصطلح “برنامج”، حيث أن البرمجية الواحدة تحتوي عادة على عدة برامج منفصلة إضافة إلى معطيات التوثيق (Documentation data) ومعطيات التشكيل (Configuration data). ومعطيات التشكيل هي جملة الملفات الضرورية لإعداد (Setup) هذه البرامج، أما معطيات التوثيق فهي تعنى بتوثيق النظام الضروري لتوصيف هيكلية النظام (ترابط عناصر هذا النظام مع بعضها البعض)، وبتوثيق الاستخدام الذي يهتم بتقديم بعض الخطوط الإرشادية لمستخدم النظام حول كيفية الاستخدام. واليوم تترافق العديد من البرمجيات مع موقع ويب، بحيث سيكون بإمكان المستخدمين تحميل آخر المعلومات حول المنتج البرمجي. يتم تطوير البرمجيات بواسطة أشخاص يدعون “مهندسي البرمجيات”.

تقسم المنتجات البرمجية من وجهة نظر السوق إلى نوعين أساسين:

1. المنتجات العامة: هي عبارة عن برمجيات مستقلة يتم إنتاجها من قبل شركة ما، لتباع في الأسواق لأي زبون قادر على شرائها. من أشهر الأمثلة عن هذه المنتجات هي أنظمة إدارة قواعد المعطيات وبرامج الرسم، وأدوات إدارة المشاريع, ومعالجات النصوص (Word processor).

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

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

ومع تطور البرمجيات اليوم، أخذ هذان النوعان بالتداخل نوعًا ما. فقد أصبحنا نرى العديد من شركات البرمجيات التي تطور أنظمة عامة ثم تخصصها بناءً على طلب زبون محدد. ومن أشهر هذه الأنظمة نجد أنظمة تخطيط موارد الشركات مثل (Enterprise Resource Planning) مثل النظام SAP.
ما هي هندسة البرمجيات ؟

“هي ذلك الفرع الهندسي الذي يعنى بكل جوانب إنتاج البرمجيات ابتداءً بالمراحل الأولى المتمثلة بتوصيف النظام ووصولا إلى مرحلة صيانة هذا النظام بعد أن وضع قيد العمل”.

من قراءتنا للتعريف السابق نجد أنفسنا مضطرين للوقوف عند نقطتين هامتين:

1. فرع هندسي: يهتم المهندس بجعل الأشياء تعمل. أي أنه يوظف كل النظريات والمنهجيات والأدوات المتاحة بين يديه لإيجاد حلولٍ لمشكلات معينة. بل يعني المهندس إلى ما هو أبعد من ذلك, إذ يحاول جاهدًا أن يوجد حلا للمشكلة حتى في غياب وجود أي نظرية. يعمل المهندس ضمن جملة من القيود التنظيمية والمالية، لذلك فإن حلوله يجب أن تكون متلائمة مع هذه القيود الحتمية.

2. كل جوانب إنتاج البرمجيات: لا يعنى مهندس البرمجيات بالجانب التقني (الهندسي) فقط لعملية إنتاج البرمجيات، بل إنه يدرس أيضًا نشاطات أخرى مثل إدارة المشاريع البرمجية وتطوير نظريات ومنهجيات جديدة. في بعض الحالات تتحول عملية تطوير البرمجيات إلى مهمة إبداعية أكثر من كونها مهمة هندسية، وبالتالي – في هذه الحالة – لسنا مضطرين إلى اتباع أسلوب منظم في عملية الإنتاج ولعل ذلك يبدو جليًا في تطوير الأنظمة القائمة على الويب (Web-based system).

وإلى المقالة التالية إن شاء الله

زاهر الحاج حسين

منقول عن Ian Sommerville

6 تعليقات حتى الآن

  1. رباب ابراهيم says:

    المعلومة مفيدة

  2. ولاء علي says:

    الموضوع جميل جدا وياريت يكون في توسع اكثر في الادوات المستخدمة في تطوير البرمجيات

  3. توسيع اكثر في ادوات تطوير هندسة البرمجيات

  4. سحرمحمد says:

    السلام عليكم
    عندي سؤال
    لماتطلب احد الشركات اوالزبون نظام من المبرمج او اي شركة برمجية ويتم تحديد وقت التسليم ولكن لم يتم تسليم النظام في الوقت المحدد من المسئول عن التاخيرون وهل هناك عقوبة مالية

  5. محمد بخيت says:

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

  6. ياراجل says:

    ياراجل هندسة البرمجيات موضوع كبير جداً .
    وليس هناك كتب مفيدة تتكلم عنه بالغة العربية , واول ماشفت الموضوع ده فرحت جداً , وحسيت أن في أمل يتطور الفكر العربي في هذا المجال .
    بس لما وصلت آخر الموضوع إلى نقطة : “وإلى المقالة التالية إن شاء الله”
    في البداية انبسطت , بس لما شفت تاريخ نشر الموضوع “في 19 April 2010 الساعة 01:33 pm”
    قلت خلاص مافيش أمل , يعني مافيش مقالة تالية 🙁

أترك تعليقا