Archive for April, 2012

Testējamu PHP aplikāciju būvēšana

Posted on April 23rd, 2012 in PHP | 49 Comments »

PHP programmēšanas valodu pēdējā laikā cilvēki krietni aprunā. Ceļ gaismā visādas šīs valodas dīvainības un nejēdzības. Lai arī pēdējā laikā programmēju krietni mazāk, arī man ik pa laikam nākas uzdurties uz kādiem brīnumiem, kas mēdz kaitināt.

Šoreiz par labajām lietām un pareizo piegājienu programmēšanā. Nedēļas nogalē izlasīju The Grumpy Programmer’s Guide To Building Testable PHP Applications. Salīdzinoši īsa un viegli lasāma grāmata – nieka 66 lapas. Pamatā grāmatā uzsvars ir uz to, kā būvēt aplikācijas, kuras pēc tam būtu viegli testējamas un uzturamas. Ar testēšanu šeit saprotot ne tikai vienībtestēšanu, bet arī integrācijas testēšanu, funkcionālo testēšanu.

Grāmatā tiek visai labi izskaidrots Dependency Injection programmēšanas šablons (pattern), kas ļauj pēc tam arī veiksmīgi testēt katru no programmatūras komponentiem individuāli. Ja līdz šim man īsti nebija skaidrības ar ko Dependency Injection un Dependency Injection Container atšķiras no parasta Registry šablona lietošanas, tad tagad viss ir skaidrs. Tāpat grāmatā tiek stāstīts par to, kā nodrošināt, ka visas vides ir vienādas – gan izstrādes vide, uz kuras strādā katrs individuālais programmētājs, gan produkcijas vide, kurā pēc tam darbojas pati aplikācija (Vagrant, Chef, Puppet). Tiek apskatīti koda statiskās analīzes rīki (PHP Mess Detector, PHP Dead Code Detector, PHP Code Sniffer). Tāpat tiek apskatīts arī Continous Integration (PHP UnderControl, Jenkins CI) piegājiens programmatūras piegādei uz produkcijas vidi un citi pieredzējušākiem programmētājiem interesanti temati.

No grāmatas gan biju cerējis sagaidīt vairāk tieši ar testēšanu saistītas informācijas, taču arī šādā redakcijā grāmata bija pietiekami interesanta. Jāatzīst gan, ka tā ir vairāk tēmēta uz programmētājiem ar vairāku gadu pieredzi programmēšanā, jo iesācējiem vairums no apskatītajiem tematiem varētu būt visai liela Ķīnas ābece. Tas, ko visticamāk kādā brīdī pamēģināšu – izstrādes vides būvēšana izmantojot Vagrant un kādu no saistītajiem rīkiem. Visticamāk, ka būs jāpaspēlējas arī ar PHP Dead Code Detector un PHP Mess Detector, jo to izmantošana varētu būt gaužām vienkārša.

Ja grāmata jāvērtē ar zvaigznēm, tad dotu kaut kur ap 3.5. Biju gaidījis vairāk.

PHP Tester – 2 nedēļas vēlāk

Posted on April 18th, 2012 in draugiem.lv, PHP | 44 Comments »

Pirms 2 nedēļām publicēju informāciju par PHP Tester jeb maza izmēra platformu, ar kuras palīdzību testēt programmētāju zināšanas. PHP Tester bija 2 mērķi. Pirmkārt pārbaudīt man pašam kādu brīdi iekšā dzīvojušas idejas dzīvotspēju, otrkārt – pamēģināt pievērst PHP programmētāju uzmanību, lai viņi piesakās pie mums darbā draugiem.lv grupas uzņēmumos (tas arī ir iemesls, kāpēc Draugiem Pase šobrīd ir vienīgais autorizācijas mehānisms).

Iesākumā nedaudz statistikas. Kopā šajā rīkā ir autorizējušies nedaudz virs 200 cilvēkiem, ir bijuši ap 900 mēģinājumi veikt testus, no kuriem nepilni 200 ir bijuši veiksmīgi. Šo statistiku gan mazliet pabojāja fakts, ka bija kļūdas arī testēšanas sistēmā. Paskatot cauri cilvēkus, kas ir piedalījušies, atradu arī vairākus pazīstamus cilvēkus, kas ne tuvu ikdienā nenodarbojas ar PHP programmēšanu, taču ar vairumu testiem varēja tikt galā.

Nedaudz izvērstāk padomājot par idejas dzīvotspēju un potenciālu ir skaidrs, ka ideja būtu dzīvotspējīga, vienīgi ir jārēķinās, ka ilgtermiņā ir jāiegulda krietni liels darbs, lai ražotu saturu un jaunus testus. Vairāki no dalībniekiem jau ir vismaz pāris reizes pajautājuši, kad būs pieejami jauni testi.

Ar jaunu testu pievienošanu ir problēma – ir jābūt pilnīgai pārliecībai un garantijai, ka tavs izveidotais testēšanas scenārijs ir bez kļūdām, tātad pirms testu piedāvāšanas publikai, tie ir jānotestē kādā šaurākā testa grupā. Tas arī pierādījās esošajos testos. No esošajiem sešiem testiem divos es pats biju ielaidis neliela izmēra kļūdas testēšanas scenārijos, kā rezultātā uz šīm kļūdām, veidojot savus risinājumus, man norādīja dalībnieki. Tāpat arī atspēlējās pilnīgi nejauša testu datu ģenerēšana un daži no programmētājiem pamanījās datuma korektuma pārbaudes testus iziet ar ļoti vienkāršiem testa piemēriem un attiecīgi arī nepilnīgiem risinājumiem.

Visai pagrūti ir arī izdomāt kvalitatīvus, interesantus, pietiekami sarežģītus testa uzdevumus, jo PHP programmēšanas valoda ir ārkārtīgi brīva un vienu un to pašu lietu var darīt neskaitāmos dažādos veidos. Piemērs ar asociatīva masīva atslēgu samainīšanu vietām ar vērtībām. Izrādās tam ir pat speciāla iebūvēta PHP funkcija array_flip, kuru līdz šim nebiju piefiksējis. Tāpat piemērs ar 6. testa uzdevumu un MySQL vaicājumu ģenerēšanu. Komunicēt ar MySQL var izmantojot standarta mysql_* funkcijas, mysqli interfeisu, PDO bibliotēku, izmantot kādu ORM risinājumu. Katram no programmētājiem ir savs problēmu risināšanas piegājiens un pieredze ar izmantotajiem risinājumiem, turklāt dažiem no šiem risinājumiem uzdevumā minētā problēma vienkārši nav aktuāla, jo tiek risināta citā līmenī.

Raugoties no darba devēja viedokļa šāds rīks ir noderīgs un var dot ieskatu programmētāju izvēlētajos risinājumos, nemēģinot programmētājus piespiest programmēt darba intervijas laikā, kad kandidātiem nereti ir krietni paaugstināts stresa līmenis. Pie tam tiek dots ieskats arī tajā, kāds ir bijis programmētāja domu gājiens neveiksmīgajos testu mēģinājumos, cik ātri ir novērstas problēmas, u.c. Īsti nezinu vai tieši pateicoties šim rīkam, taču izskatās, ka vismaz vienu no nepieciešamajiem programmētājiem būsim atraduši, bet vakance PHP programmētājiem vēljoprojām ir aktuāla.

Ir viegli vēl pirms darba intervijas veikšanas identificēt cilvēkus, kuriem vēl ir nepieciešams krietni papildināt savas zināšanas, tāpat var viegli identificēt cilvēkus, kuriem varētu būt visai labas zināšanas par programmēšanu un ar kuriem noteikti ir vērts aprunāties klātienē.

Par tālākajiem nākotnes plāniem. Šobrīd nekādu tālāku grandiozu nākotnes plānu nav. Visticamāk, ka šo rīku izmantosim reizēs, kad gribēsim iegūt nedaudz vairāk informācijas par programmētāju pirms darba intervijas veikšanas. Šobrīd ir sagatavoti pāris jauni testa uzdevumi, kurus vispirms drošības pēc notestēšu slēgtā testa grupā un publicēšu tuvākajā laikā.

PHP Tester – zināšanu ieguves/pārbaudes risinājums PHP programmētājiem

Posted on April 4th, 2012 in PHP, Projekti | 26 Comments »

PHP Tester ir neliels eksperiments ar domu “fail early, fail often”, jeb ar minimāliem līdzekļiem un laika ieguldījumu radīts risinājums, kuram ir nepieciešams saprast publikas reakciju un nākotnes potenciālu, iespējams, globālā mērogā.

Laikā, kad mācījos vidusskolā man bija interese piedalīties dažādās ar programmēšanu saistītās aktivitātēs internetā. Tolaik bija populāras dažādas sacensības, kur organizatori bija sagatavojuši uzdevumus, dalībnieki iesūtīja savas programmas, tad tās ar automātiskiem testiem notestēja sistēma un iedeva dalībniekiem rezultātu, ko varēja salīdzināt ar citiem. Tas bija viens no maniem lielākajiem motivatoriem iemācīties programmēt un kļūt labākam par citiem programmētājiem.

Jau labu laiku biju domājis, kā šo procesu varētu pārvērst mūsdienīgākā risinājumā un uz tām programmēšanas valodām un problēmām, ar kurām šobrīd cilvēki sāk darboties. Bieži vien izpildāmas programmas sūtīšana uz serveri nozīmē arī būtiskus drošības riskus. Manā izvēlētajā PHP programmēšanas valodā tie ir pat ļoti izteikti. Tāpēc izveidoju risinājumu, kurā ar serveri notiek vien testa datu / rezultātu apmaiņa. Lai programmētāji nevarētu krāpties ar rezultātiem, testu dati tiek nejauši ģenerēti atbilstoši uzdevumu nosacījumiem katrai testēšanas reizei.

Ko var darīt ar PHP Tester?

  • Pārbaudīt un salīdzināt savas zināšanas ar citiem dalībniekiem. Šobrīd aplikācijā ir pieejami 6 testi, iebūvēts dalībnieku TOP, kurā var redzēt savu rezultātu attiecībā pret pārējiem dalībniekiem.
  • Apgūt jaunas zināšanas. Ja kāda no problēmām iepriekš nav risināta, tad pilnīgi noteikti tiks iegūtas jaunas zināšanas, šobrīd gan ar testiem vajadzētu varēt visai vieglit tikt galā jebkuram kaut nedaudz pieredzējušam PHP programmētājam. Tā kā šai sistēmai var visai viegli pievienot papildus testus, tad arī testu kopa un apgūstamo zināšanu apjoms nav ierobežots. Atliek vien izdomāt pietiekami interesantus testus.
  • Meklēt darbiniekus. Šobrīd programmētājiem, kas tiks galā ar vismaz 4 testiem tiks piedāvāts uzmeklēt kādu darba devēju Latvijā. Kāpēc lai šādu sistēmu neizmantotu arī citi uzņēmumi? Izdomā savu testu, nopublicē sistēmā un saki, ka runāsi tikai ar tiem, kas būs šo testu izpildījuši. Vai arī vienkārši saki, ka tevi interesē tikai darbinieki, kas šajā sistēmā būs izpildījuši vismaz X testus. Papildus – servera pusē ir iespējams redzēt programmētāju izmantotos risinājumus (programmas kods tiek sūtīts līdzi uz serveri). Tādējādi darba devējs var novērtēt, cik saprātīgi cilvēks ir programmējis un kāds tieši ir bijis izvēlētais risinājums.

Kāpēc tikai PHP?

Nav neviena sakarīga iemesla, kāpēc tam visam vajadzētu aprobežoties tikai ar PHP programmēšanas valodu. Tikpat labi var izmantot jebkuru citu programmēšanas valodu, kas spēj sarunāties ar izveidoto serveri un apmainīties ar datiem JSON formātā.

Ja kādam ir interese padarīt šos uzdevumus pieejamus arī citām programmēšanas valodām, tad varu piepalīdzēt ar informāciju, lai tiktu radītas klientu bibliotēkas citām valodām. Kontakti: ingus@webtech.lv.

Komentāros droši var padalīties ar ieteikumiem, kā arī interesantiem testiem, kurus pievienot sistēmai.

Esi gatavs pārspēt kādu? Dodies uz PHP Tester un pierādi, ka vari tikt galā!