Ерөнхий
ойлголт
Программ
хангамж хөгжүүлэх олон янзын арга байдаг. Тэдний нэг болох
Extreme
Programming (XP*)-д Test Driven Development (TDD*) гэдэг ойлголт буй. Энэ удаад
TDD-н талаар товч тайлбарлая. Дашрамд нь XP-н бас нэг чухал ойлголт болох Refactoring*-н
талаар цухас дурдах болно.
TDD-г үгчилэн орчуулбал Тест
удирдлагат хөгжүүлэлт юм. Программын кодыг бичихээс өмнө тест код бичсэнээр чанартай
(test coverage: тест хамралт ихтэй) сайн программын код гаргаж авах боломжтой.
Үүнээс гадна код энгийн хялбар болох, тестлэхэд хэцүү код бичих боломжийг
хаадаг. Кодлож эхлэхээс өмнө тест код
бичсэнээр шийдэх ёстой асуудал, зорилгоо зөв тодорхойлж, яг хэрэгцээтэй зүйлд
анхаарал төвлөрөх сайн талтай юм. Энэ нь эхлээд зохиомжлоод дараа нь кодлож
байгаагаас өөрцгүй юм. Иймээс TDD = Design Driven Development гэж ярьдаг.
За, илүү тодорхой бичье. TDD нь
дараах дүрмийг мөрдлөг болгодог.
1. Тест код бичих.
2. Тест кодыг ажиллуулах.
3. Тест амжилтгүй болох, эсвэл
алгоритмыг өөрчлөх хэрэгтэй бол
үндсэн кодыг бичих буюу засаад 2-р алхамыг давтах.
4. Тест амжилттай байгаад
нэмэлт тест хийх (шинэ функц нэмэх) шаардлагатай
бол 1-р алхамыг давтах
5. Нэмэлт тест хийх
шаардлагагүй бол кодлох ажиллагаа дуусна.
Бодит жишээ
Одоо бодитоор хийж үзээд, дээр бичсэн үнэн эсэхийг
шалгацгаая. Жишээлбэл арифметик үйлдэл хийдэг Calculator gedeg class бичих
шаардлага гарчээ гэж бодьё.
1. TDD-н зарчим ёсоор эхлээд
тест код бичих ёстой. Эхлээд нэмэх үйлдэл хийдэг функц-г тестлэнэ гэвэл тест
код иймэрхүү болно.
2. Дараа нь тест кодыг ажиллуулах ёстой. Мэдээж Calculator
гэдэг классыг үүсгээгүй байгаа тул алдаа гарна. Иймээс Calculator class-г үүгэе.
3. Дахиад тест кодоо ажиллуулъя. Энэ удаад add function-г
кодлоогүй байгаа тул алдаа гарлаа.
4. 13-р мөрнөөс харвал дээр 1, 1 гэсэн утга дамжуулахад 2
гэсэн утга буцаах ёстой. Хялбар бөгөөд туйлын тэнэг код бичээд үзье (Үүнийг fake:
[хуурах, зальдах, оромдох] хийх гэдэг). Хэр хол явах нь уу?
5. За ажиллуулаад үзье. Болчихлоо.
6. За байз. Баярлахад арай л эрт байна. Дамжуулах утгыг
өөрчлөөд нэг үзье.
7. За, тэр хэлээгүй юу?. Программаа засах хэрэгтэй.
8. Энэ удаа яах бол? ОК, болчлоо.
9. За байз, шалгаагүй үлдсэн
тохиолдол юу билээ? Аан тийм. Сөрөг эсвэл бутархай утга дамжуулбал яах ёстойг шалгах
хэрэгтэй юм байна. Эхлээд сөрөг утга дамжуулж үзье. Үүний тулд шинэ test case нэмж
бичих хэрэгтэй. Одоо байгаа функцын нэрийг бас өөрчлөх хэрэгтэй юм шүү. За, ийм
болгочихлоо.
10. Бутархай байвал яах бол? Тест
давсангүй.
11. Ингээд засчихлаа.
12. Aa, test code-oo засахгүй бол. Calculator#add-н параметрийн
төрлийг int-с double болгож өөрчилсан тул шалгах аргаа өөрчлөх ётой байжээ!
13. Одоо зөв ажиллах ёстой доо.
14. За ингээд нэмэх үйлдэл хийж чаддаг боллоо. Одоо хасах
үйлдэл хийдэг функц нэмж үзье. Тест код дараах маягтай болно.
15. Calculation class-d subtract function-г нэмбэл:
*XP: Юу гэж
орчуулмаар юм бэ дээ? Туйлширсан программчлал: Туйлд нь хүртэл программчлах
*TDD: Тест удирдлагат хөгжүүлэлт, Test First
Development гэж хэлэх нь ч бий.
*Refactoring: Программын
ажиллагаа (гадаад шинж чанар)-г өөрчлөлгүйгээр кодыг энгийн хялбар болгох, алгоритмыг
засаж сайжруулах, дотоод бүтцийг өөрчлөх
Дүгнэлт
Энэ мэтчилэнгээр программд өөрчлөлтийг бага багаар хийн,
тухай бүрд тестлэн батлагаажуулж, алхам алхамаар сайжруулах аргыг TDD гээд
байгаа юм. Үлдсэн үржих хуваах үйлдлийг танд даатгаад орхилоо.
Уг арга нь энгийнээс нарийн төвөгтэй рүү аажмаар шилжих
болохоор хэмнэл алдахгүй хөгжүүлэлт хийх боломжтой. Кодлох, тестлэх үе шатыг
нийлүүлсэнээр зохиомж код хоёрын хооронд зөрүү гарахгүй, илүү үр бүтээлтэй
ажиллаж чадна.
TDD-г хэрэгжүүлсэнээр:
- Эрүүл, цэгцтэй сэтгэх боломжоор хангагдна.
- Тестлэх кодлох ажиллагаа зэрэг дуусна. Гайхамшигтай бус уу?
- Бүтээмж өндөр болно.
- Алхам алхамаар программыг зүгшрүүлж сайжруулах (incremental development) тул урам зориг их өгдөг. Нэг дор хийсэн олон өөрчлөлтийн чухам алинаас болж программ доголдчихов, юу нь болохоо байчихав гэсэн асуудал, стрессээс бүрэн ангижирдаг.
- Программын өөрчлөлт бүр тестлэгддэг тул чанар сайтай бүтээгдэхүүн гарах үндэс болдог.
- Нэг дор олон өөрчөлт хийхгүй учир программын хаана болохгүй байгааг дор нь олох боломжтой. Мөн хугацаа алддаггүй сайн талтай.
- Ялангуяа сайн мэдэхгүй программчлалын хэл, script хэл ашиглах үед энэ арга маш үр дүнтэй.
- Код бичих нь зугаатай ажил болж хувирдаг.
Кодлох, тестлэх
ажиллагааг салгаж тусад нь хийх (уламжлалт арга) нь өөр цаг хугацаанд хийж буй
тул хэмнэл (rhythm) алдагдах, программын зарим хэсэг тестлэгдэлгүй үлдэх
магадлал TDD-тэй харьцуулбал өндөр.
За, ингээд үүгээр өндөрлөе дөө. Миний мэддэг TDD ч дууслаа.
2013.10.9
Сарту овгийн
Рэнцэнгийн Батзоригт
mash ih bayarlalaa :D
返信削除