Monday, May 19, 2014

Software Testing

Software တစ္ခုကို Testing လုပ္တာဟာ သိပ္အေရးပါတဲ့ အဆင့္ တစ္ခုပါ။ ဒါေပမဲ့ လူေတြအမ်ားစု က လစ္လ်ဴရႈတတ္ၾကပါတယ္။ လုပ္ငန္း တစ္ခ်ိဳ႕ဆိုရင္လဲ အဲဒီ့ဘက္မွာ ပိုက္ဆံသံုးဖို႔ တြန္႔တို တတ္ၾကတယ္။ တခ်ိဳ႕ Software developers ေတြကလဲ testing လုပ္ရတာကို မႀကိဳက္ၾကပါဘူး။ တစ္ခ်ိဳ႕ဆိုရင္ သူတို႔ရဲ့ အခ်ိန္ကို testing လုပ္ေနမဲ့ အစား code ေရးေနသင့္တယ္လို႔ ဆိုပါတယ္။
က်ေနာ့္ အျမင္ကေတာ့ testing လုပ္တတ္ဖို႔ နဲ႔ testing အတြက္ ျပင္ဆင္မႈေတြက software development အတြက္ အရမ္းကို အေရးႀကီးပါတယ္။
Testing လုပ္တယ္ ဆိုတာဘာလဲ။ Software တစ္ခုကို ေရးၿပီဆိုကတည္းက ရည္ရြယ္ခ်က္တစ္ခု ရွိပါတယ္။ ဥပမာ ဂဏန္းေပါင္း စက္ တစ္ခုေရးတယ္ ဆိုပါေတာ့။ ဒီဂဏန္းေပါင္း စက္က ဂဏန္းေတြ လကၡဏာေတြကို လက္ခံၿပီး ေရးလာတဲ့ ေဖာ္ျမဴလာေတြ ကို တြက္ခ်က္ၿပီး အေျဖထုတ္ေပးဖို႔ပါပဲ။ ဂဏန္း ၂ခု ရဲ့ အလယ္မွာ အေပါင္း လကၡဏာဆိုရင္ အဲဒီ့ ဂဏန္း၂ခုကို ေပါင္းေပးမယ္။ စသျဖင့္ လိုအပ္ခ်က္ေတြ ရွိပါတယ္။ အဲဒီ့ လိုအပ္ခ်က္ေတြ အားလံုး ရၿပီဆိုပါေတာ့။ တစ္ကယ္က်ေတာ့ သံုးတဲ့ သူေတြက အဲဒီ့ လိုအပ္ခ်က္ေတြ အတိုင္း သံုးခ်င္မွ သံုးၾကမွာကိုး။ ဂဏန္းေတြ လကၡဏာေတြတင္ မကဘဲနဲ႔ သံုးတဲ့သူက အကၡရာေတြ ရိုက္ထဲ့ ရင္ ဘယ္လိုျဖစ္မလဲ။ ဒါေတြကို ႀကိဳ မစဥ္းစားထားရင္ ျပသနာေတြ တက္သြားႏိုင္တယ္။ ဒါေတြကို testing လုပ္တဲ့သူက လိုခ်င္တဲ့ feature ေတြ အျပင္ ျဖစ္ႏိုင္တဲ့ အေျခအေန အားလံုးကို ျခံဳမိေအာင္ စစ္ရမယ္။ ဒါမွသာ software ကို သံုးတဲ့သူ လက္ထဲ ထဲ့လိုက္တဲ့ အခါမွာ သံုးတဲ့သူေတြ စိတ္ခ်မ္းသာမႈ ရရမွာေပါ့။
အထက္ဥပမာအရ ဂဏာန္း တြက္စက္ထဲကို a ကေန z အထိ အကၡရာေတြ ထဲ့စမ္းပါ ဆိုတဲ့ အခ်က္တစ္ခ်က္ ကို test case တစ္ခုလို႔ ေခၚတယ္။ Test cases ေတြကို စနစ္က်က်နဲ႔ အကြက္ေစ့ေအာင္ ေရးႏိုင္ရမယ္။ ဒီလို ေရးႏိုင္ဖို႔ အတြက္ testing လုပ္မဲ့ software က ဘာ features ေတြ ပါလဲ ဆိုတာ အရင္ဆံုး သိရမယ္။ ၿပီးရင္ software မွာ ဘယ္လို interaction ရွိလဲ ဆိုတာ သိရပါမယ္။
Features ဆိုတာ အဂၤါရပ္လို႔ တိုက္ရိုက္ အဓိပၸါယ္ ျပန္ထားပါတယ္။ Software တစ္ခုက ဘာေတြ ကို လုပ္ေဆာင္ ဖို႔ ထုတ္ထားတယ္ဆိုတဲ႔ ရည္ရြယ္ခ်က္ ေတြ အားလံုးေပါင္းလိုက္ရင္ သူ႔ရဲ့ feature list ရမွာပါ။
Interaction ဆိုတဲ့ ေနရာမွာ ကိုယ္ testing လုပ္မဲ့ software ကို ဗဟိုျပဳထားၿပီး input (ကီးဘုတ္, ၾကြက္, လက္နဲ႔ ထိလို႔ ရတဲ့ screen, စသည္) နဲ႔ output (ဖန္သားေပၚက အျမင္, အသံ, တုန္ခါျခင္း, printing, disk တစ္ခုခု ေပၚတြင္ သိမ္းျခင္း နဲ႔ အင္တာနက္ေပၚသို သတင္းအခ်က္အလက္နဲ႔ ဖိုင္ ေတြ တင္ျခင္း စသည္) ရယ္ဆိုၿပီး ၂ပိုင္း ရွိပါတယ္။ အျခား software ေတြနဲလဲ interaction ရွိႏိုင္ပါတယ္။ တိုက္ရိုက္ သို႔မဟုတ္ သြယ္ဝုိက္ၿပီးေတာ့လဲ ရွိႏိုင္ပါတယ္။
Test cases ေတြ စေရးၿပီဆိုရင္ ရွိသမွ် features ေတြကို တစ္ခုၿပီး တစ္ခု စိစစ္ၿပီး ေရးသြားသင့္ပါတယ္။ ပထမ feature မွာ ျဖစ္ႏိုင္သမွ် interaction ေတြကို ခ်ေရးရပါတယ္။ ၿပီးရင္ အဲဒီ့ တစ္ခုခ်င္းစီမွာ ဘယ္လို အေျဖထြက္သင့္တယ္ဆိုတာ ရွာရမွာပါ။ Test case တစ္ခုဟာ ပံုမွန္ အားျဖင့္ ေအာက္ပါ လကၡဏာေတြ ရွိတတ္ပါတယ္။
- ဘာကို စစ္မွာလဲ (အေပါင္း)
- ဘာလုပ္ရင္ (ဂဏန္း ၂လံုး ေပါင္းရင္)
- ဘာျဖစ္ရမယ္ (အေျဖက ေပါင္းတဲ့ အတိုင္းျဖစ္ရမယ္), ဘာမျဖစ္ရဘူး (အေျဖမမွားရဘူး)
- ဘယ္လို စစ္မလဲ (၀ ကေန အၾကီးဆံုး လက္ခံႏိုင္တဲ့ ဂဏန္း အထိ စစ္ရအယ္။ အႏႈတ္ကိန္းေတြကိုလဲ စစ္ရမယ္။)
Test case တစ္ခုဟာ လုပ္ေဆာင္မႈ တစ္ခုတည္းနဲ႔ ထပ္တူမက်ပါဘူး။ interaction ရႈပ္ရင္ ရႈပ္သလို အေသးစိတ္ အဆင့္ေတြ ကြဲျပားၿပီး အမ်ားႀကီး စစ္ဖို႔ လိုအပ္ပါတယ္။ ဒါေၾကာင့္ လက္နဲ႔ စစ္ေနတယ္ ဆိုရင္ အခ်ိန္ အမ်ားႀကီး လိုတတ္ပါတယ္။ တစ္ခ်ိဳ႕ test case ေတြကို programming နည္းနဲ႔ စစ္လိုရေအာင္ လုပ္ၾကပါတယ္။ ဒါကို unit test လုပ္တယ္၊ test script ေရးတယ္ စသျဖင့္ ေခၚၾကပါတယ္။ တစ္ခ်ိဳ႔ အေနအထားေတြ အတြက္ စက္ရုပ္ေတြ သံုးတတ္ပါတယ္။ ဥပမာ လူ႔လက္နဲ႔ ႏိွပ္မဲ့အစား စက္ရုပ္လက္နဲ႔ ႏွိပ္ခို္င္းတဲ့အခါ အႀကိမ္ေပါင္းေျမာက္မ်ားစြာကို လက္မေညာင္းပဲ ႏွိပ္လို႔ ရသြားပါတယ္။

Testing လုပ္ဖို႔အတြက္ အခ်ိန္ႏွင့္ ပိုက္ဆံကို တြန္႔တိုမေနပဲ Testing ကို ဘယ္လို အခ်ိန္တိုတို နဲ႔ ျမန္ျမန္ဆန္ဆန္ လုပ္လို႔ ရမလဲဆုိတာ ကို စဥ္းစားၿပီး software development မွာ ပါဝင္တဲ့သူအားလံုး စိတ္ပါဝင္စားစြာနဲ႔ လုပ္ေဆာင္သင့္တယ္လို႔ က်ေနာ္ထင္ပါတယ္။ ဒါမွလဲ ပိုမိုေကာင္းမြန္တာ့ software ေတြ ထြက္ေပၚလာမွာပါ။

9 comments:

  1. စားသားအရွယ္ကိုဘာသာျပန္ေစခ်င္တယ္

    ReplyDelete
  2. ကြ်န္ေတာ္softwareကိုနားမလည္းဘူး

    ReplyDelete
  3. ပဟေဋ္ဌိအသစ်လေးတွေကို ဖြစ်နိုင်ရင် update လုပ်ပေးဖို့ အကြံပြုပါတယ်။

    ReplyDelete
  4. squander ကဘာလဲ ရွာလို့မရ
    ဘူး

    ReplyDelete
  5. Hein htet paing soe

    ReplyDelete