Programmalıq támiynat qurılması hám evolyuciyası / 2_lekciya_PTQE
.pdf2-lekciya. Programmalıq támiynattı konstrukciyalawdıń tiykarları.
Jobası:
1.Konstrukciyalawdıń tiykarǵı koncepciyaları: Quramalılıqtı minimumǵa túsiriw.
2.Ózgerislerdi esapqa alıw hám keleshekti boljaw.
3.Konstrukciyalaw hám tekseriw (verifikaciya) processleriniń birligi.
4.Standartlar hám kod jazıw stili (Coding Conventions).
Konstrukciyalawdıń fundamenti hám quramalılıq máselesi
Programmalıq támiynattı konstrukciyalawdıń tiykarları (Software Construction Fundamentals) – bul kod jazıw procesiniń sapası hám ónimliligin belgileytuǵın eń áhmiyetli principler jıynaǵı. Bul tiykarlardıń eń birinshisi hám eń baslısı – "Quramalılıqtı minimumǵa túsiriw" (Minimizing Complexity). Steve McConnell óziniń "Code Complete" kitabında aytqanınday, programmalıq injeneriyanıń baslı maqseti – quramalılıqtı basqarıw. Adamnıń qısqa múddetli yadı sheklengen (bir waqıtta tek 7±2 obyektti saqlay aladı), sol sebepli programmist kodtıń barlıq detalların estep saqlay almaydı. Eger kod júdá quramalı bolsa, qátelerdiń (bugs) payda bolıwı sózsiz. Quramalılıqtı azaytıwdıń eń effektli jolı – bul kodtıń oqılıwın (readability) jaqsılaw hám onı logikalıq bóleklerge bóliw.
Konstrukciyalaw procesinde biz "KISS" (Keep It Simple, Stupid – Ápiwayı bolıwına umtıl) principine súyeniwimiz kerek. Yaǵnıy, eger máseleni sheshiwdiń eki jolı bolsa – quramalı hám ápiwayı – biz hár qashan ápiwayı jolın tańlawımız kerek. "Aqıllı" (clever) kod jazıw maqtanısh emes, kerisinshe, ol keleshekte mashqala deregi bolıp tabıladı. Jaqsı kod – bul onı jazǵan adamnan basqa adam da oqıp, ańsat túsine alatuǵın kod.
Quramalılıqtı minimumǵa túsiriwdiń jáne bir texnikalıq quralı – bul "Modullilik" (Modularity) hám "Kapsulyaciya" (Encapsulation). Biz úlken programmanı kishi, ǵárezsiz modullerge bólemiz. Hárbir modul tek ózine júklengen wazıypanı orınlaydı hám basqa modullerge óziniń ishki jumısın kórsetpeydi. Mısalı, avtomobil jaratqanda dvigatel injenerleri tek dvigatel menen shuǵıllanadı, olar dóńgeleklerdiń qalay isleytuǵının oylamaydı. Programmalastırıwda da sonday: bir funkciya yamasa klass tek bir jumıs ushın juwapker bolıwı kerek (Single Responsibility Principle).
Sonıń menen birge, quramalılıq "Kognitiv júkleme"ni (Cognitive Load) payda etedi. Programmist kodtı oqıǵanda, onıń miyinde usı kodtıń qalay isleytuǵını
haqqında model payda boladı. Eger kodta atamalar (ózgeriwshiler, funkciyalar) túsiniksiz bolsa, logika shiyelenisken bolsa (spagetti kod), miydiń resursları tez tawsıladı. Sol sebepli, konstrukciyalawdıń tiykarı – bul kodtıń "óz-ózin hújjetlewi" (self-documenting code). Yaǵnıy, kodtıń ózi kommentariysiz-aq ne islep atırǵanın aytıp turıwı kerek. int x = 5; degennen góre int daysInWeek = 7; dep jazıw kóbirek mánis beredi hám quramalılıqtı azaytadı.
Ózgerislerdi esapqa alıw hám keleshekke tayarlıq
Programmalıq támiynat – bul turaqlı emes, ózgeriwsheń sistema. Búgin qabıl etilgen talaplar erteń ózgeriwi múmkin. Konstrukciyalawdıń ekinshi tiykarı – "Ózgerislerdi kútiw" (Anticipating Change). Tájiriybesiz programmist kodtı "bir ret jazılıp, máńgi isleydi" dep oylaydı. Tájiriybeli injener bolsa, "bul kod erteń ózgeredi, sonıń ushın men onı ózgertiwge qolaylı etip jazıwım kerek" dep oylaydı. Bul principke "Iykemlilik" (Flexibility) yamasa "Keńeytiwsheńlik" (Extensibility) deymiz. Ózgerislerge tayın bolıwdıń bir usılı – bul maǵlıwmatlardı hám algoritmlerdi bir-birinen ajıratıw. Mısalı, eger siz salıq stavkasın kodtıń ishine 12% dep qattı (hardcode) jazıp qoysańız, nızam ózgergende barlıq kodtı aqtarıp shıǵıwǵa tuwrı keledi. Onıń ornına, bul mánisti konfiguraciya faylına yamasa konstantalar klassına shıǵarıw kerek. Sonday-aq, interfeysler hám abstrakt klasslardan paydalanıw, kodtıń bir bólegin ózgertkende, basqa bóleklerine tásir etpewdi (loose coupling – hálsiz baylanıs) támiyinleydi.
Degen menen, keleshekti boljawda "shekten shıǵıp ketpew" de zárúr. Programmalastırıwda "YAGNI" (You Aren't Gonna Need It – Bul saǵan kerek bolmaydı) degen princip bar. Baǵdarlamashılar geyde "bálkim keleshekte kerek bolar" dep, házirgi waqıtta kerek bolmaǵan quramalı funkcionallıqtı qosıwǵa háreket etedi. Bul artıqsha quramalılıqtı hám jumıstı payda etedi. Konstrukciyalawdıń óneri – bul búgingi kúnniń talapların sapalı orınlaw menen birge, keleshektegi ózgerislerge jol qaldırıw arasındaǵı teńsalmaqlılıqtı tabıw.
Ózgerislerdi basqarıwdıń eń áhmiyetli quralı – bul "Versiyalardı qadaǵalaw sistemaları" (VCS, mısalı Git). Konstrukciyalaw procesinde kodtıń hár bir ózgerisi tariyxqa jazılıp barılıwı kerek. Bul bizge qáte ketken jaǵdayda artqa qaytıwǵa (rollback), komanda bolıp islegende kodtıń konfliktlerin sheshiwge hám eksperimentler islewge (branching) imkaniyat beredi. Git sıyaqlı qurallardı bilmey turıp, zamanagóy programmalıq támiynattı konstrukciyalawdı elesletiw múmkin emes.
Konstrukciyalaw hám Tekseriw (Verifikaciya)
Kóp adamlar konstrukciyalawdı tek kod jazıw dep oylaydı, al testlewdi (tekseriwdi) bólek basqısh dep esaplaydı. Biraq konstrukciyalawdıń tiykarǵı principlerinen biri – "Konstrukciyalaw hám tekseriw – bul bir pútin process". Kod jazılıp atırǵan waqıtta onıń durıslıǵı tekserilip barılıwı kerek. Eger siz 1000 qatar kod jazıp, keyin onı testlep baslasańız, qátelerdi tabıw hám ońlaw júdá qıyın boladı. Eger hárbir kishi funkciyanı jazǵannan keyin tekserip barsańız, qátelerdiń aldın alasız. Bul principke "Birlik testlew" (Unit Testing) tiykarlanǵan. Birlik test – bul kodtıń eń kishi bólegin (funkciyanı yamasa klastı) avtomat túrde tekseriwshi kishi programma. Programmist ózi jazǵan kod ushın ózi test jazıwı kerek. Bul ámeliyat kodtıń sapasına eki tárepleme tásir etedi: birinshiden, ol qátelerdi tez tabadı; ekinshiden, ol programmistti kodtı testlewge qolaylı (testable) etip, yaǵnıy modulli hám ápiwayı etip jazıwǵa májbúrleydi. Testlenbeytuǵın kod – bul ádette sapasız kod.
Konstrukciyalawdaǵı tekseriwdiń jáne bir túri – bul "Kodqa sholıw" (Code Review). Bul processte bir programmisttiń jazǵan kodın basqa bir kásiplesi oqıp shıǵadı hám óz pikirlerin aytadı. Code Review tek qátelerdi tabıw ushın emes, al bilim almasıw hám kod standartların saqlaw ushın da oǵada paydalı. Adam faktorı sebepli, avzomat testler taba almaǵan logikalıq yamasa stilistikalıq qátelerdi basqa adam tez bayqawı múmkin. Bul "tórt kóz principi" dep te ataladı. Sonıń menen birge, "Statikalıq analiz" (Static Analysis) quralları da konstrukciyalawdıń ajıralmas bólegine aylanbaqta. Bul programmalar kodtı orınlamastan, onıń tekstin analizlep, potenciallı qátelerdi (mısalı, null pointer dereference, resource leaks) kórsetip beredi. Konstrukciyalawdıń tiykarı – bul adam intellekti menen avtomatlastırılǵan qurallardıń (Linter, SonarQube) birigiwi arqalı maksimal dárejede qátesiz kod jaratıwǵa umtılıw. "Sapa – bul tekseriwshi (tester) tárepinen emes, al jasawshı (developer) tárepinen kirgiziletuǵın qásiyet".
Standartlar hám Kod jazıw stili
Programmalıq támiynat – bul komanda jumısınıń nátiyjesi. Hátte siz jalǵız isleseńiz de, 6 aydan keyingi "siz" – bul basqa adam. Sol sebepli, konstrukciyalawdıń tórtinshi tiykarı – "Standartlarǵa ámel etiw" (Standards Compliance). Kod jazıw stili (Coding Conventions) – bul ózgeriwshilerdi ataw, qawsırmalardı qoyıw, sheginiwlerdi (indentation) qollanıw hám kommentariy jazıw boyınsha kelisilgen qaǵıydalar jıynaǵı. Mısalı, Java tilinde klass atları BasHárippenen (PascalCase), al metod atları kishiHárippenen (camelCase) baslanıwı kerek degen standart bar.
Standartlar kodtıń "Bir tegisligin" (Consistency) támiyinleydi. Eger proekttiń hár jerinde hár qıylı stil qollanılsa, kodtı oqıw qıyınlasadı. Jaqsı jazılǵan proektte kodtı kim jazǵanın ajıratıw qıyın bolıwı kerek – ol bir adamnıń qolınan shıqqanday bolıwı tiyis. Bul jańa qosılǵan programmistlerdiń proektke tez kirisiwine járdem beredi. Standartlar tek sırtqı kórinis (format) penen sheklenbeydi, olar arxitekturalıq sheshimlerdi hám proektlestiriw úlgilerin (Design Patterns) qollanıwdı da retlestiredi. Kodtıń stili menen birge, "Kommentariyler hám Hújjetlestiriw" de konstrukciyalawdıń standartlarına kiredi. Kommentariy kodtıń "ne" islep atırǵanın emes, "ne ushın" solay islep atırǵanın túsindiriwi kerek. "Ne" islep atırǵanı kodtıń ózinen de kórinip turadı (eger kod taza bolsa). Kóbinese "kodtı túsindiriwshi" kommentariyler – bul kodtıń jaman jazılǵanınıń belgisi (Code Smell). Hújjetlestiriw (mısalı, Javadoc) bolsa, kodtıń sırtqı interfeysin (API) paydalanıwshılarǵa túsindiriw ushın zárúr.
Zamanagóy konstrukciyalawda standartlardı tekseriw avtomatlastırılǵan. "Linter" hám "Formatter" (mısalı, Prettier, ESLint, Checkstyle) sıyaqlı qurallar kod jazıw procesinde-aq stil qátelerin kórsetip, olardı avtomat túrde dúzetedi. Bul programmistlerdiń mayda-shúyde tartıslarǵa (mısalı, qawsırmanı qaysı qatarǵa qoyıw kerek) waqıt jogaltpawına hám tiykarǵı mashqalalarǵa itibar qaratıwına imkaniyat beredi. Solay etip, standartlar – bul sheklew emes, al ónimlilikti arttırıwshı kelisimler.
BAQLAW SORAWLARÍ:
1.Programmalıq támiynattı konstrukciyalawda "Quramalılıqtı minimumǵa túsiriw" (Minimizing Complexity) ne ushın eń baslı princip bolıp esaplanadı?
2.KISS (Keep It Simple, Stupid) principiniń mánisi nede hám ol kod sapasına qalay tásir etedi?
3."YAGNI" (You Aren't Gonna Need It) principi konstrukciyalawda qanday qátelerdiń aldın alıwǵa járdem beredi?
4.Birlik testlew (Unit Testing) processiniń konstrukciyalaw menen integraciyalanıwı qanday ámeliy payda beredi?
5.Kod jazıw standartları (Coding Conventions) hám stillerdiń komanda jumısındaǵı áhmiyeti qanday?
