Тестийг автоматжуулах нь
Програм хангамжын тест гэдэг нь чанарыг баталгаажуулах, хангах хамгийн чухал хэсэг бөгөөд чанарын шаардлагыг өндөрт тавьсан системийн хөгжүүлэлтэд сайн тестийн инженер, тэстийн баг, тэстийн хөрөнгө оруулалт зайлшгүй. Зарим хөгжүүлэгчид тестийг уйтгартай, үр ашиг багатай, ёс төдий зүйл мэтээр хүлээж авдаг нь тестийг хийх оновчтой, үр ашигтай арга барилыг бий болгоогүй, тестээр системийн алдаа сэвийг илрүүлэх сэтгэхүй байхгүйгээс тэр. Ингээд өөртэйгөө маргаж, энд тэндээс юм ухаж төнхөж байж олсон зүйлээ хуваалцья.
Тэстийг автоматжуулах ажлыг програм хангамж хөгжүүлэлтийн процессын дагуу ул суурьтай авч үзэж, төлөвлөгөөтэй, хөрөнгө хүч, цаг хугацаа зарцуулж, хэрэглэгчтэй, гүйцэтгэгчтэй, хүлээж буй тодорхой үр дүнтэй байж хийх ёстой болохыг энэ талын мэргэжилтнүүд нэгэн дуугаар зөвшөөрдөг.
Систем хөгжүүлэлтийн ажил юуны түрүүнд шаардлагыг тодруулах буюу хэрэглэгчид юу хэрэгтэй байгааг судласнаар эхэлдэг. Тэстийг автоматжуулах гэдэг маань гараар хийдэг тестийг автоматаар хийх гэж ойлгогдох нь хэнд ч илт. Иймд тэстийг автоматжуулахын өмнө гараар тестийг хийх процесс тодорхой болсон байх ёстой байх нь. Тестийн процесс байхгүй бол, байхгүй юмыг автоматжуулна гэдэг утгагүй. Ингээд эхний заавал хийх ёстой зүйл бол тестийн процессыг сайтар тодруулах юм. Тестийн загвар буюу тэстийг хэрхэн явуулах, ямар багаж хэрэглэх, яаж ажиллуулах, үр дүнг хэрхэн шалгах, тэстийн үед ашиглагдах файлуудын тайлбар, гарын авлагуудыг зэрэг үүнд багтана. Тухайн системийн тухай ерөнхий ойлголттой хэн ч байсан тестийг ажиллуулж дөнгөхөөр хэмжээнд тэстийн процессыг тодорхой болгох хэрэгтэй. Ингэж тодруулах явцад ямар хэсгийг хэрхэн өөрчилөн сайжруулж болох нь тодорч ирэх ч талтай. Үр ашиг муутай тестийн процессийг автоматжуулаад ч гарах үр дүн нь сайжрахгүй. Гараар хийгдэж байгаа тестийн үр ашгийг сайжруулах, илүү боловсронгуй болгох энгийн алхмуудыг хийхдээ, тестийн үр ашиг нь тухайн тестээр алдаа илрүүлэх магадлал, тестийг гүйцэтгэхэд амар хялбар байдал, илрүүлсэн алдааны байрлал болоод шалтгааныг тодорхойлоход хир дөхөмтэй зэргээр хэмжигддэг гэдгийг бодоорой.
Тэстийн процессыг тодорхой болгон баримтжуулж, зарим сайжруулалтуудыг хийсний дараа автоматжуулах шаардлагаа тодорхойлно. Ямар ч тодорхой хүлээсэн үр дүнгүйгээр ажлаа эхлэх нь автоматжуулагчид болон бусад хүмүүсийг залхаахад хүргэдэг. Ерөнхийдөө бол рилийзийг хурдасгах, тестийн тоог олшруулах, хүн хүчийг хэмнэх, өндөр мэдлэггүй хүмүүсээр тэст хийлгэх, тестийг найдвартай болгох зэрэг үр дүнг хүлээж болно. Харин яг ямар тестүүдийг автоматжуулах вэ? ажлаа хаанаас эхлэх вэ гэдэг асуудал дараагийн шатанд тавигдана.
Тэстийн автоматжуулалт ихэвчлэн регресс тест буюу өмнө ажиллуулаад шалгачихсан тестүүдийг дахин дахин ажиллуулах хэсгээс эхэлдэг. Кодод өөрчлөлт орох болгонд өмнөх ажиллаж байсан тестүүд хэвийн эсэхийг шалгана гэсэн үг. Нэгэнт ажиллуулаад туршчихсан учраас автоматжуулахад амар байхаас гадна, хамгийн гол нь олон дахин давтагдах учраас автоматжуулснаар олох ашиг нь их юм. Зарим тестийг огт автоматжуулах шаардлагагүй ч байж болно. Тухайлбал ганцхан удаа ажиллаад ахиж ажиллахгүй тэстийг автоматжуулах нь утгагүй. Мөн туйлын ярвигтай тестүүдийг автоматжуулахад их цаг хугацаа, хүч хөдөлмөр шаардах учраас гараар хийж байсан нь дээр. Ийм тестийг хүч зарцуулаад автоматжууллаа ч, тестийн кодод алдаа гарах магадлал их учраас дараа нь тэртэй тэргүй гараар ажиллуулж үнэмших хэрэгтэй болдог. Иймд бүх тестийг захаас аваад автоматжуулах гэхээсээ аль автоматжуулахад амар хирнээ, гарах ашиг нь харагдахуйц хэсгүүдээс эхлэх нь зүйтэй.
Ямар үр дүн хүлээх, тестийн аль хэсгийг автоматжуулахаа шийдсэн бол системийн хөгжүүлэлтийн дараагийн цикл болох хэрхэн хийх буюу дизайны шат руу орно. Ингээд:
- Record/Playback загвар,
- Функционалаар задлах арга,
- Түлхүүр үгээр жолоодогдох
аргачлалуудыг авч үзье.
Record/Playback загвар нь хэрэгжүүлэхэд хамгийн хэцүү. Хэрэглэгчийн тест хийж байгаа бүх үйлдлийг бичиж аваад дараа нь автоматаар давтан ажиллуулах гэсэн энгийн арга боловч, төрөл бүрийн график дүрслэлийн орчин, шинэ шинэ технологи зэрэгтэй харьцах шаардлагатай учраас Record/Playback хийдэг програмууд их үнэтэй байдаг. Энэ арга сонсоход сайхан байгаа боловч яг бодит байдал дээр хэрэглэх үед бараг хэрэгцээгүй болчихдог. Учир нь хэрэглэгчийн үйлдлийг бичиж авах үед үүсэх скрипт нь өөрчлөгдөх, дахин засварлахад хүндрэлтэй учраас програмд жижиг засвар ороход тестийг дахин гараар ажиллуулж бичиж авах болдог. Хамгийн гажиг нь тэстийг бичиж авахын тулд тухайн үйлдэл заавал зөв ажиллаж байх ёстой. Тэгэхээр бичиж байх явцад ихэнх алдаа тохиолдох бөгөөд, алдааг засаж байж бичих үйлдэл дуусна. Ингэхээр гараар тестлэснээс ялгаа байхгүй биз дээ.
Функционалаар задлах арга нь тестийн тохиолдлуудыг үндсэн үйлдлүүдээр нь задлаж хоорондоо үл хамааралтай ортогональ скриптүүдийг хөгжүүлэх аргачлал юм. Хэрэглэгчийн функцүүд, Бизнесийн Функцийн скриптүүд, Дэд функцийн скриптүүд гэх мэтээр скриптүүдийг үечилж, эдгээр нь хаанаас дуудагдахаас хамаарахгүйгээр өөр өөрийн үйлдлийг гүйцэтгэх чадвартай байна. Жишээлбэл:
- Бизнесийн функцүүд : Гүйлгээ хийх скрипт, Мессеж илгээх скрипт
- Дэд функцүүд буюу туслах функцүүд : Өгөгдөл харьцуулах, Лог шалгах, Сэрвэр лүү холбогдох
- Хэрэглэгчийн функцүүд : Лог файл унших, сүлжээний холболт үүсгэх
Хамгийн гадна талд нь Жолоодогч скрипт байж, тестийг ажиллуулна. Жолоодогч скрипт нь дотроо "Тестийн тохиолдлууд"-ыг дуудсан байна. Тэстийн тохиолдол бүр нь тестийн логикийг Бизнес функцийн скриптүүдээр ажиллуулна. Дэд функцүүд болон бусад туслах скриптүүд нь хаанаас ч дуудагдаж болно.
- Жолоодогч скрипт:
- Орчны тохиргоо болон бусад шаардлагатай үйлдлүүдийг хийж дуусаад "тестийн тохиолдлууд"-ыг дэс дараалан ажиллуулж эхлэнэ.
- Тестийн тохиолдлын скрипт:
- Тестийн логикийг Бизнес функцийн скриптүүдийг дуудаж ажиллуулна.
- Бизнес функцийн скрипт:
- Програмын тодорхой функцүүдийг хэрэгжүүлнэ
- Дэд функцын скриптүүд:
- Бизнес функцыг хэрэгжүүлэхэд шаардлагатай програм дотор түгээмэл ашиглагдах дэд функцүүд.
- Хэрэглэгчийн функцүүд:
- Ерөнхий, Дэлгэцтэй харьцах, Сүлжээтэй харьцах
- Эдгээр нь хаанаас ч дуудагдаж болно.
Тухайлбал Сервэртэй холбогдолт үүсгэх -гэдэг тэстийн тохиолдол дараах байдлаар бичигдэж болно.
Сервертэй холбогдох:
- Тохиргооны файлаас сервэрийн хаягийг унших
- Сэрвэртэй холбогдох хүсэлтийг сүлжээгээр илгээх
- Хариултыг хүлээж авах
- Холбогдсон эсэхийг шалгах
Сэрвэртэй холбогдох хүсэлтийг сүлжээгээр илгээх- дэд функцыг цааш задалвал:
- Сэрвэртэй TCP/IP холболт үүсгэх
- Холбогдогдох хүсэлт-ийн мессежийг бэлдэх
- Мессежийг TCP/IP холболтоор дамжуулах
Дээрхээс харвал "Сэрвэртэй холбогдох хүсэлтийг сүлжээгээр илгээх"- дэд функц нь ерөнхий зориулалтийн "Мессеж илгээх" -гэдэг функц байж болохоор байна. Үүний тулд өгөгдлийг функцээс салгах хэрэгтэй, тестийн тохиолдолд харгалзах өгөгдлүүд болон хүлээх үр дүнг тестийн скриптүүдээс тусдаа файлд хадгалснаар шинэ тестүүдийг үүсгэхэд хялбар болох юм. Энэ арга нь дахин дахин ашиглагдаг скрипт модулиудыг ашиглаж тестийн өгөгдөл болон шалгах нөхцөлийг файлд хадгалснаар нилээд хөдөлмөр хэмнэж байгааг ч, дараах сул талуудтай.
- Скрипт хэлний өндөр мэдлэг шаарддаг
- Тестийн тохиолдол болгонд хэд хэдэн текст файл шаардлагатай болох учраас эдгээр файлуудыг зохицуулахад хүндрэл гардаг
- Тэстчин тестийн төлөвлөгөөг нарийвчилсан өгөгдлийн хамт гаргахын хажуугаар эдгээр өгөгдлүүдийг тусгай форматтайгаар текст файлуудад оруулж тестэнд бэлдэх шаардлагатай.
- Энгийн текст файлуудыг анхааралтай үүсгэхгүй бол формат зөрснөөс болж тестийн скриптүүд буруу ажиллаж болно
Түлхүүр үгээр жолоодогдох арга буюу Тестийн төлөвлөгөөгөөр жолоодогдох арга нь өмнөх аргын сайн талуудыг шингээхээс гадна ихэнх сул талуудыг үгүйсгэж чаддаг. Ажиллах зарчим ерөнхийдөө адилхан боловч тестийн өгөгдлийг дүрслэх арга нь өөр юм. Шууд хүснэгтэн аргаар бэлдсэн тестийн төлөвлөгөөн дээр тулгуурлаж скриптүүд ажилладаг.
Түлхүүр үг | Байрлал | Оролт/Шалгах Өгөгдөл | Тайлбар | OK/NG |
---|---|---|---|---|
Connect | 10.10.10.20 | Сэрвэр лүү холбогдох | ||
Send | 10.10.10.20 | 0x87467348 | Холбогдох хүсэлт явуулах | |
Receive | 10.10.10.20 | Хүсэлтийн хариуг хүлээж авах | ||
Check | app_log.txt | "Connected to server : 10.10.10.20" | Холбогдсон эсэхийг шалгах |
Дээрх хүснэгтийг ямар нэг хүснэгт боловсруулах програмаар бэлдээд текст хэлбэр лүү хөрвүүлэх тул, контроллер скрипт тэр текст файлыг мөр мөрөөр нь уншиж мөрийн эхэнд байх түлхүүр үгэнд харгалзах скриптийг, бусад нүдэн дэх мэдээллийг параметр байдлаар дамжуулан ажиллуулна. Энэ аргын давуу тал нь тестийн төлөвлөгөөг шууд тестийн өгөгдөл болгож ашиглаж байгаагаас гадна, тестийг ажиллуулах хүн зөвхөн түлхүүр үгнүүдийг судлахад л болохоор байгаа. Тестийн өгөгдлөө бэлдээд ганц командаар тестүүдээ ажиллуулах боломжтой боллоо. Мөн дээр хүснэгтийг харж байгаад гараар тестийг ажиллуулах ад ч эвтэйхэн гэдэг нь харагдаж байна.
Тестийн процессыг сайжруулах, тестийг автоматжуулахад яг хөгжүүлэлтийн орчинтой адил тестийн тусдаа орчин хэрэгтэйг онцлон анхаарах хэрэгтэй. Хөгжүүлэлтэд хэрэглэж байгаатай яг адилхан програм хангамж, тохиргоо, техник байх ёстой.
Тестийн скрипт гэдэг нь бас л програм хангамж код учраас эх кодын удирдлагаар хангаж, сайн програмчин хуваарилж, хэрэглэгчид болох тестчидэд зориулж тайлбар, гарын авлага хийх нь зүй. Ер нь тест хийнэ гэдэг, зөвхөн тестийг ажиллуулаад OK/NG гэж бичихийн нэр биш, кодыг шинжилж судлаж, ухаж төнхөж байж жинхэнэ утгаар нь хэрэгжүүлдэг болохыг байнга санах хэрэгтэй. Энд тэстийг автоматжуулах тухай ярьж байгаа болохоос автоматаар тэстлэх гэж яриагүй билээ. Тест гэдэг бол системийн ажиллагааг үнэмжих, батлах процесс. Хэрэв тестийг бүрэн автоматжуулсан гэвэл тэстийн үр дүнг хэрхэн үнэмших вэ? Бүрэн автомат байлаа гэвэл, түүнийг өөрийг нь зөв ажиллаж байгааг бас тестлэх хэрэгтэй болно. Иймд гар тест ямагт байх ёстой бөгөөд автоматаар хийж байгаа тестийг хэзээ хүссэн цагтаа гараар хийж шалгах боломжтой байх ёстой. Иймд сайн тестчин хэзээд хэрэгтэй, үнэ цэнэтэй байх болно. Тестчин хүн ажлынхаа зарим хэсгийг автоматжуулснаар тестийн нөхцөлүүдээ баяжуулах, тэстийн скриптээ сайжруулах гээд илүү ашигтай ажилд анхаарал хандуулах боломжтой болно.
Тестийг автоматжуулах нь тестлэх гэж байгаа кодыг бичихээс техникийн хувьд ч, менежментийн хувьд ч дутахгүй ажил учраас систем хөгжүүлэлтийн төслийн адилаар хүн хүч, нөөц шаардах ёстой аж. Тэстийг автоматжуулахад зайлшгүй шаардлагатай хүний нөөц бол тестийн скриптийг хөгжүүлэх туршлагатай програмчин, тестийг амжилттайгаар үргэлжлүүлэх сайн тестчиний орон тоо юм. Зөв арга барил сонгож, нөхцөл байдлаар хангаж чадвал тестийг автоматжуулснаар зөвхөн тестийн хувьд ч биш, бүхэл төслийн хувьд үр ашиг гаргаж, системийн чанарыг нэмэгдүүлэх боломжтой.
Хэрэглэсэн эх сурвалжууд:
- When Should a Test Be Automated? - Тэстээ автоматжуулах уу үгүй юу? Автоматжуулснаар олох ашиг их үү, алдах зүйл их үү? Автомат тест маань хир урт настай бол? Автомат тестэд орж байгаа код хир тогтвортой вэ? Хэрэв тестүүдээ автоматжуулахаар зэхэж байгаа бол энэ өгүүллийг уншиж үзээрэй.
- Four lessons for software testers (and their managers) - Тэстийн багт байх ёстой зан чанаруудын тухай-үргэлж шинийг эрэлхийлж, тэстлэж буй кодоо ухаж шинжиж, дэд хэсгүүдийг интерграц хийж, өөрчлөлтийг ухамсарладаг байх ёстой.
- Seven Steps to Test Automation Success - Тэстийг автоматжуулах ажлыг мөн л системийг хөгжүүлэх процессийн дагу хийхийн сацуу, онцлог шинж чанаруудыг тусгах хэрэгтэй тухай маш сайхан бичсэн. Эндээс санаа авах зүйл маш их байгаа.
- How Effective is Your Test Automation? - Автомат тэст үнэхээр тестлэх ёстой зүйлээ тэстлэж байгаа болов уу? Хүний оролцоогүй бүрэн автомат тэстэд яаж итгэх вэ? Тэстийн кодонд алдаа байвал яах вэ? Тестийг зөв хэрэгжүүлээгүй бол яах вэ? Гэх мэт автомат тестийн сэжигтэй цэгүүдийг авч үзсэн.
- Totally Data-Driven Automated Testing - Өгөгдлөөр жолоодогдох автомат тестийг хэрхэн хэрэгжүүлэх тухай, туршлагатай мэргэжилтний бичсэн өгүүлэл. Эндээс тэстийн төлөвлөгөөг хэрхэн автомат тэст болгох санааг олж авав.
Тэстийн талаарх бусад эх сурвалжууд:
- Software Testing Institute - Software Testing Publications - Тэстийн институтийн вэб дээрх тэстийн талаар хэвлэгдсэн номуудын жагсаалт. Номын жагсаалтаас гадна бусад мэдээлэл нь ч чухал.
- Automated Testing Specialists - Articles - Автомат тест болон тестийн талаарх өгүүллүүд.
- Maverick Software Consulting – Books - Програм хангамжын тэст болон тэстийн автоматжуулалтын тухай номын жагсаалт.
- Cem Kaner - Publications - Тэстийн мэргэжилтэн Cem Kaner-ийн материалууд.