Rekomendācijas programmētāju kvalifikācijas darbiem

14.06.2009

Šajā nedēļā piedalījos Latvijas Universitātes Datorikas fakultātes programmētāju kvalifikācijas darbu vērtēšanas komisijā – gan recenzēju daudzus darbus, gan arī klausījos un vērtēju klātienē vēl vairāk darbus. Kā jau katru gadu man nepatika vairākas tendences, kas bija sastopamas daudzos darbos, tādēļ gribēju šeit izkratīt sirdi un padalīties ar rekomendācijām, kā vajadzētu labāk rakstīt šos darbus, lai saņemtu labu vērtējumu no manis kā potenciālā vērtētāja 🙂

Strādājošs, kvalitatīvs un uzturams programmatūras kods ir primārais mērķis

Kā vienu no pirmajām lietām gribēju uzsvērt šo Agile principu, jo programmēšanas kvalifikācijas darbos galvenais mērķis ir parādīt, ka autors spēj radīt kvalitatīvu programmatūru. Tādēļ:

  • Strukturējiet programmatūru saprotamos funkcionālajos moduļos.
  • Sadaliet katru moduli nelielās funkcijās vai metodēs – nekādā ziņā viena funkcija vai metode nedrīkst būt pa daudzām lappusēm. Jo tās būs īsākas un saprotamākas, jo labāk.
  • Komentāros rakstiet, kāpēc jūs kaut ko dariet, nevis vēlreiz atkārtojiet to, kas redzams kodā.
  • Sadaliet biznesa loģiku un attēlošanas loģiku dažādos moduļos (sliktākie piemēri bija, kad vienā failā ir gan PHP, gan SQL, gan HTML, gan Javascript kods sajaukts vienā lielā putrā).
  • DRY (Don’t Repeat Yourself) princips – ja kāds kods bieži tiek ar copy-paste dublēts, tad tas nozīmēt, ka šo loģiku vajag izdalīt kādā kopējā funkcijā vai metodē, lai izvairītos no koda dublēšanas.

Vienkārša, saprotama un vajadzīga dokumentācija

Daudzos darbos sliktu kodu centās kompensēt ar lieliem dokumentācijas blāķiem, kas manā vērtējumā darbu var tikai pasliktināt.

  • Labāk dokumentāciju rakstiet īsāku un saprotamāku, nevis garu un nesaprotamu.
  • Izvairieties no triviālu lietu skaidrošanas un liekvārdības, bet neaizmirstiet paskaidrot lietas, kas ir specifiskas jūsu darbam.
  • Arī dokumentācijai ir jābūt DRY – nekopējiet vienus un tos pašus aprakstus uz dažādām dokumentācijas vietām.
  • Nemāniet lasītāju, ka vispirms uzrakstījāt visu prasību specifikāciju dokumentu, pēc tam projektējuma aprakstu un tikai tad kodējāt. Ūdenskrituma metode nav vienīgā pieeja – tā ir novecojusi un mūsdienās parasti nepiemērota pieeja. Droši izmantojiet un aprakstiet iteratīvās / inkrementālās / spējās izstrādes pieejas, ja tas ir patiesais veids, kā esat veidojuši savu darbu.

Testējiet ar kodu nevis ar dokumentāciju

Daudziem liekas, ka labākais veids, kā pārliecināt lasītāju, ka viņi ir dikti labi testējuši, ir saproducēt lielu testēšanas dokumentāciju. Bet, manuprāt, liela un sarežģīta testēšanas dokumentācija apliecina tikai to, ka šie testi netika bieži izpildīti.

  • Ļoti rekomendēju apgūt jūsu izvēlētās programmēšanas valodas atbilstošo automatīzēto vienībtestēšanas ietvaru. Automatizēti un regulāri izpildīti vienībtesti vienmēr būs labāki nekā gari un manuāli izpildāmi testi.
  • Primāri testējiet jūsu darba svarīgāko un potenciāli riskantāko funkcionalitāti, nevis rakstiet daudzus vienkāršus (piemēram, lauku obligātuma pārbaudes) testus.

Drošība

  • “Paroļu šifrēšana” nav vienīgā drošības problēma un/vai prasība.
  • Ja jūsu programmā ir dažādi lietotāji ar dažādām tiesībām, tad pieejas tiesības ir vienas no primārajām drošības prasībām, kas arī ir jātestē.
  • Pirms veidojiet “web” bāzētu sistēmu, iepazīstieties ar biežākajām drošības problēmām “web” bāzētajās sistēmās – sāciet ar SQL injekcijas problēmām.

Konfigurāciju pārvaldība

  • Mūsdienās veikt programmatūras koda pārvaldību tikai ar failu rezerves kopēšanas palīdzību profesionālam programmētājam vairs nebūtu pieļaujams.
  • Apgūstiet un lietojiet atbilstošus versiju kontroles rīkus, piemēram, Subversion, Git vai citus. Versiju kontroles rīki ir vieni no programmētāju pamatrīkiem.

Darbietilpības novērtēšana

  • Darbietilpības novērtēšana ir paredzēta, lai prognozētu potenciālo darbietilpību pirms jūs esat sākuši programmēt sistēmu. Darbietilpības novērtēšana nav paredzēta, lai pamatotu komisijai, ka jūs tiešām esat veltījuši 3 mēnešus darba izstrādei.
  • Neizmantojiet sarežģītas COCOMO novērtēšanas metodes, ja jums nav skaidrs, ko tās prognozē un ja jums rezultāti sanāk pavisam savādāki nekā faktiski patērētais darbs. Un netaisnojieties ar to, ka “COCOMO paredzēts lieliem projektiem” – lielie projekti nav nekas tāds briesmīgs, kuros pēkšņi visas vienkāršās lietas ir jātaisa piecreiz sarežģītāk.
  • Ja jūs izmantojat iteratīvo / spējo (Agile) pieeju pieeju, tad izmantojiet atbilstošas spējās novērtēšanas tehnikas.

Ceru, ka šīs manas rekomendācijas studenti nākamreiz “uzgooglēs” un ņems tās vērā kvalifikācijas darba izstrādē 🙂


e-me browseris V2.0

10.06.2007

Pirms laba laika biju rakstījis par e-me direktorijas browseri, ar kura palīdzību varēja skatīt e-me LDAP direktorijas saturu – visu e-paraksta sertifikātu saņēmēju publisko informāciju (vārdu, uzvārdu, personas kodu, e-pastu). Tā kā šāda publiska e-me direktorijas satura browsēšana laikam nebija paredzēta, tad e-me LDAP servisā tika savesti kārtībā ierobežojumi, lai sertifikātu varētu sameklēt tikai pēc precīzi norādīta vārda, uzvārda un personas koda vai sertifikāta numura.

Savukārt nesen izlasīju, ka izrādās iekš e-me mājas lapas pieejamajā sertifikātu meklēšanas formā joprojām var sameklēt jebkuru sertifikātu, zinot tikai tā numuru, jo tur tiek atļauts iekš vārda un uzvārda ierakstīt “*”. Kāda jēga bija LDAP servisā šādu meklēšanas pieeju liegt, bet mājas lapā atstāt? 🙂 Bet izskatās, ka šī ir kāda nedokumentēta fīča, jo palīdzībā ir rakstīts

Lai meklētu personai izsniegtos sertifikātus:

  • Ievadiet personas vārdu un uzvārdu vai arī pseidonīmu
  • Ievadiet personas kodu vai sertifikāta seriālo numuru
  • Nospiediet „Meklēt”

NB! Visiem meklēšanas parametriem ir jāsakrīt precīzi.

Lai noskaidrotu, vai tas tā ir paredzēts vai nav, esmu uztaisījis e-me browseri V2.0 (serviss tagad ir slēgts), ar kura palīdzību var ērtāk sameklēt visus e-paraksta sertifikāta saņēmējus, kuri ir piekrituši publicēt savu sertifikātu informāciju.

Papildus intereses pēc apskatījos statistiku, kā pa mēnešiem ir audzis kopējais izsniegto e-paraksta sertifikātu skaits. Pēc http://www.e-me.lv sertifikātu meklēšanas rezultātiem uz doto brīdi kopējais e-paraksta sertifikātu skaits ir ap 1650 (vēl tikpat daudz ir identifikācijas sertifikāti).

Kā rezultātā mani darīja aizdomīgu sekojošais raksts, kurā ir minēts, ka e-paraksta lietotāju skaits ir sasniedzis 4000. Šādu atšķirību varētu izskaidrot vienīgi ar to, 1) ja šajos 4000 ir ieskaitīti arī tie, kas ir iesnieguši iesniegumu, bet vēl nav saņēmuši e-paraksta sertifikātus, 2) ja lielākā daļa lietotāju ir norādījuši, ka nevēlas publicēt savu sertifikātu (kas man neliekas ticami), 3) vai arī šajos 4000 katrs lietotājs ir ieskaitīts divreiz, jo katram ir gan e-paraksta, gan identifikācijas sertifikāts 🙂 Būtu interesanti uzzināt no e-me pārstāvjiem, kas ir saskaitīts šajos 4000 lietotājos.

Papildinājums (12.06):

eme_statistics2.pngIzskatās, ka e-paraksta sertifikātu pasūtījumā valsts ierēdņiem visiem (vai lielai daļai) tiek izsniegti sertifikāti, norādot, ka tos nevajag publicēt sertifikātu direktorijā. Tādēļ arī publisko sertifikātu skaits ir būtiski mazāks nekā kopējais izsniegtais. Lai iegūtu maksimālo novērtējumu izsniegtajiem sertifikātiem, izveidoju e-me statistikas lapas papildinājumu. Tā kā papildus katru dienu tiek skatītas arī izmaiņas e-me CRL (atsaukto sertifikātu sarakstu) failos, tad papildus ir pievienota arī statistika par ikdienā izsniegtajiem sertifikātiem (tam vajadzētu korekti strādāt sākot no šīs nedēļas).

Novērtējot maksimāli iespējamo izsniegto e-paraksta sertifikātu skaitu ieguvu 3250, tā ka novērtējums 4000 bija diezgan uz augšu apaļots (vai arī tur ir ieskaitīti tie, kas ir iesnieguši pieteikumu, bet sertifikātu vēl nav saņēmuši).

Papildinājums 14.06:

Tā kā e-me sertifikātu meklēšanas kritēriju nepilnības ir novērstas, tad e-me browsera serviss ir slēgts.


Windows animētā kursora problēma nav aprīļa joks

11.04.2007

Pagājušajā nedēļā noklausījos Security Now! ārkārtas epizodi par “The Animated Cursor Vulnerability”. Tā kā epizode iznāca otrajā aprīlī, tad es sākotnēji nodomāju, ka tas ir Leo un Steve pirmā aprīļa joks, jo tas man izklausījās ļoti dīvaini, ka Windows animētais kursors var radīt kaut kādas drošības problēmas.

Bet kā izrādās, tas nekāds joks nemaz nav un tiešām pastāv šāda kritiska drošības problēma saistīta ar Windows animētā kursora apstrādi (var panākt attālināta koda izpildi, atverot .ani, .cur vai .ico failus)  un ka šī problēma jau ir bijusi zināma vairākus mēnešus.

Pēc analoģijas nākamās Windows drošības problēmas varētu būt blinking cursor problēma vai arī desktop background image problēma 🙂


e-me direktorijas browseris

20.11.2006

Datoru drošības jomā ir tāds teiciens security through obscurity, ko lieto, kad drošību mēģina panākt ar to, ka ļoti slepeni uzveido kaut kādus drošības mehānismus un nevienam par to nesaka, un tad cer, ka sistēma tā rezultātā būs ļoti droša.

Šis teiciens man ienāca prātā, kad pamanīju, ka e-me ir ieviesusi kaut kādus LDAP direktorijas pārlūkošanas ierobežojumus, bet savā web lapā nepublicēja, kādi tieši ir šie ierobežojumi. Savā iepriekšējā rakstā par šo tēmu jau rakstīju, ka sākotnējā versijā ar LDAP pārlūkprogrammām iekš ldap://e-me.lv varēja brīvi skatīties publicēto e-paraksta sertifikātu saņēmēju vārdus, viņu personas kodus un e-pasta adreses. Tas laikam neizskatījās pārāk labi, un tāpēc e-me ieviesa šos jaunos ierobežojumus, kā rezultātā vairs nevarēja šādā veidā skatīt visu LDAP saturu.

Tā kā nekāda dokumentācija izstrādātājiem par LDAP lietošanu e-me mājas lapā nav pieejama, tad pēc “melnās kastes” principa nācās mazliet papētīt, kādus meklēšanas pieprasījumus LDAP serveris tomēr ņem pretī. Pēc nelieliem eksperimentiem izdevās atrast, ka meklēšana pēc precīza personas vārda un personas koda vai sertifikāta numura tomēr strādā (līdzīgi kā e-me web lapā sertifikātu meklēšanas formā). Un kas ir interesanti, ka nākamajā meklēšanā jau var meklēt arī tikai pēc sertifikāta numura, nenorādot personas vārdu. Nu un tā kā izsniegto sertifikātu numuri iet secīgi pēc kārtas, tad radās ideja, ka varētu uztaisīt e-me LDAP direktorijas browseri, ar kura palīdzību varētu redzēt visu izsniegto sertifikātu personu vārdus, personas kodus un e-pastus.

Rezultātā uztapa e-me direktorijas browseris  🙂
Ceru, ka tas varētu motivēt e-me turpmāk vairs netaisīt šādus slepenus drošības pasākumus un dalīties informācijā ar citiem izstrādātājiem.

Apskatoties e-me direktorijā pieejamos e-paraksta sertifikātu saņēmēju personu datus radās šādas pārdomas:

  • Dotajā brīdī skatījos, ka e-paraksta sertifikāti ir izsniegti ne vairāk kā 300 personām (no kurām liela daļa ir LP darbinieki). Tā kā jau ir pagājis pusotrs mēnesis, kopš e-paraksta sertifikāti tiek izsniegti un līdz gada beigām ir palicis tik pat daudz laika, tad neticās, ka līdz gada beigām lietotāju skaits būs 20 000, kā tika solīts pirmajās preses relīzēs.
  • Dīvaini, ka nav standartizēts, ar kādiem burtiem tiek rakstīti personu vārdi sertifikātos – dažiem tikai vārda un uzvārda pirmais burts ir ar lielo burtu, dažiem viss ir ar lielajiem burtiem.
  • Aizdomīgi, ka praktiski visiem direktorijā ir nopublicētas e-pasta adreses, kas pieteikuma anketās ir minētas kā kontakta e-pasta adreses un netiek minēts, ka tās tiks padarītas publiski zināmas visiem interesentiem. Šaubos, ka visi ir devuši piekrišanu savu e-pasta adrešu publicēšanai.
  • Vairākiem ir izsniegti sertifikāti ar pseidonīmiem un tie neizskatījās pēc vispārzināmiem māksliniekiem. Visticamāk, ka cēlonis ir tāds, ka aizpildot anketu tiek uzprasīts “kāds ir Jūsu pseidonīms”, nevis “vai Jūs vēlētos sertifikātu ar pseidonīmu”.

Un vispār domāju, ka nav vērts ieviest jebkādus ierobežojumus uz e-paraksta sertifikātu LDAP direktorijas skatīšanos, jo tad, kad sertifikāti sāks ceļot apkārt kopā ar parakstītajiem dokumentiem, tad šai informācijai tāpāt vairs nebūs nekādas slepenības (protams, no direktorijas vajadzētu izņemt e-pasta adreses, kas nav iekļautas sertifikātos). Salīdzinājumam – Igaunijā e-paraksta sertifikātu LDAP direktorijas pārlūkošanai nav nekādu ierobežojumu (ldap://ldap.sk.ee) un nekādas problēmas no tā tur nav radušās.