الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مقالة: القابلية للصيانة و التحديث

مغلق
بدأه neo في 27 فبراير 2006 · 9 رد · 2,887 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاتة

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

الموضوع الذي أود التحدث فيه هو أحد أهم الخواص التى لابد من وجودها فى أى برنامج ناجح أو أى برنامج يراد له النجاح و هى القابلية للصيانة و التحديث Maintainability & Updateability الخاصيتان مطلوبتان فى أى نوع من أنواع البرمجيات الناجحة سوف أسرد بعض الأحداث التى من الممكن أن تطلب هاتان الخاصيتان.

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

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

1- عمل قاعدة بيانات صغيرة و التى سوف تحتوى على الدوال و ما تحتوية من ندائات لدوال أخرى Function Reference calls و هذه مفيدة فى حالة أنك تود أن تعرف من الذي يتعامل مع الدالة التى سوف تقوم بالتعديل فيها

من المهم جدا أن تقوم بعمل Error Handling لكل داله فى برنامجك و أن تقوم بتعريف رقم الخطأ فى كل دالة و كما نرى فى المثال السابق لقاعدة البيانات المخصصة لدوال أنه سوف تقوم بأرجاع شجرة الندائات فى برنامج Function Calling Tree.

من هنا لابد و أن نستنتج شئ يمكننا الأستفادة منه و هو على سبيل المثال عند ظهور الخطأ رقم 20354 للمستخدم كل ما عليك فعله هو الدخول على قاعدة البيانات الخاقة بالدوال و البحث عن الخطأ و ترى الدالة المراد التعديل فيها و منها تقوم بالبحث عن الأعتمادية Dependence بمعنى ترى الدالة و ما تقوم به من ندائات و ترى أعتماد الدوال الأخرى على هذه الدالة و ما يجب مراعته.

هناك شئ أخر لابد مراعته أثناء عمل البرنامج وهو أنه فى عملية الـError Handling لابد و أن تقوم بعمل حفظ لتفاصيل الخطأ بأى شكل من الأشكال

وسوف أوضح ما أقصد بمثال بسيط

try

{

}

catch (Exception ex)

{

int ErrorID=ErrorHandler.SaveErrorToDatabase(this.GetFormInformation(),ex.Message, ex.Source, this.GetGlobalVarible());

ErrorHandler.ShowErrorForm(ErrorID);

}

on error goto ErrHandler

'Code here

End sub

ErrHandler:

Dim ErrorID As Integer

ErrorID=ErrorHandler.SaveErrorToDatabase(me.GetFormInformation(),Err.Message, Err.Source, me.GetGlobalVarible())

ErrorHandler.ShowErrorForm(ErrorID)

أهمية حفظ بيانات الخطأ أنه سوف يمكنك هذا من متابعة برامجك بأستمرار و معرفة المشاكل التى تحدث

ErrorHandler.SaveErrorToDatabase(me.GetFormInformation(),Err.Message, Err.Source, me.GetGlobalVarible())

فى هذا المقطع من الكود قمن بعمل شئ بسيط جدا وهو أننا قمنا بالنداء على Static Function و التى تقوم بحفظ البيانات المرسلة اليها فى قاعدة بيانات ( XML, Access, SQL Server, … ) تأذ المتغيرات التالية Parameters أولا تأخذ بيانات المكان الحالى حيث تقوم بأخذ معلومات عن النافذة أو الدالة فى شكل سلسلة حرفية String و هذه السلسة تحتوى على الأتى

Application_Name=??????????

Form_Name=???????

Name_Space=??????

Class_Name=?????

Function_Name=?????

ثم الرسالة التى هى موجودة فى الكائن Err و التى هى بأسم Message و أيضا نقوم بحفظ المصدر Source و فى النهاية تقوم بعمل دالة و التى ترجع بأسماء المتغيرات و محتواها فى سلسة حرفية

<intCount> ??? </intCount>

<strDirection> ??? </intCount>

من المفضل أن تكون محفوظة بشكل XML ليسهل التعامل معها

و الأن و بعد حفظ هذه البيانات فى قاعدة البيانات

الأن عليك أن تقوم بعملية التنقيح Debugging و التى سوف تكون بأن الله أسرع فى حالة أنك قمت بعمل الخطوات السابقة حيث سوف توفر عليك هذه المعلومات المثير من الوقت لمعرفة مكان الخطأ و الدوال المتعلقة بهذا الخطأ بالأضافة الى تجنب حدوث المشاكل التى من الممكن أن تحدث بسبب تعديل دالة بدون الوعى ان هناك بعض الدوال التى تتعامل مع هذه الدالة و ما يسمى بالأعتمادية.

للموضوع بقية و سوف أكمل بأذن الله فى موضوع الـUpdateability و كيفية التطبيقى المثلى للـMaintainability بمثال حى و قوى,

و لمناقشة الموضوع بشكل أكبر يرجى الدخول على منتدى الفريق العربي للبرمجة www.arabteam2000.com

أدعوا لنا الله أن يوفقنا و يحسن أخرتنا

أخوكم أحمد عصام Neo_4583 أو Neo

من الممكن أن يكون هناك أخطأ, لذا أرجوا أن نفتح باب المناقشة لتصحيح المعلومات مع العلم أن هذا المقال كله وجهة نظر شخصية فأذا كان هناك خطأ أرجوا التصحيح

هذه وصلة للموضوع كاملا

http://www20.brinkster.com/aneo/download/Maintainability.rar

تم تعديل هذه المشاركة بواسطة neo في 27 فبراير 2006 في 20:05

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#2

مقال رائع أخي أحمد ،

من زمان ما قرأنا مواضيعك البراقة،

أحببت أن أكون أول من يشكرك على جهدك الطيب،

درست هذا الموضوع باختصار في مادة "مقدمة في هندسة البرمجيات"

بالنسبة لتتبع مصدر الخطأ ..

مثلاً ظهر عندنا خطأ في إحدى الدوال،

وكان بين هذه الدالة Dependency على العديد من الدوال الأخرى ،

هل الحل هنا أن أتفقد كل الدوال التي تعتمد عليها هذه الدالة حتى أصل إلى مصدر الخطأ وأقوم بتصليحه ؟

ربما يكون ذلك صعباً في بعض الأحيان ..

تم تعديل هذه المشاركة بواسطة ala101 في 27 فبراير 2006 في 23:31

اللهم طهر أرض فلسطين من العملاء والخونة

#3

انت فعلا موضيعك دايما جميله

بس متنساش تسجل ال function كامله علشان لو معملها overloading لأن اسم ال function مش كفايه مثلا

function f1(p1 as string,p2 as string)

مش هى

function f1(p1 as integer)

رغم انهم بنفس الاسم

وف إنتظار باقى المقال

#4

أرجوا منكم دراسة مخطط قاعدة البيانات التالى

28_02_06_06_29_31_1141180171Maintainablity_Database.jpg

قمت بتصميمة و سوف أشرحه لاحقا نظرا لضيق الوقت :)

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#5

أقترح ان يضاف إلى دروس هندسة البرمجيات..

جيد طيب تشكر عليه...

لماذا تكون الليغو اللعبة الأكثر عبقرية في العالم؟

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

-----

وائل بن أحمد كابلي

مستشار تطوير برمجيات | مايكروسوفت للخدمات الاستشارية

MCSE | MCTS SharePoint Infrastructure | MCTS SharePoint - Development | MCP | MSF Essentials

http://blogs.msdn.com/wael

@waelkabli

#6

http://204.157.36.16/index.php?showtopic=88417

السلام عليكم و رحمة الله و بركاته

جزاك الله خيرا يا أحمد على مقالك الرائع و المهم ...

حيث أننا معظم (مش الكل) العاملين في هذا المجال يهتم أكثر بإنهاء البرنامج و يتغاضي عن الجودة و قابلية التعديل و التطوير ...

و أريد أن أضيف رداً لأخي ala101

أن يضع Error Handling في كل داله

أقصد اللآتي:

إذا كانت لديك داله إسمها FunctionA

و داخلها تنادي Function1, Function2, Function3

إذا حدث خطأ في Function2 مثلاً و لم تقم بوضع ErrorHandeling بداخل Function2

سيظهر الخطأ في الداله الرئيسية و ليس في Function2 الفرعية.

و عندها سيكون من الصعب تتبع الخطأ

أرجوا أن أكون فهمتك صحيحاً.

Public Sub TestA()
    Try
        Call Sub1
        Dim MyID as Integer =  GenerateID
        Call SaveID
    Catch MyException as Exception
        Msgbox "حدث خطأ"
    End Try
End Sub

Public Sub Sub1()
    'code code code
End Sub

في المثال السابق لم نقم بوضع Error Handeling

في دالة Sub1 الفرعية

لذا إذا حدث خطأ بها سيظهر الخطأ في الدالة الرئيسية في حين أن الخطأ في الدالة الفرعية

مما يصعب عليك مهمة تتبع الخطأ

(هذه المشاركة بالنياة عن الاخ عمرو OHDev)

الى المشرفين على الموقع هناك مشكلة فى التسجيل حيث يتطلب Activation code الذى لا يتم أرسالة ابدا :D نرجوا الأهتمام بهذا لاموضوع

تم تعديل هذه المشاركة بواسطة Xacker في 1 مارس 2006 في 18:42

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#7

بخصوص التفعيل, اعتقد حاليا التفعيل يدوي يتم من المراقبين العامين حالما يتواجد احدهم والاغلب الاخ طارق متولي هالمسالة, سيتم رفع الامر لتذكير الاخ طارق حالما يتواجد.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

جزاك الله خيراً أخي neo

نعم لقد فهمتني بشكل صحيح

والآن عرفت حل المشكلة

:)

في انتظار بقية الشرح :D

اللهم طهر أرض فلسطين من العملاء والخونة

#9

ملف أكسيس يحتوي على تصميم الجداول السابقة للأستفادة منه

Maintainablitly_tool.rar

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#10

أيه شبابا مفيش حتى حاجة أسمها Feed Back :D :D

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

هذا الموضوع مغلق.

مواضيع مشابهة