Programmalıq támiynat qurılması hám evolyuciyası / 15-16_lekciya_PTQE
.pdf15-lekciya. Programmalardı konstrukciyalawdıń ámeliy tárepleri.
Jobası:
1.Kod jazıwdıń kúnlik ámeliyatı: IDE hám ónimlilik quralları.
2.Defensiv (Qorǵanıwshı) programmalastırıw texnikaları.
3.Refactoring ámeliyatı: Kodtıń "iyisin" (Code Smells) joytıw.
4.Kodtı optimallastırıw: Waqıt hám sapa teńsalmaqlılıǵı.
Kodlaw ortalıǵı hám ónimlilik
Programmalardı konstrukciyalawdıń ámeliy tárepleri (Practical Aspects of Construction) – bul teoriyalıq bilimlerdiń haqıyqıy kod jazıw procesinde qollanılıwı. Bul jerde injenerdiń "jumıs stolı" bolǵan "Integraciyalasqan islep shıǵıw ortalıǵı" (IDE - Integrated Development Environment) tiykarǵı rol oynaydı. Zamanagóy IDE-lar (Visual Studio, IntelliJ IDEA, Eclipse) ápiwayı tekst redaktorları emes, olar programmistke kod jazıwda, qátelerdi tabıwda hám ońlawda járdem beretuǵın intellektuallıq járdemshiler. IDE kodtı avtomat túrde toltırıw (autocomplete), sintaksislik qátelerdi sol waqıtta kórsetiw (highlighting) hám kodtı tez navigaciya etiw imkaniyatların beredi.
IDE-niń imkaniyatların tolıq paydalanıw ónimlilikti bir neshe ese arttıradı. Mısalı, "Refactoring tools" (Qayta qurıw quralları) arqalı bir ózgeriwshiniń atın pútin proekt boyınsha bir sekundta ózgertiwge boladı. Eger bunı qol menen isleseńiz, saatlar ketedi hám qáte jiberiw itimalı joqarı boladı. "Debugger" (Ońlawshı) quralı arqalı kodtı qatarma-qatar orınlap, ózgeriwshilerdiń mánisin tekseriw múmkin. Print ("Hello") dep jazıp tekseriw
– bul háweskerlik, al breakpoint qoyıp tekseriw – bul professional kónlikpe. Ámeliyatta "Qısqa jol túymeleri"n (Hotkeys) biliw de júdá áhmiyetli. Tıshqansha menen menyu ishinen komanda izlew waqıttı aladı hám oylaw aǵımın (flow) buzadı. Klaviatura arqalı tez háreketleniw, kodtı formatlaw, testlerdi iske túsiriw – bular "Muscle memory" (bulshıq et yadı) dárejesine jetiwi kerek. Jaqsı programmist óz quralın (IDE) bes barmaǵınday biliwi shárt.
Konstrukciyalawda "Kodtıń jaylasıwı" (Layout and Style) da ámeliy áhmiyetke iye. Kodtıń vizuallıq kórinisi onıń oqılıwına tikkeley tásir etedi. Bos orınlar (whitespace), sheginiwler (indentation) hám qawsırmalardıń jaylasıwı kodtıń strukturasın kórsetedi. Ámeliyatta komandalar "Linter" (avtomat stil tekseriwshi) hám "Formatter" (avtomat formatlawshı) quralların qollanadı
(mısalı, Prettier, Clang-Format). Bul programmistlerdi stilistikalıq tartıslardan azat etip, tiykarǵı logikaǵa itibar qaratıwǵa imkaniyat beredi.
Defensiv (Qorǵanıwshı) programmalastırıw
Ámeliy konstrukciyalawdıń eń zárúr texnikası – bul "Qorǵanıwshı programmalastırıw" (Defensive Programming). Bul usıldıń mánisi: "Kodtı sonday etip jazıń, ol kútilmegen jaǵdaylarda da sınbaydı". Dúnyada "ideal" paydalanıwshılar hám "ideal" maǵlıwmatlar joq. Paydalanıwshı san ornına hárip kirgizedi, fayl joq bolıp shıǵadı, internet úziledi. Qorǵanıwshı kod usı jaǵdaylardıń bárine tayın bolıwı kerek.
Qorǵanıwshı programmalastırıwdıń birinshi qaǵıydası – "Kirisiw maǵlıwmatların tekseriw" (Input Validation). Funkciyaǵa kelgen hárbir parametrdi "qáwipli" dep esaplaw kerek. Eger funkciya oń sandı qabıllawı kerek bolsa, birinshi qatarda if (x < 0) throw Exception; dep tekseriw kerek.
"Garbage In, Garbage Out" (Qoqım kirse, qoqım shıǵadı) principine jol qoymaw kerek. "Garbage In, Error Out" (Qoqım kirse, qáte shıǵadı) bolıwı tiyis.
Ekinshi qural – "Assertions" (Tastıyıqlawlar). Assert – bul kodtıń ishinde "bul jaǵday bárqulla haqıyqat bolıwı kerek" dep jazılatuǵın tekseriw. Mısalı, assert(age >= 0). Assertions tiykarınan islep shıǵıw hám testlew waqtında qollanıladı. Eger assert qatesi shıqsa, bul programmadaǵı logikalıq qáteni (bug) bildiredi. Assertions kodtıń "dokumentaciyası" wazıypasın da atqaradı – ol kodtı oqıǵan adamǵa programmisttiń neni kútkenin kórsetedi.
Úshinshi qural – "Ayrıqsha jaǵdaylardı basqarıw" (Exception Handling). Qáte shıqqanda programmanıń "qulap túspewin" (crash) támiyinlew kerek. trycatch blokları arqalı qáwipli kodtı qorshap, qáte bolǵan jaǵdayda alternativ joldı (mısalı, qáteni logqa jazıw, paydalanıwshıǵa xabar beriw) tańlaw kerek. Biraq "bos catch" (empty catch block) qollanıw jaman ámeliyat – bul qáteni "jutıp jiberedi" hám onıń sebebin tabıwdı qıyınlastıradı.
Refactoring: Kodtıń "iyisin" joytıw
Kod jazıw – bul bir retlik process emes. Dáslepki jazılǵan kod kóbinese "jumıs isleytuǵın", biraq "jaman" kod boladı. "Refactoring" (Qayta qurıw) – bul kodtıń sırtqı minez-qulqın ózgertpesten, onıń ishki strukturasın jaqsılaw procesi. Refactoring ámeliyatta kodtıń "tazalıǵın" saqlaw ushın turaqlı (hár kúni) orınlanıwı kerek.
Martin Fauler óz kitabında kodtıń sapasız ekenin bildiretuǵın belgilerdi "Code Smells" (Kod iyisleri) dep ataydı. Mısalı:
"Uzın metod" (Long Method): Eger funkciya bir ekrannan asıp ketse, onı bóliw kerek.
"Úlken klass" (Large Class): Klass júdá kóp wazıypanı atqarsa (God Object), onı bóliw kerek.
"Qaytalanǵan kod" (Duplicated Code): Birdey kod eki jerde bolsa, onı ulıwma funkciyaǵa shıǵarıw kerek (Extract Method).
"Uzın parametrler dizimi" (Long Parameter List): Funkciyaǵa 5-6 parametr berilse, olardı bir obyektke biriktiriw kerek
(Introduce Parameter Object).
Refactoring qáwipli bolıwı múmkin, sebebi islep turǵan kodtı ózgertiw qáte kirgiziwi múmkin. Sol sebepli, ámeliyatta refactoring tek "Birlik testler" (Unit Tests) bar bolǵanda ǵana islenedi. Testler qorǵanıw torı wazıypasın atqaradı. Siz kodtı ózgertesiz, testti iske túsiresiz – eger test "jasıl" bolsa, refactoring tabıslı boldı. Testlersiz refactoring – bul kózdi jumıp júriw menen teń.
Optimallastırıw hám teńsalmaqlılıq
Konstrukciyalawdıń aqırǵı ámeliy tárepi – "Optimallastırıw" (Optimization). Baǵdarlamashılar kóbinese kodtıń tez islewin qálep, onı quramalastırıp jiberedi. Biraq Donald Knut aytqanınday: "Mawsimsiz optimallastırıw – barlıq jamanlıqtıń tamırı" (Premature optimization is the root of all evil). Ámeliyatta dáslep "durıs" kod jazıw kerek, keyin "tez" kod jazıw kerek. Optimallastırıwdı baslawdan aldın "Ólshew" (Profiling) kerek. Kóbinese programmist kodtıń 1% bólegin optimallastırıwǵa waqıt ketiredi, al haqıyqıy tormoz basqa jerde boladı. Profiler quralları (mısalı, VisualVM, Valgrind) programmanıń qaysı funkciyası eń kóp waqıt hám yad jep atırǵanın anıq kórsetedi. Tek sol "tar jerlerdi" (bottlenecks) optimallastırıw kerek.
Optimallastırıw kóbinese "Waqıt hám Yad" (Time-Space Tradeoff) arasındaǵı tańlaw boladı. Biz programmanı tezletiw ushın kóbirek yad (kesh) qollanıwımız múmkin, yamasa yadtı únemlew ushın kóbirek esaplaw júrgiziwimiz múmkin. Ámeliyatta "Pareto qaǵıydası" (80/20) isleydi: kodtıń 20% i waqıttıń 80% in aladı. Sol 20% ti tabıw – injenerdiń wazıypası.
Geyde optimallastırıw kodtıń oqılıwın qıyınlastıradı (mısalı, bitli operaciyalar, assembler qosıw). Bunday jaǵdayda "Sapa hám Ónimlilik" arasında kompromiss tabıw kerek. Eger ónimlilik kritik bolmasa (mısalı,
paydalanıwshı interfeysinde), kodtıń oqılıwı hám ońlanıwı birinshi orında turıwı tiyis. "Tez, biraq qáte isleytuǵın programma heshkimge kerek emes".
Juwmaqlap aytqanda, konstrukciyalawdıń ámeliy tárepleri – bul kásiplik sheberliktiń kórsetkishi. IDE-ni biliw, qorǵanıwshı kod jazıw, kodtıń “iyisin” seziw hám aqıl menen optimallastırıw – bular jaqsı injenerdi ortasha koderden ajıratıp turatuǵın qásiyetler. Bul kónlikpeler tek tájiriybe hám turaqlı óz-ózin jetilistiriw arqalı keledi.
BAQLAW SORAWLARÍ:
1.IDE-niń (Integraciyalasqan islep shıǵıw ortalıǵı) kod jazıw ónimliligine tásiri qanday?
2."Qorǵanıwshı programmalastırıw" (Defensive Programming) degende neni túsinesiz hám onıń tiykarǵı quralı qanday?
3."Garbage In, Garbage Out" hám "Garbage In, Error Out" principleriniń ayırmashılıǵı nede?
4.Refactoring processiniń tiykarǵı shárti ne hám ol ne ushın testlerge súyenedi?
5."Máwsimsiz optimallastırıw" (Premature Optimization) ne ushın zıyanlı dep esaplanadı?
