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

ماهو الUnit Testing

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

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

هل سمعت عن الTesting ؟؟؟؟

بالطبع فالTesting هو المرحلة قبل الأخيرة في دورة حياة تطوير البرنامج Software Development Life Cycle SDLC

و هي المرحلة التي تلي مرحلة الDevelopment مباشرة

ما أهميتها؟؟؟

أهميتها بديهية و هي تجنب أخطاء قد تحدث أثناء استخدام البرامج و التي قد تؤدي لخسائر ضخمة مثل أنظمة البنوك و ربما خسائر في الأرواح لو كان هذا البرنامج حيوى جداً مثل أنظمة الطائرات الملاحية و غيرها

و أهمية أخرى هي ضمان مستوى معين من جودة البرامج و توجد مقاييس عالمية مثل الCMMI و غيرها

هل المبرمج مطالب بتعلم الTesting ؟؟

الTesting في اطلاقه فرع كامل و كبير من فروع الSoftware و يقع تحت الQuality Assurance أو ضمان الجودة و يوجد له متخصصين مثل الTest Engineers و الQA Specialists و غيرهم

هل يعني هذا أنه لا فائدة من تعلمه بالنسبة للمبرمج؟؟؟

بالطبع معرفة المبادئ الأساسية في الTesting شئ أساسي و هذا لأنك في النهاية ستعمل جنباً بجنب مع Tesers و أحياناً في بعض الMethodologies مثل Scrum أو Extreme Programming قد تجلس أنت كDeveloper مع Tester على جهاز واحد لضمان اكتشاف الأخطاء أثناء كتابتها...

ماهو الجزء الذي يُهم المبرمج؟؟؟

الجزء الذي يُهم المبرمج و الذي يكون هو مُطالب بأداءه هو الUnit Testing و هو جزء صغير من الكود يقوم المبرمج بكتابته لعمل Testing لجزء اخر أكبر من الكود

و لنفهم ذلك تابع هذا المثال...

بفرض أنك تقوم بكتابة Class تقوم بعمليات حسابية جمع و طرح مثلاً

public class MathOps
    {
        public static int Add(int x, int y)
        {
            return x + y;
        }

        public static int Sub(int x, int y)
        {
            return x - y;
        }
    }

و تريد أن تتأكد من صحة العمليات فماذا ستفعل؟؟؟

أغلبنا سيقوم بعمل Application بسيط (Console Application مثلاً) و يقوم باستخدام الClass و باعطاء قيم input و قراءة الoutputs و مقارنتها بالنتيجة الصحيحة المتوقعة Expected Result

هل هذه طريقة خطأ؟؟؟

لا بل ستؤدي المطلوب

ما عيوب هذه الطريقة؟؟؟

1- لا تصلح في المشاريع الضخمة التي تحتوي على عشرات الClasses و الMethods

2- كود الTesting منفصل تماماً عن الكود الحقيقي مما يجعل المشكلة الكبرى هي ربط كل class بالapplication الخاص بتجربتها و هذا يؤدي الى مشكلة تنظيمية أكبر

3-لا يمكنك عمل Testing للPrivate Classes بسهولة و هذا لأن الكود الخاص بالTesting منفصل

4- ستحتاج كل مرة لعمليتين Compile مرة للClasses الأساسية سواء كانت في dll منفصل او اي شئ اخر و مرة أخرى للTesting Application و هذا يُهدر وقت و مجهود

هل توجد طريقة أخرى؟؟؟

بالطبع و هي موضوع هذا المقال و هي الUnit Testing

مميزات الUnit Testing

1- تضمين كود الTesting داخل الUnit أو الDll التي تحتوي على الكود الأصلي و هذا يجعل الحل Modular بحيث لن تحتاج لحفظ الTesting Code منفصلاً عن الdll

2- سرعة أكثر في انجاز عملية الUnit Testing

اذن كيف يمكننا كتابة class تقوم بعمل testing للMathOps Class التي كتبناها منذ قليل

الموضوع بسيط جداً

[TestFixture]
    public class TestClass
    {
        
        [SetUp]public void Init()
        {
            
        }

        [Test]public void TestAdd()
        {
            int result = MathOps.Add(10, 20);
            Assert.AreEqual(result, 30);
        }
        [Test]public void TestSub()
        {
            int result = MathOps.Sub(20, 10);
            Assert.AreEqual(result, 10);
        }
    }

يمكنك اهمال الAttributes الموجودة للحظات سنتطرق لها بعد عدة سطور...

كما ترى أن الClass بسيطة فأنت تكتب فيها مجموعة من الFunctions تقوم بعملية Testing لFunction من الMathOps Class عن طريق اعطاءها قيم كمدخلات و مقارنة المخرجات مع القيم المتوقعة ثم عمل Assertion على أساس شرط معين و هنا الشرط هو أن تساوي القيم المتوقعة مع المخرجات

يمكن أن تكون عملية الTesting تقيس تعامل البرنامج مع الأخطاء فمثلاً في عملية القسمة تريد أن تتأكد أنه اذا كان المقسوم عليه يساوي صفر فان الFunction ستطلق ZeroDivisionException مثلاً و في هذه الحالة نعتبر الTestصحيحاً

ما هي الأدوات المستخدمة في الUnit Testing ؟؟؟؟

لكل لغة أو تكنولوجيا الأدوات الخاصة بها فمثلاً في الJava يوجد الJUnit و في الDotNet يوجد الNUnit و هو مجال حديثنا في الجزء الثاني من المقال

NUnit

هو مشروع مفتوح المصدر من أحد المشاريع الموجودة في www.sourceforge.net و هو مجاني و يدعم جميع لغات الDotNet سواء في الاصدارة 1 أو 1.1 أو 2.0

و يمكنك تحميله من على http://www.nunit.com

كيف نستخدم Nunit

اولاً تحميل و تثبيت Nunit بسيط فقط حمل الNunit Installer من على الموقع و السابق ثم ثبته ببساطة

ثانياً ستقوم باضافة الdll التالية لمشاريعك التي تنوي عمل testing لها و هي nunit.framework.dll و ستجدها موجودة عندما تقوم بعمل Add Reference من داخل الVisual Studio

ثالثاً قم بعمل

using NUnit.Framework;

في الملف الذي تنوي أن تكتب فيه الTesting Class

رابعاً استخدم الAttributes التالية

TestFixture و يستخدم قبل الTesting Class

SetUp و يستخدم قبل الinitialization method و التي تستخدمها عادة لعمل أي initializations

Test و يستخدم قبل كل Test Method

Ignore و يستخدم لتجاهل Test Method معينة

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

[TestFixture]
    public class TestClass
    {
        
        [SetUp]public void Init()
        {
            
        }

        [Test]public void TestAdd()
        {
            int result = MathOps.Add(10, 20);
            Assert.AreEqual(result, 30);
        }
        [Test]public void TestSub()
        {
            int result = MathOps.Sub(20, 10);
            Assert.AreEqual(result, 10);
        }
    }

سيكون هذا هو شكل الClass التي سنستخدمها في الTesting

سنقوم الان بعمل Build للSolution ثم نفتح الNunit (ستجد له رابط على الDesktop بعد التثبيت)

سيظهر لنا بهذا الشكل

05_03_06_08_11_50_1141618310NunitProgram1.JPG

سنقوم بعدها بعمل File->Open ثم نبحث عن البرنامج الذي قمنا بكتابته سواء كان dll أو exe

سيظهر لنا بهذا الشكل

05_03_06_08_12_38_1141618358NunitProgram_.JPG

سنجد أن القائمة على اليسار تظهر لنا الClass التي وضعنا قبلها الTestFixture Attribute و أيضاً تظهر لنا الMethods التي وضعنا قبلها الTest Attribute

قم بالضغط على Run

سيظهر لك هذا الشكل و الذي يبين أن عملية الTesting قد نجحت و الكود سليم

05_03_06_08_13_08_1141618388NunitProgram3.JPG

و لكن لو أحدى العمليات فشلت سيظهر لك هذا الشكل

و الذي يبين لك أن العمليات التي نجحت و العمليات التي فشلت و يوضح لك سبب الخطاً

05_03_06_08_13_32_1141618412NunitProgram4.JPG

و الان تخيل معي انك تعمل في مشروع ضخم و تقوم بعمليات تعديل في Methods موجودة بالفعل و تغير في طريقة عملها و لكن في النهاية المهم أن تكون النتائج سليمة فكل ماعليك هو تشغيل الTest كل مرة تغير أو تعدل في الكود للتأكد من أن كل شئ على ما يرام ثم تكمل عملك و أنت واثق

الNunit كمشروع ناجح و لاقى شعبية جيدة تم تضمينه في SharDevelop داخل الIDE كما أن الTesting Environment الموجودة في Visual Studio 2005 Team System مستوحاة من Nunit

ارجو أن يكون الموضوع بسيط و سهل و واضح

تم تعديل هذه المشاركة بواسطة bashmohandes في 6 مارس 2006 في 07:02

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#2

هل تصدق لو ذكرت لك انى بمجرد قراءة الموضوع ضمن شريط المواضيع علمت انك كتبت هذه المقالة

اضف ايضاً اداة ال dotUnit للاختبار

جارى القراءة و التجريب و شكر كبير على هذه المقالة استاذى ;)

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

تم نقل الموضوع لمنتدى التطبيقات عله يلاقي ترحيباً

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

باشمهندس بصحيح....

الرجاء وضعه مع قائمة هندسة البرمجيات...

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

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

-----

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

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

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

http://blogs.msdn.com/wael

@waelkabli

#5

الصراحة يا أستاذي ............... الموضوع من أروع المواضيع التي قرأتها في المنتديات

جزاك الله خيرا

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

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