Хөгжүүлэлтэд юу зайлшгүй чухал вэ?

Саалиа бэлдэхээр
Саваа бэлд
—Зүйр үг

Улс орон, хот суурин хөгжихийн тулд зам тээвэр, холбоо харилцаа, ус, цахилгаан дулаан зэрэг дэд бүтэц байгаад, мөн дээр нь сайн хууль дүрэм зайлшгүй хэрэгтэй. Үүнтэй адилаар програм хангамжийг хөгжүүлэхэд ч өөрийн гэсэн дэд бүтэц болоод дүрэм журам чухал. Ингээд хөгжүүлэлтэд зайлшгүй хэрэгтэй зүйлсийг өөрийн бодож байдгаар тайлбарлахыг оролдьё.

Ажлын хуваарь буюу бодит байдал. Ямар ажлыг хэдийд, хэн хийх, хэдийд ямар ямар зүйл бэлэн байх ёстойг тодорхойлсон ажлын хуваарийг боловсруулах, явцыг хянах дэд бүтэц зайлшгүй. Энэ нь жирийн хүснэгт ч байж болно, тусгайлан хөгжүүлсэн систем ч байж болно эсвэл нээлттэй эх бүхий програм хангамж ч байж болно. Хэн ямар ажлийг хийж байгаа, ажил хир урагшилж байгааг бодитоор харж болдог л байх ёстой. Эндээс үзэхүл, эхний дүрэм бол төлөв байдлыг бодитоор хөтлөж явах ёстой гэсэн зарчим юм. Төлөв байдал гэдэг нь аль нэг ажлийн явц хэдэн хувь байгаа, эсвэл кодон дээр гарсан алдааны тоо, тэр нэг алдааны шийдэгдсэн болоод тэстлэгдсэн эсэх, кодын рилийзийн явц гэх зэрэг орно.

Кодын удирдлага түүхийг өгүүлнэ. Програмын кодын удирдлага гэдэг маань код дээр олон хөгжүүлэгчид зэрэг ажиллах нөхцлийг бүрдүүлэхийн зэрэгцээ, кодын үүх түүхийг хадгалж байдаг. Хэн нэгний бичсэн код алга болохгүй байх, алдаатай зүйл гарсан бол түүнийг буцааж өмнөх байдалд оруулах зэрэг нь эх кодын удирдлагын системийн үүрэг. Ийм зорилготой CVS, Subversion гэх мэт нээлттэй эх бүхий системүүд түгээмэл хэрэглэгддэг. Кодын удирдлагын системийг зөвхөн эх кодыг хадгалахад бус, тохиргооны файл, төрөл бүрийн скрипт, тэкстэн өгөгдөл гээд бүх л төрлийн текстэн эхүүдийг удирдахад хэрэглэх зориулалттай. Яагаад зүгээр код биш эх код гэдэг гэхээр, ажиллах програмыг шууд бинари байдлаар хийчихдэггүй, тэкст хэлбэрээр эх кодыг бичиж байж түүнээсээ ажиллах програмыг компайлдан гаргаж авдаг. Програмыг өөрчлөх болвол бинари програмыг өөрчлөхгүй, эх кодыг өөрчилнө. Код бол хамгийн анхны програмчин хүний гараас гарч байгаа бүтээгдэхүүн учраас эх гэсэн тодотголыг авдаг. Эх кодоос модуль үүсгэнэ, багцуудыг гаргаж бүрдүүлнэ, бинари програм компайлдана - код бол тэдгээрийн эх үүсгэвэр нь юм. Эх код нь текст хэлбэртэй учраас кодын удирдлагын системүүд текст файлыг хамгийн оновчтойгоор зохицуулан хөтлөж чадна. Тухайлбал кодын дараагийн хувилбар дээр ямар мөрүүд нэмэгдэж ямар мөрүүд хасагдав, юу өөрчлөгдөв гэдгийг бүртгэхэд зөвхөн өөрчлөгдсөн хэсгүүдийг л нэмж хадгална гэсэн үг. Харин бинари файл бол тэгж аль хэсэгт нь өөрчлөлт орсныг тэмдэглэхэд төвөгтэй. Ийм учраас эх кодын удирдлагын систем дээр бинари файл хадгалах нь тохиромжгүй байдгийг анхаарууштай. Түүний оронд бинари файлуудыг файл сэрвэр дээр хадгалж, рилийзүүдээр зохицуулах нь оновчтой.

Алдааны хяналт буюу сургамж. Код дээр гарсан алдаа болоод, тулгарч байгаа асуудлуудыг ямар нэгэн зохион байгуулалттайгаар бүртгэн хянах зайлшгүй шаардлагатай. Алдаа сэв хэрхэн илэрсэн, алдаа шийдэгдсэн эсэх, хэн түүнийг хариуцаж засварлах, яаж засварлах, засвар хийгдсэн бол дахин нягталж шалгасан эсэх гээд алдааг анх олохоос эхлээд засварлагдаж дуусталх шат дамжлагууд хамрагдаж байхийм. Алдааг хянаснаар ямар нэгэн сэв согог засагдалгүй үлдэх, эзэнгүйдэх, удаашрах зэргээс сэргийлэхээс гадна, өнгөрсөн алдаан дээрээсээ суралцаж дахин давтахгүй байж, өөрийгөө шинжихэд чухал үүрэгтэй. Иймд ямар нэгэн алдаа, асуудал илэрсэн тохиолдолд тухайн алдааг засаж байж дараагийн кодоо бичиж эхлэснаар тухайн төрлийн алдааг дахин давтахгүй байх юм. Мөн ингэхийн бас нэг давуу нь, тухайн алдаатай хэсгээс улбаалаад бусад дагавар алдаанууд гарч болно, эсвэл тухайн асуудал шийдэгдсэнээр өөр бусад асуудлууд шийдэгдэж болно. Ер нь алдаа сэвүүдийг харж байхад, хоорондоо холбоотой байх нь элбэг шүү дээ.

Тестийн баг буюу сүүлийн тэмээ. Тестийг хийнэ гэдэг програмыг бичихээс дутуугүй мэдлэг чадвар, туршлага шаардах ажил. Програмыг шинэков бичиж чадна, тестийг бол чадахгүй, хийсэн ч алдаа олох магадлал бага. Ямар ч алдаа агуулж болох програмыг тестлэж, гажиг сэвийг олж тодруулна гэдэг ихээхэн мэдлэг чадвар шаарддаг юм. Ингэхээр тестийг мэргэшсэн баг хийх ёстой бөгөөд, програмын чанарын баталгааг тестийн баг баталгаажуулдгаараа чухал үүрэгтэй. Тестийн багийг тусгайлан байгуулж, бэлдэх, дасгалжуулах, мэргэшүүлэх хэрэгтэй. Сүүлийн тэмээний ачаа хүнд.

Багажийн дархад буюу автоматжуулагчид. Монгол дархчууд удам залгах хүндээ дархны багажаа л өвлүүлдэг байж, ур ухааныг ажлаа хийж байхад хажуугаас нь хараад, ажиглаад, сонирхсон юмаа асуугаад, өөрийн авьяасаар бий болгодог байжээ. Дараагийн хүн өвлөж авсан багажыг өөрөө сэлбэж засах ба өөрийн хийх зүйл, урлалд таарч тохирох багажийг нэмж хийсээр дараагийн үед багажны төрөл нэмэгдээд очдог юмсанж. Ингэхээр дархан хүний бүтээлийн хийц нь ур ухаанаас гадна, хэрэглэж байгаа багажаас нь хамааралтай бөгөөд, сайн багажтай, таарч тохирсон багажыг хийж чаддаг дархан сайн юм хийх нь мэдээж. Хөгжүүлэлтийн баг ч, тестийн баг ч, ер нь бусад бүх багуудын хувьд түүлшмит буюу багажийн дархан нь дээрхтэй адилаар хөдөлмөрийн бүтээмж, чанарт шууд нөлөөлнө. Багажийн дархны үүрэг бол багийн гишүүдийг хэрэгтэй багажаар нь хангаж өгөх юм. Хөдөлмөрийг хөнгөвчлөж чадах, хэрэглэхэд хялбар багаж дархалж автоматжуулахаас гадна шинэ технологи судалж, эрэл хайгуул хийж бусдадаа танилцуулж байх учиртай. Хөгжүүлэлтийн багийн түүлшмит автомат код үүсгэгч, төрөл бүрийн хөрвүүлэгч хийж байхад, тэстийн багийн түүлшмит автомат тестийн скриптүүд, симуляторууд хийж суух жишээтэй. Багуудын түүлшмитүүд хоорондоо уялдаа холбоотой байснаар хөгжүүлэлтэд ч, тэстэд ч хэрэглэгдэх багаж хийх болно. Гэхдээ мэдээж юм бүхнийг багажаар, автоматаар хийх гэх нь утгагүй юм. Багаж бол гарын аясаар хөдөлж, санасан бүхнээ хэрэгжүүлэхэд туслах л үүрэгтэй. Жишээ нь бүрэн автомат тэст байх юм бол, тэр тэстийг үнэхээр зөв гэдэгт яаж үнэмших билээ?

Шуурхай байгуулалт. Байгуулалт(build) гэдэг маань эх кодоос програмыг гаргаж авахыг хэлж байна. Байгуулалт хийхэд ant, make гэх мэт хэрэгслүүдийг түгээмэл ашигладаг. Нэг командаар бүх кодыг компайлдаад ажиллах орчинг бүрдүүлж, тохиргооны файлуудыг хуулаад, цааш бүрэн ажиллах програмыг суулгахад юу хийгдэх ёстой тэр бүгдийг хийчихдэг байхаар байгуулалтын скриптыг хийх ёстой юм. Автоматаар өдөр болгон, эсвэл цаг тутам, эсвэл кодонд өөрчлөлт оруулах бүртээ байгуулалтыг цаг алдаж, зүтгэл гаргалгүйгаар хийдэг, байгуулалтын үед гарсан алдааны мэдээлэл автоматаар илгээгддэг байвал сая байгуулалт гэж үйлдлийг зүй ёсоор хэрэгжүүлж байгаа нь тэр. Ганц архивласан файл юмуу, нэг директори хуулаад л нэг команд ажиллуулахад орчиний тохиргооноос авахуулаад бүх зүйлс бэлэн болж програм ажиллах хэмжээнд байгуулалт хийгдэх ёстой.

Цор ганц, бүгдэд ойлгомжтой спек. Хийх зүйлийн үзүүлэлт, үүрэг функц, орчин нөхцөлийн тодорхойлолт, хэн хэрэглэх, хэрхэн хэрэглэгдэх, техникийн нөхцөлүүд, хурд хүчний шаардлагууд гээд бүх мэдээллийг боломжын хирээр сайн цуглуулж бүх хөгжүүлэгчид олж үзэх боломжтой ил байрлуулах хэрэгтэй. Спек дээр ялимгүй өөрчлөлт орох бүрт баримтыг шинэчлээд, нийтэд мэдэгдэж байх дүрэмтэй. Ямаршуу зүйл хийх гээд байгаа нь хүн бүрт тодорхой байх ёстой юм. Ямаршуухан ч биш, бүр яг тодорхой байх ёстой. Ингэснээр бүгд ижил ойлголттой байж чадна. Өөр ойлголттой хүмүүс нэг нь ус руу зүтгээд, нэг нь тэнгэр лүү дүүлээд, нэг нь газраар гүйх гээд байдаг 3-н амьтан шиг үр дүн гаргахгүй хүчээ тарамддаг үлгэртэй. Спек зарим газраа тэр дороо мэдэгдэхгүй явцын дунд тодорхой болж болох ч, тэдгээр зүйлсийн одоохондоо тодорхой бус гэдэг нь тодорхой мэдэгдэж байх, хэзээ тодорхой болох нь мөн тодорхой хязгаартай байвал сайн. Мэдээжийн гээд аливаа зүйлийг алгасч болохгүй. Тэдгээр мэдээжийн юмс л тодорхой бус зүйл болж үлддэг.

Рилийзийн удирдлага, төлөвлөлт. Програмаа рилийз болгож гаргах төрөл бүрийн аргууд байдаг. Альфа, Бета, Пре гэх мэтчилэн шатуудыг дамжсаны эцэст жинхэнэ тогтвортой рилийзийг гаргах нь ерөнхийдөө түгээмэл. Рилийз гаргах цикл, дүрэм журам нь тухайн програм хангамжын чанарт ихээхэн нөлөөтэй байдаг. Иймд сайн програмыг тогтвортой хөгжүүлэхийн тулд оновчтой рилийзийн цикл сонгож, дүрэм журам тогтоож хатуу баримтлах хэрэгтэй. Тухайлбал, шинэ шинж чанаруудыг зөвхөн альфа рилийзэд, вета рилийзэд зөвхөн алдааны засваруудыг гэх мэт байж болно. Ер нь рилийз гэдэг нь хэдийд ямар шинж чанарууд болон сайжруулалтуудыг нэмж оруулах, хэдийд алдаанууд засагдаж дууссан байхыг зохицуулж байх ёстой. Рилийзтэй хамт зайлшгүй дагалдах ёстой зүйл бол өөрчлөлтийг лог(change log), болон рилийзийн тайлбар(release notes) болно.

Ингээд миний хувьд програм хангамжын хөгжүүлэлтэд зайлшгүй шаардлагатай зүйлс гэвэл, хүний нөөцөөс бусад нь ийм байна. Та бүхэн өөрсдийн санаа болон, нэмэлтийг ирүүлбэл маш их хэрэг болно гэдгийг хэлье.

Энэ нь тусдаа зүйл гэлээ ч, эцэст нь дурдахгүй өнгөрч чадахгүй нэг юм бол, мэдээж, гар нийлж нэгэн баг болж ажиллах авияаслаг програмчид, мундаг админууд, чадварлаг архитектурчид, овсгоотой менежерүүд чухлаас гадна тэднийг хүч сэлбэх, удмыг залгах хүсэл эрмэлзэл, эрч хүч дүүрэн шинэ залуучууд, тэднийг сургах, хөгжүүлэх, өөдлөн дэвшүүлэх, мэдлэг чадварыг чөлөөтэй нэвтрэлцүүлэх таатай орчин юунаас ч чухал билээ.