خانه > Agile, Refactor, TDD > توسعه آزمایش محور

توسعه آزمایش محور


یه خواننده هست به اسم شماع زاده (نمی دونم مجازه غیر مجازه – اگر نیست عفو بفرمایید) همان که میگه گیتارم را نبرید {تورو خدا سیب و گلابی و طلاها رو ببرید ولی این گیتارم رو نبرید } واقعا این برادر باید برای برنامه نویس ها یک الگو باشد .

https://i1.wp.com/proactive-dev.inria.fr/img/bug.jpgبرنامه نویس ها باید بگویند که هر چی دلت می خواهد ببر , IDE را ببر , کامپوننت Janus را ببر , Delphi رو کلا ببر , PHP ام دم در بنداز تو Trash ولی تو رو خدا TDD ام را نبر .

در این سال های اخیر در صنعت توسعه نرم افزار چه برای Desktop و چه برای Web شاهد بروز تکنولوژی ها و تکنیک های زیادی بودیم . از مهمترین آنها می توان به TDD یا Test Driven Development [من توسعه آزمایش نخست می نامم] و Refactor اشاره کرد .

در این پست قصد دارم اشاره ای به TDD داشته باشم . البته شرط اجمال حتما رعایت خواهد شد .

TDD چیست ؟ TDD عبارتست از ترکیب TFD یا همان Test First Design و Refactor . یعنی چه ؟ یعنی ما اول قبل از اینکه شروع به کدنویسی بکنیم اول تست ها رو طراحی می کنیم و بعد کد نویسی می کنیم و بعد رفاکتور می کنیم .

قبل از اینکه بریم تو بحر TDD اجازه بدید Refactor رو یه شرح کوچولو بدم :

Reafactor عبارتست از پروسه بهبود طراحی کدهای موجود بدون اینکه رفتار کدها تغییر بکند . مثلا کلاس بندی کد ها و یا خوانا کردن کد ها و کلا هر کاری که مربوط به طراحی کدها باشد . برای اطلاعات بیشتر به این لینک مراجعه نمایید .

https://i0.wp.com/upload.wikimedia.org/wikipedia/en/9/9c/Test-driven_development.PNG

TDD شامل 5 مرحله می باشد :
1- اول یک تست نوشته می شود .

2- تست نوشته شده آزمایش می شود و چون کدی برای این تست نوشته نشده اشت پش نتیجه تست Fail است .

3- به اندازه کافی و تاکید می کنم فقط به اندازه کافی کد می نویسیم که فقط این تست را Pass بکنیم .

4- تست نوشته شده در مرحله اول آزمایش می گردد اگر پاس شود حرکت به مرحله بعدی و اگر نشود برگشت به مرحله قبلی و نوشتن اندکی دیگر کد.

5- Refactor .

به روش TDD اصلاحا Red – Green هم گفته می شود . زمانی که تست را می نویسید چونکه Fail می شود این حالت را Red  می گویند (رنگ قرمز نشانه Fail شدن تست می باشد)و زمانی که تست پاس می شود این حالت را Green  (رنگ سبز نشانه Pass شدن تست می باشد) می گویند . اگر در جایی این اصلاح را دیدید تعجب نکنید ,  همان TDD است .

شاید در اول یکم نامفهوم به نظر برسد ولی روش بسیار کارآمدی می باشد . این روش به نظر من چند ویژگی منحصر به فرد دارد :

1- ما ایرانیان که اصلا تست نمی نویسیم نه در اول و نه در آخر . شاید این بهانه ای باشد که ما هم برای برنامه هامان تست بنویسیم .

2- شما چونکه در اول تست ها را نوشتید پس صاحب یک Automate Test جانانه هستید .

3- چون شما صاحب Automate Test جانانه هستید پس تغییرات و Refactor را می توانید به راحتی انجام دهید . در مطلب چگونه کدهای تست نشده را رفاکتور نماییم؟ به این مسئله اشاره کردم .

4- به اندازه کد می نویسید و نه بیشتر .

5- نوشتن تست در آخر سخت می باشد . و اگر هم سخت نباشد نوشتن تست در آخر به درد لای جرز می خورد .

6- هزینه باگ زدایی پایین می آید ( این مورد را به صورت مفصل در پستی در آینده بیان خواهم کرد)

ابزارک هایی جهت TDD کار ها در جهان هایی متفاوت :

Java -> Junit

.Net -> NUnit

C++-> gunit

Python -> pyUnit

Runy -> Test::Unit

در نوشتن تست ها به موارد زیر دقت فرمایید :

قبل از اینکه بخواهید تست بنویسید , دقت کنید که بدانید چه کاری می خواهید انجام دهید . یکی از نیازمندی های سیستم را انتخاب نمایید . نیازمندی را پالایش کنید و وابستگی ها و جزئیات نیازمندی را دربیارید . باید تست شما تمام جزئیات نیازمندی را پوشش بدهد .

به مثال خردی توجه فرمایید :

فرض کنید ما می خواهیم کلاسی با عنوان کتاب  داشته باشیم که در این کلاس ما متدی برای مقایسه کتاب ها نیاز داریم ,  تست این کلاس می تواند بدین صورت باشد :

[TestFixture]
public class BookFixture
{
    [Test]
    public void BooksWithSameTitleReturnZeroCompareToValue()
    {
        Book same1 = new Book("A");
        Book same2 = new Book("A");

        Assert.AreEqual(0, same1.CompareTo(same2));
    }
}


Example by : One Agile Coder

خوب این تست نوشته شد ولی چون کلاسی به اسم Book نداریم پس عملا تست Fail می باشد .

پس ما نیاز مند این هستیم که کلاس Book را با مخللفات لازم ایجاد نماییم .


public class Book : IComparable
{
    private readonly string title;

    public Book(string title)
    {
        this.title = title;
    }

    public string Title
    {
        get { return title; }
    }

    public int CompareTo(Book other)
    {
        return title.CompareTo(other.title);
    }
}

اگر تست را توسط Unit Test آزمایش کنید  چراغ قرمز ما تبدیل به چراغ سبز می شود . و اینگونه می شود که تستی Pass می شود .
یاشیاسیز
Advertisements
دسته‌ها:Agile, Refactor, TDD برچسب‌ها: , ,
  1. مارس 1, 2010 در 2:00 ب.ظ.

    در دانشگاه ما گیج بودیم و حالا که از گیجی در آمده ایم در بازار آشفته توسعه و طراحی نرم افزار رئیس شرکت زیر بار این چیزها نمی رود.

    با تشکر از مطلب مفید شما 🙂

  2. ژوئن 5, 2010 در 9:36 ق.ظ.

    ما در زبان برنامه نویسی روبی آن ریلز که زبان برنامه نویس چابک می باشد، بحث TDD را فریم ورکی فوق العاده قوی انجام می دیم که واقعا لذت بخشه.

  3. neda
    آوریل 1, 2012 در 11:01 ق.ظ.

    من که واقعا هیچی نفهمیدم …!!!!

    • آوریل 1, 2012 در 12:21 ب.ظ.

      پبرو نظر شما ، دوباره پست را مطالعه کردم ، ولی یه چیزهایی آدم حالیش میشه ، احتمالا شما از پیش زمینه لازم در مبح مربوطه کم برخوردار می باشید .

  4. محمد جانمحمدی
    مه 27, 2012 در 12:16 ب.ظ.

    لطفا یک کتاب کامل و جامع در این زمینه معرفی کنید. طبعا انگلیسی باشد بهتر است. من به عنوان مدیر پروژه میخواهم تیم را با این روش تجهیز کنم و برای این منظور نیاز به منابع درسی، آموزشی و … دارم
    با تشکر از زحمات شما و آرزوی پیشرفت علم روز تولید نرم افزار در ایران

    • مه 27, 2012 در 12:32 ب.ظ.

      کتاب Clean Code که قبلا در اینجا معرفی کردم کتاب خوبی در این مورد هست . البته کتاب هایی زیادی وجود دارند ولی من خود کارهای باب مارتین یا مارتین فاوولر رو بیشتر می پسندم .

      در ضمن دوره آموزشی PSD از جمله آموزش هایی است که کارش به قول شما تجهیز کردن تیم ها به چنین روش هایی می باشد.

  1. آوریل 8, 2010 در 9:49 ق.ظ.
  2. ژوئن 15, 2010 در 7:28 ق.ظ.
  3. اوت 24, 2010 در 10:16 ق.ظ.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: