Software Engineering အကြောင်းကို မိတ်ဆက်ခြင်း။
ဆော့ဖ်ဝဲအင်ဂျင်နီယာသည် ဆော့ဖ်ဝဲလ်စနစ်များ ဖွံ့ဖြိုးတိုးတက်ရေးနှင့် ပြုပြင်ထိန်းသိမ်းခြင်းဆိုင်ရာ ကွန်ပြူတာသိပ္ပံပညာရပ်၏ အကိုင်းအခက်တစ်ခုဖြစ်သည်။ ဤစည်းကမ်းသည် ကွန်ပျူတာသိပ္ပံနှင့် အင်ဂျင်နီယာပညာမှ အခြေခံမူများကို ဒီဇိုင်းဆွဲခြင်း၊ တီထွင်ခြင်း၊ စမ်းသပ်ခြင်းနှင့် ဆော့ဖ်ဝဲလ်ပလီကေးရှင်းများကို စီမံခန့်ခွဲရန် ပေါင်းစပ်ထားသည်။ ဆော့ဖ်ဝဲအင်ဂျင်နီယာ၏ ရည်မှန်းချက်မှာ အရည်အသွေးမြင့် ဆော့ဖ်ဝဲလ်များကို ကုန်ကျစရိတ်သက်သာစွာဖြင့် ထုတ်လုပ်ရန်ဖြစ်သည်။
Software Development Life Cycle (SDLC) ကို နားလည်ခြင်း
Software Development Life Cycle (SDLC) သည် ဆော့ဖ်ဝဲလ် ဖွံ့ဖြိုးတိုးတက်ရေး လုပ်ငန်းစဉ်တွင် ပါဝင်သည့် အဆင့်များကို အကြမ်းဖျင်းဖော်ပြသော မူဘောင်တစ်ခုဖြစ်သည်။ ဤအဆင့်များပါဝင်သည်-
- လိုအပ်ချက် ခွဲခြမ်းစိတ်ဖြာခြင်း- ဆော့ဖ်ဝဲလ်လုပ်ဆောင်ရန် လိုအပ်သည်များကို နားလည်ခြင်းနှင့် မှတ်တမ်းတင်ခြင်း။
- ဒီဇိုင်း- ဆော့ဖ်ဝဲလ်၏ တည်ဆောက်ပုံနှင့် အစိတ်အပိုင်းများကို စီစဉ်ခြင်း။
- အကောင်အထည်ဖော်ခြင်း- ဒီဇိုင်းအရ ကုဒ်ကိုရေးခြင်း။
- စမ်းသပ်ခြင်း- ဆော့ဖ်ဝဲကို ရည်ရွယ်ထားသည့်အတိုင်း အလုပ်လုပ်ကြောင်း အတည်ပြုခြင်း။
- အသုံးချခြင်း- ဆော့ဖ်ဝဲလ်ကို အသုံးပြုနိုင်ရန် ပြုလုပ်ပေးခြင်း။
- ပြုပြင်ထိန်းသိမ်းခြင်း- ပြဿနာများကို ဖြေရှင်းခြင်းနှင့် ဆော့ဖ်ဝဲကို အချိန်နှင့်အမျှ အပ်ဒိတ်လုပ်ခြင်း။
ဆော့ဖ်ဝဲအင်ဂျင်နီယာ၏ အဓိကအခြေခံမူများ
ဆော့ဖ်ဝဲအင်ဂျင်နီယာသည် အောက်ပါတို့အပါအဝင် အခြေခံမူများစွာဖြင့် လမ်းညွှန်ထားသည်။
- Modularity- ဆော့ဖ်ဝဲလ်ကို သေးငယ်၍ စီမံခန့်ခွဲနိုင်သောအပိုင်းများအဖြစ် ပိုင်းခြားခြင်း။
- Abstraction- ပိုမိုမြင့်မားသောအဆင့်တွင် ဆော့ဖ်ဝဲလ်အစိတ်အပိုင်းများကို ပုံစံထုတ်ခြင်းဖြင့် ရှုပ်ထွေးသောအဖြစ်မှန်များကို ရိုးရှင်းစေသည်။
- Encapsulation- ထိုဒေတာပေါ်တွင် လုပ်ဆောင်သည့် နည်းလမ်းများဖြင့် ဒေတာကို စုစည်းခြင်း။
- အမွေဆက်ခံခြင်း- ကုဒ်ပြန်သုံးခြင်းကို မြှင့်တင်ရန်အတွက် ရှိပြီးသားအတန်းများမှ အတန်းအသစ်များကို ရယူခြင်း။
- Polymorphism- မတူညီသော အတန်းများ၏ အရာဝတ္တုများကို သာမာန်စူပါလူတန်းစား၏ အရာဝတ္ထုများအဖြစ် သဘောထားရန် ခွင့်ပြုခြင်း။
Software Design Patterns များ
ဆော့ဖ်ဝဲဒီဇိုင်းပုံစံများသည် ယေဘုယျအားဖြင့် ဆော့ဖ်ဝဲလ်ဒီဇိုင်းတွင် ဖြစ်လေ့ရှိသော ပြဿနာများအတွက် ပြန်လည်အသုံးပြုနိုင်သည့် ဖြေရှင်းနည်းများဖြစ်သည်။ လူကြိုက်များသော ဒီဇိုင်းပုံစံအချို့ ပါဝင်သည်။
- Singleton Pattern- အတန်းတစ်ခုတွင် သာဓကတစ်ခုသာရှိပြီး ၎င်းသို့ဝင်ရောက်နိုင်သော ကမ္ဘာလုံးဆိုင်ရာအမှတ်ကို ပေးဆောင်ကြောင်း သေချာပါစေ။
- စက်ရုံသုံးနည်းလမ်းပုံစံ- အရာဝတ္ထုတစ်ခုဖန်တီးရန်အတွက် အင်တာဖေ့စ်တစ်ခုကို သတ်မှတ်ပေးသည်၊ သို့သော် အတန်းခွဲများသည် မည်သည့်အတန်းကို ချက်ချင်းလုပ်ဆောင်ရမည်ကို ဆုံးဖြတ်ခွင့်ပေးသည်။
- Observer Pattern- အရာဝတ္ထုတစ်ခုမှ တစ်ခုမှတစ်ခုသို့ အများအပြား မှီခိုမှုဖြစ်ပြီး အရာဝတ္ထုတစ်ခုသည် အခြေအနေပြောင်းလဲသည့်အခါ ၎င်း၏မှီခိုသူအားလုံးကို အသိပေးပြီး အလိုအလျောက် အပ်ဒိတ်လုပ်မည်ဖြစ်သည်။
- ဗျူဟာပုံစံ- အယ်လဂိုရီသမ်များ၏ မိသားစုတစ်စုကို သတ်မှတ်ပြီး တစ်ခုချင်းစီကို ဖုံးအုပ်ကာ ၎င်းတို့ကို လဲလှယ်နိုင်စေသည်။
Agile Software Development
လျင်မြန်သောဆော့ဖ်ဝဲလ်ဖွံ့ဖြိုးတိုးတက်ရေးသည် လိုအပ်ချက်များနှင့် ဖြေရှင်းချက်များအား ကိုယ်တိုင်ဖွဲ့စည်းခြင်းလုပ်ငန်းခွင်သုံးအဖွဲ့များကြား ပူးပေါင်းဆောင်ရွက်ခြင်းအားဖြင့် ဆင့်ကဲပြောင်းလဲလာသော ဖွံ့ဖြိုးတိုးတက်မှုအပေါ် အခြေခံသည့် နည်းစနစ်အစုတစ်ခုဖြစ်သည်။ လျင်မြန်သောဆော့ဖ်ဝဲလ်ဖွံ့ဖြိုးတိုးတက်မှု၏အဓိကတန်ဖိုးများတွင်-
- လုပ်ငန်းစဉ်များနှင့် ကိရိယာများပေါ်တွင် တစ်ဦးချင်းစီနှင့် အပြန်အလှန် တုံ့ပြန်မှုများ ။
- ပြည့်စုံသောစာရွက်စာတမ်းများထက် အလုပ်လုပ်သောဆော့ဖ်ဝဲ ။
- စာချုပ်ညှိနှိုင်းမှုအပေါ် ဖောက်သည်ပူးပေါင်းဆောင်ရွက်ခြင်း ။
- အစီအစဥ်အတိုင်း ပြောင်းလဲခြင်းအပေါ် တုံ့ပြန်ခြင်း ။
Software Engineering တွင် အရည်အသွေးအာမခံချက်
အရည်အသွေးအာမခံချက် (QA) တွင် အရည်အသွေးစံနှုန်းများ ပြည့်မီစေရန် ပရောဂျက်တစ်ခု၏ ဝန်ဆောင်မှု၊ သို့မဟုတ် အဆောက်အအုံတစ်ခု၏ ရှုထောင့်အမျိုးမျိုးကို စနစ်တကျ စောင့်ကြည့်အကဲဖြတ်ခြင်း ပါဝင်သည်။ ဆော့ဖ်ဝဲလ်အင်ဂျင်နီယာတွင်၊ QA သည် ဆော့ဖ်ဝဲလ်ဖွံ့ဖြိုးတိုးတက်ရေးလုပ်ငန်းစဉ်ကို ပိုမိုကောင်းမွန်စေရန်နှင့် ဆော့ဖ်ဝဲထုတ်ကုန်တွင် ချို့ယွင်းချက်များကို ကာကွယ်ခြင်းအပေါ် အာရုံစိုက်သည်။ QA အလေ့အကျင့်များ ပါဝင်သည်-
- ကုဒ်ပြန်လည်သုံးသပ်ခြင်း- ဆော့ဖ်ဝဲလ်၏ အလုံးစုံအရည်အသွေးနှင့် ဆော့ဖ်ဝဲရေးသားသူများ၏ ကျွမ်းကျင်မှုနှစ်ခုစလုံးကို မြှင့်တင်ပေးသည့် ကနဦးဖွံ့ဖြိုးတိုးတက်မှုအဆင့်တွင် သတိမမူမိသော အမှားများကို ရှာဖွေပြုပြင်ရန် ရည်ရွယ်သည့် ကွန်ပျူတာအရင်းအမြစ်ကုဒ်ကို စနစ်တကျစစ်ဆေးခြင်းဖြစ်သည်။
- စဉ်ဆက်မပြတ် ပေါင်းစပ်ခြင်းနှင့် ပေးပို့ခြင်း (CI/CD)- အက်ပ်များကို တီထွင်မှုအဆင့်များတွင် အလိုအလျောက်စနစ်ထည့်သွင်းခြင်းဖြင့် သုံးစွဲသူများထံ အက်ပ်များကို မကြာခဏ ပေးပို့ရန် နည်းလမ်းတစ်ခု။ CI/CD နှင့် သက်ဆိုင်သည့် အဓိက သဘောတရားများမှာ စဉ်ဆက်မပြတ် ပေါင်းစပ်ခြင်း၊ စဉ်ဆက်မပြတ် ပေးပို့ခြင်းနှင့် စဉ်ဆက်မပြတ် ဖြန့်ကျက်ခြင်း တို့ဖြစ်သည်။
- အလိုအလျောက်စမ်းသပ်ခြင်း- ၎င်းသည် မျှော်လင့်ထားသည့်အတိုင်း ပြုမူကြောင်းသေချာစေရန် တီထွင်ထားသည့်ဆော့ဖ်ဝဲတွင် စမ်းသပ်မှုများလုပ်ဆောင်ရန် ဆော့ဖ်ဝဲကိရိယာများကို အသုံးပြုခြင်း။
Software Metrics နှင့် Measurement
ဆော့ဖ်ဝဲလ်မက်ထရစ်များသည် ဆော့ဖ်ဝဲလ်လုပ်ငန်းစဉ်များ၊ ထုတ်ကုန်များနှင့် ဝန်ဆောင်မှုများ၏ မော်ဒယ်များ၏ ဖွံ့ဖြိုးတိုးတက်မှုနှင့် အတည်ပြုခြင်းအတွက် အရေအတွက်အခြေခံများကို ပံ့ပိုးပေးသည့် တိုင်းတာမှုစံနှုန်းများဖြစ်သည်။ အသုံးများသောဆော့ဖ်ဝဲလ်မက်ထရစ်များ ပါဝင်သည်-
- ကုဒ်ရှုပ်ထွေးမှု- ပရိုဂရမ်တစ်ခု၏ဖွဲ့စည်းပုံကို နားလည်ရန် မည်မျှခက်ခဲသည်ကို တိုင်းတာသည်။ ဥပမာများတွင် \(n\) binary ဆုံးဖြတ်ချက်များပါရှိသော မော်ဂျူးအတွက် သတ်မှတ်နိုင်သည့် Cyclomatic Complexity ပါဝင်သည် \(M = n + 1\)
- ကုဒ်လိုင်းများ (LOC)- ပရိုဂရမ်၏ အရင်းအမြစ်ကုဒ်ရှိ စာသားလိုင်းများကို ရေတွက်ခြင်းဖြင့် ဆော့ဖ်ဝဲပရိုဂရမ်တစ်ခု၏ အရွယ်အစားကို တိုင်းတာသည်။
- Function Points (FP)- ထည့်သွင်းမှုများ၊ အထွက်များ၊ မေးမြန်းချက်များ၊ ဖိုင်များနှင့် အင်တာဖေ့စ်ဖိုင်များ၏ အရေအတွက်နှင့် ရှုပ်ထွေးမှုအပေါ် အခြေခံ၍ သုံးစွဲသူထံ ပေးပို့သည့် လုပ်ဆောင်နိုင်စွမ်းကို တိုင်းတာသည်။
ဆော့ဖ်ဝဲအင်ဂျင်နီယာသည် ဆော့ဖ်ဝဲလ်၏ဖန်တီးမှု၊ ဒီဇိုင်း၊ ဖွံ့ဖြိုးတိုးတက်မှု၊ စမ်းသပ်မှုနှင့် ပြုပြင်ထိန်းသိမ်းမှုတို့ကို အကျုံးဝင်သည့် ရှုပ်ထွေးပြီး ဘက်စုံသော စည်းကမ်းတစ်ခုဖြစ်သည်။ နယ်ပယ်တွင် ပရိုဂရမ်းမင်းဘာသာစကားများနှင့် ဆော့ဖ်ဝဲလ်ဖွံ့ဖြိုးတိုးတက်ရေးနည်းလမ်းများ၏ နည်းပညာဆိုင်ရာ ကျွမ်းကျင်မှုနှင့် အသိပညာ လိုအပ်ရုံသာမက ဆော့ဖ်ဝဲဒီဇိုင်းပုံစံများ၊ အရည်အသွေးအာမခံချက်၊ အဖွဲ့ပူးပေါင်းဆောင်ရွက်မှုနှင့် ပရောဂျက်စီမံခန့်ခွဲမှုတို့ကိုလည်း နားလည်ရန် လိုအပ်ပါသည်။ ဤသဘောတရားများနှင့် အလေ့အကျင့်များကို ထိထိရောက်ရောက် အသုံးချနိုင်မှုသည် ဆော့ဖ်ဝဲလ်ပရောဂျက်များ၏ အောင်မြင်မှုကို အဆုံးအဖြတ်ပေးသည်။