အခန်း ၁၆ :: Test Driven Development

အခုခေတ်မှာ Test Driven Development ကို မဖြစ်မနေ အသုံးပြုနေကြပါပြီ။ Junior Developer တွေဟာ Test Driven Development ကို Unit Test ရေးသားခြင်းလို့ပဲ ထင်မှတ်ထားကြပါတယ်။ TDD ဟာ ဒီထက် ပိုပါတယ်။ ပုံမှန် အားဖြင့် project ရေးပြီးသည့် အခါမှ Uni Test ကို ထည့်သွင်းသည့် အခါမှာ အချိန်ကုန် လူပင်ပန်းတယ်။ အပိုတွေ လို့ ထင်ရပါတယ်။ Project ပြီးမှ Test ရေးခြင်းကတော့ မဖြစ်သင့်ပါဘူး။ 

TDD ကို နားလည်ဖို့ အတွက် အရင်ဆုံး Application မှာ layers တွေ ခွဲရေးသင့်ကြောင့်ကို ပြီးခဲ့သည့် အခန်းမှာ ဖော်ပြခဲ့ပါတယ်။ ကျွန်တော်တို့တွေဟာ Test တွေကို အရေးပါသည့် function တစ်ခု ပြီးတိုင်းမှာ ထည့်သွင်းရေးသားပါတယ်။ ဥပမာ Business Logic တစ်ခု ပြီးတိုင်းမှာ Unit Test ကို ရေးသားပါတယ်။

Blog system တစ်ခုကို backend မှာ ရေးတယ် ဆိုပါဆို့။ Post တွေ အတွက် CRUD ရေးပြီးရင် UI ကို ထပ်ဆောက်။ ပြီးမှ create post တင်လိုက်ရင် database ထဲမှာ ဝင်မဝင် ဆိုပြီး သမာရိုးကျ စစ်ခဲ့ပါတယ်။ Test Driven Development မှာ ဆိုရင် Create Post function ရေးပြီးရင် အဲဒီ အတွက် Unit Test တစ်ခု ရေးပါတယ်။ Deleate အတွက် ရေးပြီးရင် Unit Test တစ်ခု ထပ်ရေးပါတယ်။​ Unit Test ဟာ  ဖြစ်နိုင်သည့် case တွေ အကုန် ထပ်စစ်ပါတယ်။ ဥပမာ Create Post မှာ success case ရှိမယ်။ validation fail case ရှိမယ်။ duplicate case တွေ ရှိမယ်။ ဖြစ်နိုင်သည့် case တွေကို Unit Test မှာ ထည့်ရေးပြီး စစ်ပါတယ်။`

Feature: Create Blog Post
  Scenario: Successful Post
    Given Post information
    When User has Login
    Then Check Post validation
    When Post has valid
    Then Save in database
 
  Scenario: Fail User Not Login Post
    Given Post information
    When User has not Login
    Then Show Error

  Scenario: Fail Post not valid
    Given Post information
    When User has Login
    Then Chekc Post Validation
    When Post validation fail
    Then Show Error

ဒီလို ဖြစ်နိုင်သည့် case တွေကို Unit Test မှာ စစ်ဆေးတာပါ။ Create Post မှာတင် Unit Test ၃ ခု သို့မဟုတ် ၃ ထက် မက လည်း ပေါ်နိုင်ပါတယ်။

ဘာလို့ Unit Test ရေးရတာလဲ

Unit Test ဟာ အကောင်းဆုံး document တစ်ခုပါ။ Project ဟာ documentation မရေးထားပေမယ့် Test Case တွေ Test Module တွေ ကို သေချာခွဲထုတ်ထားသည့် အခါမှာ ဘယ် function တွေက ဘာလုပ်တယ်။​ ဘယ်လိုမျိုး use case တွေ ရှိတယ် ဆိုတာကို တွေ့နိုင်ပါတယ်။ Test Case တွေ ရေးသားထားခြင်းဖြင့် ကိုယ့် ရဲ့ code ကို ပိုပြီး ယုံကြည်မှု ရှိစေပါတယ်။​ ဒါပေမယ့် တခြား တစ်ယောက်ယောက်က code ပြင်လိုက်လို့ ကိုယ်ရေးထားသည့် အပိုင်းတွေ ထိသွားမထိသွား သလားဆိုတာကို  သိရဖို့ Test Case ကို ပြန် run လိုက်ရုံပါပဲ။ ဒါကြောင့် team တွေနဲ့ ရေးသားသည့် အခါမှာ collaboration ပိုမို ကောင်းမွန် စေပါတယ်။

Testable Code

Test Driven Development ကို အသုံးပြုပြီး ရေးမှသာ code တွေကို testable ဖြစ်အောင် ရေးဖြစ်မှာပါ။ Project အစ အဆုံးပြီးမှ code ကို testable ဖြစ်အောင် ရေးသားဖို့ မလွယ်ပါဘူး။ TDD ကြောင့် testable ရေးသားရသာကြောင့် class တွေဟာ lose coupling ဖြစ်စေပါတယ်။ Dependency Injection ကိုလည်း မဖြစ်မနေ အသုံးပြုလာရပါတယ်။ TDD ကြောင့် code တွေကို SOLID principle ကို လိုက်နာအောင် သတိထားပြီး ရေးသားလာနိုင်ပါမယ်။